1887ВЕ7Т, 1887ВЕ8Т

Модераторы: ea, Alis, pip, gurzzza, sya, _sva_

sya
Специалист
Сообщения: 240
Зарегистрирован: 19 ноя 2009, 14:40
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение sya »

Здравствуйте!

Вы написали –
произвольные ячейки EEPROM меняют своё содержимое в процессе работы.
Неясно, нарушение данных происходит в ячейках в пределах всего массива памяти, или в пределах какого-либо объема памяти, или одиночных ячеек?

В режиме самопрограммирования памяти данных (EEPROM) в микросхеме 1887ВЕ7Т не выполняется обнуление буфера страницы при первой записи в память данных (EEPROM), что приводит к порче данных в пределах страницы, т.к. память данных имеет постраничную организацию (32 байта) с возможностью изменения как всей страницы, так и побайтно.

Пример: При изменении байта по адресу 0x008, возможно изменение других байтов данных в пределах страницы с адресом 0x000 – 0x01F. При изменении байта по адресу 0x02A, возможно изменение других байтов данных в пределах страницы с адресом 0x020 – 0x03F.

Данное поведение проявляется только при первой записи в память данных. Запись последующих байтов не приведет к порче данных EEPROM.
Для избежания искажения данных необходимо выполнить, так называемую “холостую запись”, т.е. перед первой записью информации в память данных необходимо один раз выполнить запись байта (неважно какими данными) в любую страницу (например, которую вы не используете, допустим, последнюю в массиве памяти данных с адресом 0xFE0 – 0xFFF). Таким образом, при записи байта данных по адресу в пределах данной страницы, порча данных произойдет только в области этой страницы.
Последующие записи будут выполняться корректно в любую область памяти данных.

Независимо от описанной выше ситуации рекомендуется включать монитор питания (BOD) или использовать внешний монитор питания для предотвращения непредсказуемого поведения микроконтроллера вне предельно-допустимого режима работы, которое также может приводить к искажению данных.
r367@mail.ru
Сообщения: 7
Зарегистрирован: 30 сен 2015, 10:12

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение r367@mail.ru »

sya писал(а):Неясно, нарушение данных происходит в ячейках в пределах всего массива памяти, или в пределах какого-либо объема памяти, или одиночных ячеек?
Изменения были обнаружены в произвольных ячейках от адреса 0x0000 до 0x009A. Изменения обнаруживались как после запуска контроллера, так и в процессе непрерывной работы
По программе запись в EEPROM производится по адресам от 0x000A до примерно 0x0260
sya писал(а):Данное поведение проявляется только при первой записи в память данных. Запись последующих байтов не приведет к порче данных EEPROM.
Изменения были неоднократными в процессе работы (контроллер не выключался, в течении дня было обнаружено минимум два изменения одной и той же ячейки)
sya писал(а):Для избежания искажения данных необходимо выполнить, так называемую “холостую запись”....
Производил запись в неиспользуемую ячейку 0x0FFF до выполнения первых операций с EEPROM по программе. Не помогло.
sya писал(а):Независимо от описанной выше ситуации рекомендуется включать монитор питания (BOD)...
Включен:
r367@mail.ru писал(а):BODEN = 0
sya
Специалист
Сообщения: 240
Зарегистрирован: 19 ноя 2009, 14:40
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение sya »

Пытаемся добиться ошибочной записи или произвольного изменения ячеек памяти EEPROM.
Последовательность действий:
1. Предварительно весь массив EEPROM записывается различными данными
2. Программный код записывает байт по определенному адресу
3. Ждем окончания предыдущей записи (ждем, пока не сбросится флаг EEWE регистра EECR)
4. Записываем следующий байт в ту же страницу
5. Ждем окончания предыдущей записи
6. Записываем следующий байт в другую страницу
7. Ждем окончания предыдущей записи
8. Записываем следующий байт в другую страницу
9. Ждем окончания предыдущей записи
10. Выходим из процедуры записи EEPROM
11. Верифицируем весь массив данных EEPROM на наличие испорченных или неправильно записанных данных.

Верификация производится как после нескольких сотен циклов записи, так и после единичных. Нарушение информации не наблюдается.

