реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> EEPROM в pic16lf876a, Не пишет в EEPROM
Fenolftalein
сообщение Aug 1 2011, 12:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Доброго времени суток.
pic16lf876a не идет запись во встроенный EEPROM. Компилятор HT-PICC, частота 1MHz (XT), питание 4В. Чтение возвращает 0xFF. Копировал алгоритм записи в EEPROM из даташита, использовал макросы из родного хидера, менял напряжение питания. Все бесполезно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 1 2011, 13:55
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



МПЛаб достаточно честно симулирует работу с ЕЕПРОМ.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 1 2011, 14:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(xemul @ Aug 1 2011, 16:55) *
МПЛаб достаточно честно симулирует работу с ЕЕПРОМ.


В МПлаб и протеус все работает, не работает в железе.
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 1 2011, 15:26
Сообщение #4



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



"Доктор, у меня это!!!"
Запишите ЕЕПРОМ программатором и прочитайте её потом контроллером в УАРТ.
Сделайте запись с проверкой и лейте диагностику в УАРТ (или хотя бы мигайте лампочкой).
Или к телепатам.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 1 2011, 15:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(xemul @ Aug 1 2011, 18:26) *
"Доктор, у меня это!!!"
Запишите ЕЕПРОМ программатором и прочитайте её потом контроллером в УАРТ.
Сделайте запись с проверкой и лейте диагностику в УАРТ (или хотя бы мигайте лампочкой).
Или к телепатам.

Запись с проверкой уже сделал, чтение возвращает 0xff. Записывать EEPROM программатором пока не пробовал.
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 1 2011, 16:08
Сообщение #6



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Fenolftalein @ Aug 1 2011, 19:45) *
Запись с проверкой уже сделал, чтение возвращает 0xff.

МПЛаб, как я уже писал, при работе с ЕЕПРОМ симулирует всё, кроме напряжения питания и джиттера таймера записи. Поэтому могу предположить только (см. include/eeprom_routines.h):
Код
/* NOTE WELL:

   The macro EEPROM_READ() is NOT safe to use immediately after any
   write to EEPROM, as it does NOT wait for WR to clear.  This is by
   design, to allow minimal code size if a sequence of reads is
   desired.  To guarantee uncorrupted writes, use the function
   eeprom_read() or insert
    while(WR)continue;
   before calling EEPROM_READ().
*/
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 2 2011, 04:51
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(xemul @ Aug 1 2011, 20:08) *
МПЛаб, как я уже писал, при работе с ЕЕПРОМ симулирует всё, кроме напряжения питания и джиттера таймера записи. Поэтому могу предположить только (см. include/eeprom_routines.h):
Код
/* NOTE WELL:

   The macro EEPROM_READ() is NOT safe to use immediately after any
   write to EEPROM, as it does NOT wait for WR to clear.  This is by
   design, to allow minimal code size if a sequence of reads is
   desired.  To guarantee uncorrupted writes, use the function
   eeprom_read() or insert
    while(WR)continue;
   before calling EEPROM_READ().
*/


Добавил перед чтением ожидание сброса флага WR. Это ничего не меняет, в моей программе чтение происходит гарантированно через промежуток времени, достаточный для записи.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 2 2011, 13:07
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Записать EEPROM программатором не удалось, выдает ошибку при верификации. Есть еще идеи?
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 2 2011, 13:18
Сообщение #9



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Заменить контроллер.
Или если именно этот контроллер Вам дорог и если в ЕЕПРОМ пишется нечасто, использовать вместо неё флэш.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 2 2011, 13:33
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



EEPROM используется для запоминания настроек устройства при его отключении. Запись производится каждый раз при отключении питания, поэтому не хочу использовать флэш. Еще идеи? Если у МК есть EEPROM, то он должен писаться, по моему так.
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 2 2011, 14:24
Сообщение #11



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Fenolftalein @ Aug 2 2011, 17:33) *
Если у МК есть EEPROM, то он должен писаться, по моему так.

Могу предположить, что так оно и задумывалось.
Согласно Вашему описанию проблемы, вариантов кроме каким-то образом прибитой ЕЕПРОМ у меня нет. Потому и предложил заменить контроллер.

UPD: в стародавние времена (2003 г.) была эррата для F627A_628A_648A на предмет записи в ЕЕПРОМ при разрешённом LVP. Посмотрите, может для F876A тоже есть нечто подобное.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Aug 3 2011, 07:48
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(xemul @ Aug 2 2011, 18:24) *
Могу предположить, что так оно и задумывалось.
Согласно Вашему описанию проблемы, вариантов кроме каким-то образом прибитой ЕЕПРОМ у меня нет. Потому и предложил заменить контроллер.

UPD: в стародавние времена (2003 г.) была эррата для F627A_628A_648A на предмет записи в ЕЕПРОМ при разрешённом LVP. Посмотрите, может для F876A тоже есть нечто подобное.


В эррате описана только одна ошибка, связанная с EEPROM. Повышенное потребление в ждущем режиме, если EEADDR указывает на значение отличное от 0xFF.

Обнаружил следующую вещь: если прочитать EEPROM после долгого выключения, то чтение вернет 0, но последующие чтения будут возвращать уже 255. Что это? Уже проблема чтения или записи? (В промежутке между чтениями производится запись в EEPROM)

Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 3 2011, 11:53
Сообщение #13



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Fenolftalein @ Aug 3 2011, 11:48) *
Что это? Уже проблема чтения или записи? (В промежутке между чтениями производится запись в EEPROM)

С таким анамнезом попробуйте обратиться к чудотворцам или телепатам.

Согласно Вашему описанию проблемы у меня таки был ещё один вариант - с контроллером и ЕЕПРОМ всё в порядке (я дважды столкнулся с физической неисправностью ЕЕПРОМ в пиках - когда испытывал 16C84 на живучесть, и когда она действительно почему-то сама сдохла; был ещё прикол, когда ни в какую не писался последний байт в определённой последовательности 3-х или 4-х байтов, но это вряд ли Ваш случай), а траблы, соответственно, в других местах, - но я не стал его озвучивать, т.к. вероятность одновременных (не|слабо)кореллированных проблем в разных местах должна быть существенно меньше вероятности одной локальной проблемы, какой бы маловероятной она не была.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 03:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01587 секунд с 7
ELECTRONIX ©2004-2016