Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EEPROM нельзя читать сразу после записи?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
akken
Нигде в документации не встречал требования к выдержке времени после записи в ЕЕПРОМ для чтения, причем не только что записанных ячеек, а следующих.
Конкретно, м/с тини2313, запись двух байт, увеличение адреса на 2, чтение 2-х байт.
Интервал требуется приличный, на 4Мгц двадцати тактов не хватает, поставил 4 мс.

Кто нибудь сталкивался с подобным? Убил два дня на пустом месте wacko.gif
Sergey'F
Цитата(akken @ Nov 16 2009, 01:04) *
Нигде в документации не встречал требования к выдержке времени после записи в ЕЕПРОМ для чтения, причем не только что записанных ячеек, а следующих.

Вот из доки на AtMega8:
The user should poll the EEWE bit before starting the read operation. If a write operation is in progress, it is neither possible to read the EEPROM, nor to change the EEAR Register.
akken
Цитата(Sergey'F @ Nov 16 2009, 01:10) *
Вот из доки на AtMega8:
The user should poll the EEWE bit before starting the read operation. If a write operation is in progress, it is neither possible to read the EEPROM, nor to change the EEAR Register.


Для записи применяю стандартную процедуру из документации Атмел, указанный бит контролируется. Здесь ( для Тини) не так прозрачно написано:

The EEPROM Program Enable Signal EEPE is the programming enable signal to the
EEPROM. When EEPE is written, the EEPROM will be programmed according to the
EEPMn bits setting. The EEMPE bit must be written to one before a logical one is written
to EEPE, otherwise no EEPROM write takes place. When the write access time has
elapsed, the EEPE bit is cleared by hardware. When EEPE has been set, the CPU is
halted for two cycles before the next instruction is executed.

Если бы я читал ячейки, которые только что записал, то насторожился бы сразу.
Теперь механика понятна, спасибо.
defunct
Цитата(akken @ Nov 16 2009, 00:42) *
Здесь ( для Тини) не так прозрачно написано:

Это просто из другой оперы.
В приведенной вами цитате написано аболютно прозрачно на тему - что надо делать для того чтобы инициировать запись.
Длительность операций стрирания и записи смотрите в табличке EEPROM Mode bits, для
Erase + Write одной ячейки указано время выполнения - 3.4ms.

В том же даташите на Tiny, секцией ниже (в которой описывается бит EERE) есть такая информация:

The user should poll the EEPE bit before starting the read operation. If a write operation is in progress, it is neither possible
to read the EEPROM, nor to change the EEAR Register.
akken
Цитата(defunct @ Nov 16 2009, 02:57) *
Это просто из другой оперы.
В приведенной вами цитате написано аболютно прозрачно на тему - что надо делать для того чтобы инициировать запись.
Длительность операций стрирания и записи смотрите в табличке EEPROM Mode bits, для
Erase + Write одной ячейки указано время выполнения - 3.4ms.

В том же даташите на Tiny, секцией ниже (в которой описывается бит EERE) есть такая информация:

The user should poll the EEPE bit before starting the read operation. If a write operation is in progress, it is neither possible
to read the EEPROM, nor to change the EEAR Register.




EEPROM_read:
; Wait for completion of previous write
sbic EECR,EEWE

EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEPE


– – EEPM1 EEPM0 EERIE EEMPE EEPE EERE - так расписаны биты ЕЕСR

Видимо восемь лет назад, не найдя в регистре бита с именем EEWE, решил его проигнорировать smile.gif Поэтому в подпрограмме записи он есть, при чтении нету.
Век живи - век учись.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.