Уточните пожалуйста, искажение информации происходит после записи данных, или просто через какое-то время работы микроконтроллера, в течении которого не было попытки записи в EEPROM?
Пожалуйста, опишите Ваш процесс записи в EEPROM подробнее. Окончание предыдущей записи контролируется по флагу или по времени? Возникает ли прерывание во время записи данных в EEPROM? Если в подпрограмме обработки прерывания происходит обращение к памяти возможно искажение записываемых данных.
r367@mail.ru
Сообщения: 7
Зарегистрирован: 30 сен 2015, 10:12

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение r367@mail.ru »

sya писал(а):Уточните пожалуйста, искажение информации происходит после записи данных, или просто через какое-то время работы микроконтроллера, в течении которого не было попытки записи в EEPROM?
Пока нет возможности разделить момент, после которого происходит порча EEPROM - сразу после записи или в паузе между записями. Запись производится по различным событиям как вне устройства, так и внутри. Контролируется изменение события и запись в EEPROM осуществляется только при различии с копией в EEPROM. Так что запись может производится от одной записи в час до 3...6 раз в секунду.
sya писал(а):Пожалуйста, опишите Ваш процесс записи в EEPROM подробнее. Окончание предыдущей записи контролируется по флагу или по времени? Возникает ли прерывание во время записи данных в EEPROM?
Запись в EEPROM производится в стандартной библиотеке компилятора CodeVisionAVR:
__EEPROMWRW:
RCALL __EEPROMWRB
ADIW R26,1
PUSH R30
MOV R30,R31
RCALL __EEPROMWRB
POP R30
SBIW R26,1
RET

__EEPROMWRB:
SBIS EECR,EEWE
RJMP __EEPROMWRB1
WDR
RJMP __EEPROMWRB
__EEPROMWRB1:
IN R25,SREG
CLI
OUT EEARL,R26
OUT EEARH,R27
SBI EECR,EERE
IN R24,EEDR
CP R30,R24
BREQ __EEPROMWRB0
OUT EEDR,R30
SBI EECR,EEMWE
SBI EECR,EEWE
__EEPROMWRB0:
OUT SREG,R25
RET


Прерывания запрещены.

Если бы в этой процедуре была ошибка, то порча данных в EEPROM происходила бы и в ATmega128/
sya
Специалист
Сообщения: 240
Зарегистрирован: 19 ноя 2009, 14:40
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение sya »

Провели еще несколько циклов проверок записи и хранения данных в EEPROM по алгоритму аналогичному вашему, ошибок не выявлено.
Сообщите, пожалуйста, сколько образцов микросхем у вас, сбой проявляется на всех образцах?
Сообщите значение конфигурационных ячеек. Программирование памяти команд и памяти данных внешним программатором происходит успешно?
Частота генератора сторожевого таймера в 1887ВЕ7Т – 500КГц, у ATmega128 – 1МГц. Возможно ли влияние данного отличия на работу вашей программы?
r367@mail.ru
Сообщения: 7
Зарегистрирован: 30 сен 2015, 10:12

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение r367@mail.ru »

Два образца (серия 1515), на обоих EEPROM сбоит.
Частота WDT не критична
Конфигурационные биты в приложении
Вложения
lock_fuse.JPG
lock_fuse.JPG (57.31 КБ) 54387 просмотров
sya
Специалист
Сообщения: 240
Зарегистрирован: 19 ноя 2009, 14:40
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение sya »

Здравствуйте!

По предоставленной информации мы не смогли воспроизвести ситуацию, которая бы приводила к нарушению данных в EEPROM.
r367@mail.ru писал(а):Пока нет возможности разделить момент, после которого происходит порча EEPROM - сразу после записи или в паузе между записями.
Необходимо определить, когда происходит искажение информации и действительно ли происходит самопроизвольное искажение
r367@mail.ru писал(а):Изменения были обнаружены в произвольных ячейках
Подозрение вызывает следующий факт:
r367@mail.ru писал(а):в течении дня было обнаружено минимум два изменения одной и той же ячейки
r367@mail.ru
Сообщения: 7
Зарегистрирован: 30 сен 2015, 10:12

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение r367@mail.ru »

Добрый вечер!
Прошу прощения за молчание, отвлекали на другую работу.

На скорую руку соорудил опрос отлаживаемого изделия с выводом информации в Эксель.
Опрашивается ячейки ЕЕПРОМ с 4 по 160 адрес. На самом деле запись в ЕЕПРОМ ведётся до 400-й ячейки, но по-быстрому опросить можно только 156.

