Perché la EEPROM dell’AVR a volte si cancella?

Alcuni progettisti che hanno usato l'AVR hanno detto che la EEPROM dell'AVR può essere casualmente cancellata. E poverini impazziscono perché non hanno alcun idea della possibile causa. È possibile che la EEPROM dell'AVR non sia stabile? È vero che a questo mondo non ci sono prodotti perfetti. Ma in questo caso la causa potrebbe essere il progettista stesso.

Avete idea di cosa sta facendo AVR durante il reset? Avete fatto qualche volta dei test per controllare il suo comportamento al reset? L'AVR è un microcontrollore molto veloce, perché è un microcontrollore RISC (non mi piace la parola RISC, in quanto RISC è un concetto di microprocessore che ha molte relative implicazioni nei compilatori, che non è adatto per microcontrollori. Mi piace dire che AVR è un come un microcontrollore RISC semplice e veloce). La velocità è il suo vantaggio, che a volte può creare un sacco di problemi se il progettista non sa come affrontarla. Se si prende la briga di leggere la documentazione AVR, scoprirete che AVR è in un modo RUNNING instabile prima che venga generato un reset valido. Incredibile è in modo RUNNING! Durante il processo di caricamento del firmware, tra i modalità WRITE e VERIFY, il reset viene rilasciato, poi asserito nel modo VERIFY. Durante questo breve periodo di rilascio del pin di reset, il programma sta eseguendo casualmente istruzioni. Ho un progetto LCD su AVR. Durante il download, il LCD mostra alcuni caratteri prima del modo VERIFY. Perché in questo periodo, la memoria ha un contenuto casuale, vengono mostrati caratteri casuali. Quando il sistema entra in VERIFY, il LCD non viene più scritto.

Se ciò accade e' perché il vostro hardware non ha un buon circuito di reset.... Durante il power on, prima che il reset valido viene generato, AVR sta eseguendo istruzioni casualmente. Per esempio, potrebbe scrivere la EEPROM. Perché l'esecuzione è fuori controllo, non solo i dati scritti sono casuali ma anche gli indirizzi della EEPROM. Perché la maggior parte dei registri AVR sono zero durante questo periodo. E il cosiddetto indirizzo ZERO (prima istruzione eseguita) non è definito, ma aleatorio. Se il programma esegue del codice casuale, prima di entrare nelle routine di gestione della EEPROM, chi sa cosa viene scritto e dove? Se non lo si può controllare non sono chiari i risultati. Cosi dopo il power on, i dati potrebbero essere alterati casualmente dal vostro stesso programma. È chiaro?

Le soluzioni sono:
1. È possibile evitare di utilizzare l’indirizzo zero di EEPROM per i dati memorizzati, anche se ciò non è una soluzione completa (Anche il compilatore IAR utilizza l'indirizzo di EEPROM uno, come default)
2. Utilizzando CRC per EEPROM per verificare l'integrità dei dati;
3. Attivare BOD di AVR, set 4.2V per sistema di 5V, set 2.7V per sistema di 3.3V, ma alcuni AVR non hanno BOD;
4. Utilizzando external Reset chip come DS1233, KIA7045 o IMP809/810.

Reference

Why AVR's EEPROM will be erased randomly (Original Chinese version, author Xiaoqi)

AVRProject Mega PCB

Atmel Application Notes

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend