|
Есть проблема EEPROM..., В третий раз сталкиваюсь со сбоями при работе с EEPROM |
|
|
|
Dec 12 2005, 20:51
|
Группа: Новичок
Сообщений: 8
Регистрация: 10-12-05
Из: Gostomel
Пользователь №: 12 055

|
Первый раз на 8515 /если честно - не помню, чтоя там делал :о((/, но тогда просто пропустил - поскольку использовал для хранения отладочной информации по системе. Второй раз на меге 8535 - получал обнуление по всем адрессам /хранил разгонную сетку частот для гиромотора, опять же на период обкатки системы/ Третий - на 32 меге. Первые четыре байта использую для хранения резонансных частот пьезодвигателя, пятый - для хранения адреса в системе (всего 12 модулей). На одной меге вместо записаного адреса 0х04, считываю то 0х04, то 0х05 то 0х0D. В программе для меги использовал функции работы с EEPROM от ИАР, во время работы программа сама ничего не пишет, только считывает по внешней команде. Ошибка в коде маловероятна, так как оставшиеся 11 модулей работают без нареканий.
Ответа от саппорта пока не получил.
Кто-то сталкивался с подобным? И как с этим бороться?
|
|
|
|
|
Dec 13 2005, 04:27
|
Группа: Новичок
Сообщений: 2
Регистрация: 29-11-04
Пользователь №: 1 254

|
Зашить в FUSE биты BODEN и BODLEV. При пониженом напряжении питания мк может выполнить любую команду. Проверить разводку платы на возможность кратковременых выбросов напряжения питания мк более 7V. (протекание больших силовых токов по общему мк)
|
|
|
|
|
Dec 13 2005, 06:07
|
Участник

Группа: Свой
Сообщений: 47
Регистрация: 12-07-05
Пользователь №: 6 725

|
У нас такой же сбой происходил давно, когда не ставили внешний супервизор по питанию.Сейчас при питании +5В ставим супервизор на +4,2В.
|
|
|
|
|
Dec 13 2005, 07:28
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(arttab @ Dec 13 2005, 04:34)  ... вот в чем вопрос - Иар при использовании только чтения не подставляет ли универсальную функции, которая и писать может? Если да, то сбой + указатель куданибудь и если на код записи, то /-/ данные. Нет, для чтения и записи используются разные функции. Volodymyr, мне в своё время приходилось дорабатывать функции чтения\записи EEPROM, т. к. я их использовал в разных процессах (речь идёт об ОСРВ). Посмотрите, не используете ли Вы их в прерываниях. В этом случае возможны сбои.
|
|
|
|
|
Dec 13 2005, 08:10
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(IgorKossak @ Dec 13 2005, 11:28)  Volodymyr, мне в своё время приходилось дорабатывать функции чтения\записи EEPROM, т. к. я их использовал в разных процессах (речь идёт об ОСРВ). Посмотрите, не используете ли Вы их в прерываниях. В этом случае возможны сбои. Непонятно Очень прошу пояснить Тоесть если я использую хапись в EEPROM по прирыванию таимера (например) возможны сбои ???
|
|
|
|
|
Dec 13 2005, 08:50
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(DeXteR @ Dec 13 2005, 10:10)  Непонятно Очень прошу пояснить Тоесть если я использую хапись в EEPROM по прирыванию таимера (например) возможны сбои ??? Вот пример первой попавшейся функции из файла eeprom.s90, поставляемого с продуктом в папке avr\src\lib: Код RSEG CODE:CODE:NOROOT(1) ?eeget8_64_inc: INC R24 ?eeget8_64: RCALL ?eewait OUT EEARL,R24 SBI EECR,EERE RET Предположим, что это выполняется в фоновой программе. Если между OUT и SBI вклинится прерывание, изменяющее содержимое EEARL, то прочитано будет не то, что надо (не из того места). Аналогично с записью. Я поступил следующим образом: ... долго писАть, лучше приложу файл. Подкорректировано всё, кроме той части, что касается AT86RF401.
Прикрепленные файлы
eeprom.rar ( 3.26 килобайт )
Кол-во скачиваний: 1265
|
|
|
|
|
Dec 13 2005, 09:15
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Спасибо Все ясно Сам имел проблемму с EEPROM очень давно (на АТ90 2313) Там было очень паршивое питание в схеме + я незнал о проблемме с нулевым адресом. Счас хочу вынести на обсуждение одну идею.Есть проект в котором нада хранить данные энергонезависимо + обновлять эти данные больше 100000 раз. В датащитах пишут что гарантировано 100000 перезаписей - больше - негарантирують Хотел создать в ЕЕПРОМЕ чтото вроже таблицы адресов сбоиных ячеек. Если после записи верификация не прошла то адрес заноситься в таблицу и прога больше непишет по ниму. Таким образом  пока все ЕЕПРОМ несдохнит девайс будет хранить данные нормально Очень прошу мнений и критики СПАСИБО De}{teR
|
|
|
|
|
Dec 13 2005, 11:22
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Ячейки таблицы сбоиных адресов например расположим вначале ЕЕПРОМА а данные будем писать с конца (адрес уменьшая) Таблица будет рости поэтому ее размер нада ограничить (например если 25% сбоиных - все ФАТАЛ ЕРРОР  ) Таблича будет писаться редко (по 1-й записи на 1 адресс) поэтому сбоев недолжнобыть =) Если таблица и сбойнет (1 адресс) это приведет к неиспользованию какогото адреса в ЕЕПРОМЕ (верефикация после записи всеравно отловит ошибку и данные неповредяться) Меня беспокоит один вопросс: Действительно ли ячейки ЕЕПРОМА умирают по одной ??? Опыта в этом деле нету поэтому будем ставить эксперимент и палить контроллеры =)
|
|
|
|
|
Dec 13 2005, 11:57
|
Местный
  
Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225

|
Цитата(DeXteR @ Dec 13 2005, 12:15)  Счас хочу вынести на обсуждение одну идею.
Есть проект в котором нада хранить данные энергонезависимо + обновлять эти данные больше 100000 раз. В датащитах пишут что гарантировано 100000 перезаписей - больше - негарантирують ну раз такое количество перезаписей то почему EEPROM? дык можно микромощную ram прикрутить с литиевой батареей
|
|
|
|
|
Dec 13 2005, 21:07
|
Группа: Новичок
Сообщений: 8
Регистрация: 10-12-05
Из: Gostomel
Пользователь №: 12 055

|
Небольшое исправление - я немного напутал в описании проблемы. Адрес ячейки - 0х004, а содержимое - вместо постоянного 0х04 - 0х04, 0х05, 0х0D.
Ответы: 1. По питанию всё нормально, сегдня проверяли. 2. Чтение при штатной работе производится только раз - по включению питания. Данные сохраняются в переменных. 3. Прерывание используется только по UART-у. Обработчик выставляет только признак получения данных. Сам анализ, как и обработка в теле программы (while (1) :о) ). 4. Перепроверил EEPROM через прорамматор, та же фигня, сбоящая ячейка 0х004. Несколько раз считывал, потом сверял содержимое файлов.
Саппорт всё так же молчит :о(.
В принципе проблему обошёл - перевёл на ячейку 0х00А. Но спортивный интерес остался - в решаемой задаче без EEPROM-а не обойтись.
to DeXteR ----------------------- идея интересная :о), но боюсь муторная немного... У Petka - интересней. ИМХО.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|