Полдня непрерывной работы после прошивки не выявили изменений. Питание не выключалось, перезагрузок не было. Контроллер нагревали от 22 до 100 градусов.
По программе меняется содержимое ячеек по адресам 12-13 (здесь и далее производится запись 16-разрядного числа в пару регистров), 14-15....28-29, 32-33...50-51, 64-65, 68-69, 84-85, 88-89, 104-105, 108-109, 124-125, 146-147...150-151, 154-155 и далее в неопрашиваемую область. Запись производится крайне редко (от единиц в час до единиц в минуту) за исключением адресов 24-25, 26-27, 146-147 (запись секунд и количества принятых посылок по интерфейсу)

После отключения питания и последующего включения пошли изменения в ячейках 5, 6, 11.
Другие ячейки от 4 до 160 не менялись (кроме тех, что меняются по программе)
Перезагрузка контроллера по-прежнему не влияла на ЕЕПРОМ

Сильное подозрение на порчу ЕЕПРОМ при включении питания.
Скорость нарастания напряжения питания достаточно высокая. Стабильность питания наступает примерно через 3.5мс после включения. А на уровень 4,7В выходит примерно через 0.3мс.
Положительное напряжение на выводе Reset стабилизируется примерно через 12мс.

ЗЫ: в процессе тестирования один контроллер вышел из строя после подачи на выход Reset потенциала земли при включении. Хотя, вроде, потенциал земли для данного вывода есть рабочий момент.
Видимо при включении питания Reset оказался паразитной землёй и перегорел данный порт.

ЗЫЫ: теперь у нас остался всего один образец Вашего контроллера :(
Вложения
Четыре варианта измененных ячеек после включения питания
Четыре варианта измененных ячеек после включения питания
Изменённые ячейки ЕЕПРОМ после Power_OFF_ON (контроллер ВЕ7Т) -1...4.jpg (231.34 КБ) 54326 просмотров
Жёлтый - питание +5v, голубой - Reset
Жёлтый - питание +5v, голубой - Reset
1887BE7T PowerON (Vcc, Reset).png (8.67 КБ) 54326 просмотров
pip
Модератор
Сообщения: 22
Зарегистрирован: 13 ноя 2009, 15:23
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение pip »

Доброй ночи!

Для микросхемы 1887ВЕ7Т ОЧЕНЬ ВАЖНО!!! соблюдать следующее условие: |U#vcc − U∩vcc| ≤ 0,3В, где U#vcc − питание цифровой части (выводы 21, 52), U∩vcc − питание аналоговой части (вывод 64). Это соотношение должно выполняться всегда, в том числе и в момент подачи напряжений на микросхему. Запаздывание (при включении) фронта напряжения аналогового питания относительно цифрового, С ВЫСОКОЙ ДОЛЕЙ ВЕРОЯТНОСТИ, приведёт к искажению информации в EEPROM. Снимите, пожалуйста, осциллограммы напряжений питания цифровой и аналоговой частей в момент их подачи.

PS: Кстати, соблюдение этого условия требуется и для ATmega128 (стр. 325 и 326 даташита http://www.Атмел.com/Images/doc2467.pdf), хотя, надо отметить, что атмеловская схема менее критична к нарушению данного условия.
sya
Специалист
Сообщения: 240
Зарегистрирован: 19 ноя 2009, 14:40
Откуда: Воронеж
Контактная информация:

Re: Ошибка ЕЕПРОМ 1887ВЕ7Т

Сообщение sya »

Здравствуйте!

Вы писали:
r367@mail.ru писал(а): ЗЫ: в процессе тестирования один контроллер вышел из строя после подачи на выход Reset потенциала земли при включении. Хотя, вроде, потенциал земли для данного вывода есть рабочий момент.
Видимо при включении питания Reset оказался паразитной землёй и перегорел данный порт.

ЗЫЫ: теперь у нас остался всего один образец Вашего контроллера :(
Данная процедура не должна была привести к выводу из строя микроконтроллера.
Предлагаем вам выслать вышедший из строя микроконтроллер (мы правильно понимаем, что он не 5-й приемки?). Укажите реквизиты вашего предприятия, мы вышлем вам замену.
Также просим вас привести схему включения микроконтроллера (цифровое и аналоговое питание, сброс).
Ответить

Вернуться в «Микроконтроллеры RISC»