題:
EEPROM值恢復為255
MoKaM
2015-04-12 02:36:00 UTC
view on stackexchange narkive permalink

當我向EEPROM中寫入'13'並在其正常工作後直接讀取時。

但是,當我註釋掉代碼的寫入部分並嘗試僅讀取數據時,該值為

我不再在以前的13上恢復到255。怎麼回事?

我正在用Nano R3編程的帶有16MHz晶體的麵包板上運行一個獨立的atmega328。

  void setup(){Serial.begin(9600); pinMode(2,OUTPUT); // EEPROM.write(1,13);} void loop(){scoreBinary();} void scoreBinary() {int score = EEPROM.read(1); if(score == 13){digitalWrite(2,HIGH);} delay(10000);}  
一 回答:
Ignacio Vazquez-Abrams
2015-04-12 02:46:21 UTC
view on stackexchange narkive permalink

默認情況下,在寫入閃存之前擦除芯片時,MCU中的EEPROM被擦除(至0xff)。如果要防止這種情況,則需要在熔絲位中編程EESAVE,該位是'328的高熔絲字節中的位3。

啊!謝謝!說得通!現在要更改保險絲位,是否應該更改boards.txt中的值?當前高保險絲字節為diecimila.menu.cpu.atmega328.bootloader.high_fuses = 0xDA(二進制1101 1010),我應該將其更改為diecimila.menu.cpu.atmega328.bootloader.high_fuses = 0xFA(二進制1111 0111)那是正確的= /嗎?
或者也許我可以使用avrdude在cmd中鍵入一些內容?
逐位讀取當前的高保險絲值(`avrdude ... -U hfuse:r:-:h`),並將其與0xf7一起寫回。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...