Хорошего времени суток.
Прошу совета, подсказки и т.д. знающих людей.
Было серийно выпускаемое устройство еще на AT89C2051 которое запоминало данные во внешней флеш-памяти АТ24С256. Все было хорошо пока не решили перейти на проц по новее ATtiny2313. И часть данных решил сохранять во встроенной EEPROM.
Имеется опыт работы с ATmega, но как-то не приходилось использовать их внутренние EEPROM. Ничего не предвещало беды, но устройства начали глючить. Через некоторое время проблема была найдена - по какой-то причине данные в EEPROM сбивались. Причем - могло проработать и 2 неделе, а потом глюкнуть. А могло и сразу. Проблему решил просто - все данные опять храню во внешней флешке. Проблемы нет, но хочется понять!!!
Вот образец:
;----------- резервирование EEPROM
.ESEG
.ORG $0
zad: .byte 1
master: .byte 8
А это сами программы:
;--------------- запись байта ----------------
;адрес ячейки для записи/чтения находится work.
;результат в buf
eeprom_write:
cli
sbic EECR,EEWE ;-- ждать флаг готовности
rjmp eeprom_write
out EEAR,work ;-- установить байт адреса
out EEDR,buf ;-- копировать данные для записи
sbi EECR,EEMWE ;--
sbi EECR,EEWE ;-- начать запись
sei
ret
;--------------- чтение ----------------
eeprom_read:
cli
sbic EECR,EEWE ;-- ?ac?aoaiey ia ?oaiea
rjmp eeprom_read
out EEAR,work ;-- onoaiiaea ieaaoaai cia?aiey aa?ana
;clr buf
sbi EECR,EERE ;-- onoaiiaea i?eciaea ?oaiey
in buf,EEDR ;-- eiie?oai ?acoeuoao
sei
ret
во время выполнения этих процедур пропадание питания не наблюдалось, прерываний, которые могли бы вносить "коррективы" в адрес или менять байт информации - нет. Грешу только на питание - от 12В через 7805. Но ведь с внешней памятью работает нормально............ Думал наводка на кварц или его цепи - переключил на внутренний RC - результат тот же.