[![crates.io](https://img.shields.io/crates/v/eeprom.svg)](https://crates.io/crates/eeprom)
[![crates.io](https://img.shields.io/crates/d/eeprom.svg)](https://crates.io/crates/eeprom)
[![CircleCI](https://img.shields.io/circleci/project/github/idubrov/eeprom.svg)](https://circleci.com/gh/idubrov/eeprom)
[![Codecov](https://img.shields.io/codecov/c/github/idubrov/eeprom.svg)](https://codecov.io/gh/idubrov/eeprom)
# eeprom
Flash-based EEPROM emulation for the STM32 series microcontrollers.
Uses 2 or more Flash pages for storing 16-bit data.
## Examples
```rust
extern crate stm32f103xx;
extern crate eeprom;
use stm32f103xx::FLASH;
use eeprom::EEPROM;
// Get flash somehow...
// let flash = FLASH.borrow(cs);
let eeprom = flash.eeprom();
eeprom.init().expect("failed to init EEPROM");
eeprom.write(1, 0xdead).expect("failed to write data to EEPROM");
eeprom.write(2, 0xbeef).expect("failed to write data to EEPROM");
assert_eq!(0xdead, eeprom.read(1).unwrap());
assert_eq!(0xbeef, eeprom.read(2).unwrap());
assert_eq!(true, eeprom.read(3).is_none());
```
## Panics
EEPROM controller will panic in the following cases:
* No free space on the page even after compaction
* active page cannot be found during `read`/`write` operation (`init` makes sure that there
is exactly one active page.
[Full Documentation](https://docs.rs/eeprom)
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.