embedded_savegame/
eeprom24x.rs

1//! AT24Cxx EEPROM support
2//!
3//! This module provides a [`Flash`](crate::storage::Flash) implementation for AT24Cxx series EEPROM chips.
4//! Available with the `eeprom24x` feature.
5//!
6//! Supports EEPROM chips like AT24C32, AT24C64, AT24C128, etc. using the `eeprom24x` crate's driver.
7
8use crate::storage::Flash;
9use core::fmt;
10use eeprom24x::Eeprom24xTrait;
11
12/// Flash trait implementation for AT24Cxx EEPROM chips
13impl<T: Eeprom24xTrait> Flash for T
14where
15    T::Error: fmt::Debug,
16{
17    type Error = eeprom24x::Error<T::Error>;
18
19    fn read(&mut self, addr: u32, buf: &mut [u8]) -> Result<(), Self::Error> {
20        self.read_data(addr, buf)?;
21        Ok(())
22    }
23
24    fn write(&mut self, addr: u32, data: &mut [u8]) -> Result<(), Self::Error> {
25        self.write_page(addr, data)?;
26        while self.read_current_address().is_err() {}
27        Ok(())
28    }
29
30    fn erase(&mut self, addr: u32) -> Result<(), Self::Error> {
31        if self.read_byte(addr)? != 0xFF {
32            self.write_byte(addr, 0xFF)?;
33            while self.read_current_address().is_err() {}
34        }
35        Ok(())
36    }
37}