AVR Internal eeprom reading issue
我正在使用 atmega8A 的内部 EEPROM,使用 avr\\’s EEPROM 库。我的代码看起来像这样
1
2 3 4 5 6 7 8 9 10 11 12 |
#define EEPROM_ADDR 0x0A
int main(void) //eeprom_write_byte((uint8_t*)EEPROM_ADDR, 8); |
当我取消注释行 eeprom_write_byte((uint8_t*)EEPROM_ADDR, 8); 然后使用 val = eeprom_read_byte((uint8_t*)EEPROM_ADDR); 读取时,会读取正确的值 8。但是当我对该行进行注释然后重新刷新代码时,值将更改为 255。
有什么建议吗?
注意 – 我已取消选中 avrdudes 中用于擦除闪存和 eeprom 的框
- 如果那真的是您的代码,那么您如何确定 val 是什么?
- 你真的确定闪存在编程过程中没有被擦除吗?确保设置了”保留 EEMEM”保险丝。您可能应该在闪烁后使用您的编程工具读出 EEPROM 并验证它是否工作。
通常,当执行”芯片擦除”操作时,EEPROM 也会被清除。
为了防止这种情况,您必须编程(即设置为零)EESAVE 熔丝位,它是高熔丝字节中的第 3 位(请参阅数据表第 29.2 章熔丝位)
来源:https://www.codenong.com/58920212/