[](https://crates.io/crates/eeprom)
[](https://crates.io/crates/eeprom)
[](https://circleci.com/gh/idubrov/eeprom)
[](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
use eeprom::EEPROM;
struct MockFlash;
// let param = Params { .. };
// let mut flash: stm32f1::stm32f103::FLASH = /* get flash somehow */;
let mut eeprom = flash.eeprom(params);
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.