Skip to content

Commit 4d49b2c

Browse files
committed
eeprom: Add workaround for #406
The smart logic that replaces a write of 0xff with an erase is removed, and any erase operation is replaced by a write of 0xff. This is done because the erase function is borked, as documented here: #406
1 parent badf86c commit 4d49b2c

File tree

1 file changed

+8
-20
lines changed

1 file changed

+8
-20
lines changed

avr-hal-generic/src/eeprom.rs

+8-20
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ where
6363
#[inline]
6464
pub fn erase_byte(&mut self, offset: u16) {
6565
assert!(offset < Self::CAPACITY);
66-
self.p.raw_erase_byte(offset)
66+
// Write 0xff here because the erase function is borked.
67+
// See also: https://github.com/Rahix/avr-hal/issues/406
68+
self.p.raw_write_byte(offset, 0xff)
6769
}
6870

6971
pub fn read(&self, offset: u16, buf: &mut [u8]) -> Result<(), OutOfBoundsError> {
@@ -179,26 +181,12 @@ macro_rules! impl_eeprom_common {
179181

180182
// Check if any bits are changed to '1' in the new value.
181183
if (diff_mask & data) != 0 {
182-
// Now we know that _some_ bits need to be erased to '1'.
183-
184-
// Check if any bits in the new value are '0'.
185-
if data != 0xff {
186-
// Now we know that some bits need to be programmed to '0' also.
187-
self.eedr.write(|w| w.bits(data)); // Set EEPROM data register.
188-
189-
{
190-
let $periph_ewmode_var = &self;
191-
$set_erasewrite_mode
192-
}
193-
self.eecr.write(|w| w.eepe().set_bit()); // Start Erase+Write operation.
194-
} else {
195-
// Now we know that all bits should be erased.
196-
{
197-
let $periph_emode_var = &self;
198-
$set_erase_mode
199-
}
200-
self.eecr.write(|w| w.eepe().set_bit()); // Start Erase-only operation.
184+
self.eedr.write(|w| w.bits(data)); // Set EEPROM data register.
185+
{
186+
let $periph_ewmode_var = &self;
187+
$set_erasewrite_mode
201188
}
189+
self.eecr.write(|w| w.eepe().set_bit()); // Start Erase+Write operation.
202190
}
203191
//Now we know that _no_ bits need to be erased to '1'.
204192
else {

0 commit comments

Comments
 (0)