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

 
 
> Какая вероятность порчи данных в разных областях памяти AVR?
Laksus
сообщение Sep 9 2011, 09:30
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Насколько я понимаю, вероятность порчи данных в eeprom AVR большая, и желательно застраховаться от их порчи.

Допутим у меня в приборчике используется какая-то уставка, я ее храню в eeprom, в пяти копиях.
Кроме того во флеш записаны верхний и нижний допустимые пределы этой уставки.
При включении прибор читает копии уставки из еепром и если есть больше половины одинаковых, то проверяет лежат ли они в допустимых пределах, если да, то эта уставка присваивается переменной в RAM и дальше прибор с ней работает.
________________
Вопросы.
А какая вероятность порчи данных в ячейке RAM и FLASH?
Имеет ли смысл проверять правильность данных и в этих областях?
Если да, то как это лучше сделать?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
ArtemKAD
сообщение Sep 9 2011, 09:47
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
Насколько я понимаю, вероятность порчи данных в eeprom AVR большая

Не правильно понимаете. Вероятность самопроизвольной порчи - крайне низкая. Порча происходит при попытках записи в условиях недостаточного питания или при банальнейших глюках ПО (к примеру при попытке чтения EEPROM в прерывании, без защиты содержимого служебных регистров, в момент ее записи в основном цикле)
Цитата
При включении прибор читает копии уставки из еепром и если есть больше половины одинаковых, то проверяет лежат ли они в допустимых пределах, если да, то эта уставка присваивается переменной в RAM и дальше прибор с ней работает.

Думаете в RAM долговременно хранится лучше чем в EEPROM?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 9 2011, 14:58
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Что-то мне не нравится это определение -- "порча". Возникают какие-то нездоровые ассоциации со сглазом, с гаданием на кофе, с П.Глобой, со звездами, со святой водой и т.д. Какой-то ненаучный термин -- "порча". Наверно лучше говорить о потере информации или искажении данных. Но это так, потрындеть...

Вам, в общем-то, правильно сказали, что если питание МК выполнено правильно и программа работает без побочных эффектов (то есть вы умеете писать робастые программы -- стеки не переполняются, код одной функции не искажает данные другой), то ни нет никакой разницы, где вам хранить -- в RAM, EEPROM или во внешнем EEPROM. Если у вас питание выполнено по принципу "тяп-ляп", если вы начинающий программер и пишите корявый код, то нет никакой гарантии, что ваши данные не будут случайно изменены.

По проблеме случайных изменений данных в EEPROM погуглите ради интереса, найдете много чего полезного. Несколько лет назад эта тема была очень обсуждаема в интернете. В спорах действительно было сломано много копий.

Что же конкретно делать? В основном советы сводятся к тому, что в схему нужно добавлять супервизор, если у вас затянутые фронты питающего напряжения (Vcc при включении/выключении медленно нарастает/спадает), и после операции с EEPROM устанавливайте в регистре EEAR адрес ячейки, которая не используется.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Laksus
сообщение Sep 10 2011, 18:41
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата(ArtemKAD @ Sep 9 2011, 12:47) *
Вероятность самопроизвольной порчи - крайне низкая.

Ладно, пусть я не умею правильно обращаться с еепром (писать программы, разводить платы), но дело в том, что и в промышленных устройствах я несколько раз сталкивался с тем, что данные в eeprom портились. Учитывая, что я имел дело с очень небольшим количеством устройств, то проблема наверное все таки есть.

_________
Цитата(ArtemKAD @ Sep 9 2011, 12:47) *
Думаете в RAM долговременно хранится лучше чем в EEPROM?

Я не знаю, предполагаю, что лучше, но сомневаюсь, поэтому и спрашиваю.
Сделать голосование для eeprom очень просто, так как чтение у меня только при пуске, а свободных ячеек много.
А как проверять целостность данных в RAM я не знаю. Предположения есть, но при этом простенькая програмка станет монстром.

И еще насчет FLASH, где-то встречал мнение, что желательно при пуске пуске проверять контрольные суммы программы, но сейчас что-то не найду про это, хотелось бы чтобы кто-то подсказал где можно найти.

_________
Цитата(zhevak @ Sep 9 2011, 17:58) *
В основном советы сводятся к тому, что в схему нужно добавлять супервизор,

Это вроде бы это у первых AVR были плохие внутренние супервизоры, а в новых вроде бы нормальные.

_________
Цитата(zhevak @ Sep 9 2011, 17:58) *
после операции с EEPROM устанавливайте в регистре EEAR адрес ячейки, которая не используется.

А как лучше сделать, если програмка пишется в WinAVR, то если ввести неиспользуемую еепром-переменную и после любых обращений к еепром еще добавлять строчку с чтением этой переменной, будет это работать?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 10 2011, 19:26
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(Laksus @ Sep 11 2011, 00:41) *
Ладно, пусть я не умею правильно обращаться с

А это совсем не важно -- умеете Вы или нет. Важно -- хотите ли Вы научиться. Ваша жизнь не просто точка по пространстве. Ваша жизнь -- это движущаяся точка. Не важно, где Вы сейчас находитесь. Важно -- в каком направлении Вы двигаетесь.

Цитата
в промышленных устройствах я несколько раз сталкивался с тем, что данные в eeprom портились.

Все мы люди. И все разные. Кто-то делает на совесть, а кто-то абы-как. Кто-то пишет картины, а кто-то красит заборы.

Цитата
Я не знаю, предполагаю, что лучше, но сомневаюсь, поэтому и спрашиваю.
Сделать голосование для eeprom очень просто, так как чтение у меня только при пуске, а свободных ячеек много.
А как проверять целостность данных в RAM я не знаю. Предположения есть, но при этом простенькая програмка станет монстром.

Э-э... стоп-стоп-стоп! Я немного не понял. Мы говорим о проблемах несанкционированного изменения данных в EEPROM. Это, как мы знаем, происходят в моменты включения/выключения питания. Мы так же предполагаем, что программа написана правильно и не выполняет неожиданных действий. Иначе говоря, мы абсолютно понимаем как работает наша программа. Но, если нас беспокоят проблемы включения/выключения питания, то тогда причем здесь RAM? При выключении питания информация в RAM полностью теряется.

Цитата
И еще насчет FLASH, где-то встречал мнение, что желательно при пуске пуске проверять контрольные суммы программы, но сейчас что-то не найду про это, хотелось бы чтобы кто-то подсказал где можно найти.

Да ну! Что за фигня? Если Вы не изменяете флешь, то это граничит с паранойей. Так никто не делает. Что за аппарат такой Вы изобретаете, где требуется такая сверх-надежность?

Цитата
Это вроде бы это у первых AVR были плохие внутренние супервизоры, а в новых вроде бы нормальные.

Я лично с проблемами EEPROM не сталкивался. Может везло sad.gif ... хз.

Цитата
А как лучше сделать, если програмка пишется в WinAVR, то если ввести неиспользуемую еепром-переменную и после любых обращений к еепром еще добавлять строчку с чтением этой переменной, будет это работать?

1. Создайте переменную в EEPROM, которую читаете. Ее значение не принимает участия в программе. Проследите, чтобы компилятор не "соптимизировал" код.
2. Тупо записывайте в регистр EEAR адрес неиспользуемой ячейки. Для этого дела как нельзя к стати подходит байт с адресом ноль.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
kan35
сообщение Sep 11 2011, 08:55
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Включайте brown out контроль и спите спокойно, никуда информация не денется.

Когда не было brown out при выключении происходило несанкционированное выполнение случайного кода, что не редко приводило к сбоям всякого рода, в том числе порче памяти.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 12 2011, 14:23
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(Laksus @ Sep 10 2011, 21:41) *
Ладно, пусть я не умею правильно обращаться с еепром (писать программы, разводить платы), но дело в том, что и в промышленных устройствах я несколько раз сталкивался с тем, что данные в eeprom портились. Учитывая, что я имел дело с очень небольшим количеством устройств, то проблема наверное все таки есть.

Причин может быть воз и маленькая тележка. Причем 99% - вина разработчика.
Цитата(Laksus @ Sep 10 2011, 21:41) *
Цитата
Думаете в RAM долговременно хранится лучше чем в EEPROM?

Я не знаю, предполагаю, что лучше, но сомневаюсь, поэтому и спрашиваю.

Неправильно предполагаете.
Я лет пять назад столкнулся с ситуацией в которой устройство (брелок охранной автосигнализации) через несколько недель непрерывной работы (батарейка постоянно включена) терял некоторые данный в RAM(сериальный код блока). Разработчики этого устройства, которое выпускалось десятками тысяч штук сделали бредовую ошибку - читали содержимое EEPROM однократно, только при подаче питания.

Цитата(Laksus @ Sep 10 2011, 21:41) *
Это вроде бы это у первых AVR были плохие внутренние супервизоры, а в новых вроде бы нормальные.

У первых - супервизоров не было вообще.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 12 2011, 14:30
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Вопчем, вероятность порчи данных экспоненциально стремится к нулю с ростом квалификации разработчика.
Go to the top of the page
 
+Quote Post
Laksus
сообщение Sep 13 2011, 06:04
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата(ArtemKAD @ Sep 12 2011, 17:23) *
Разработчики этого устройства, которое выпускалось десятками тысяч штук сделали бредовую ошибку - читали содержимое EEPROM однократно, только при подаче питания.

А можно подробнее про это.
Дело в том, что в устройстве, которое я сейчас делаю (пока работает одно, всего собираюсь сделать пять штук) я тоже читаю EEPROM только при подаче питания.
А как правильно?

Цитата(ArtemKAD @ Sep 12 2011, 17:23) *
У первых - супервизоров не было вообще.

Ну я имел ввиду, когда они уже появились, то первые были ненадежные, и было общепризнанным правилом их не использовать, а ставить внешние.

__________
А вообще то я для себя решил, что так как по любому нельзя самим устройством обнаружить все свои глюки, то сделаю еще один приборчик, который будет следить за работой основного устройства, и в случае недопустимого отклонения в режиме работы основного, будет давать сигнал аварии и блокировать опасные действия первого устройства. Думаю, что вероятность отказа обеих устройств сразу, будет очень малой.
Go to the top of the page
 
+Quote Post
maksimp
сообщение Sep 13 2011, 20:08
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(Laksus @ Sep 13 2011, 10:04) *
Дело в том, что в устройстве, которое я сейчас делаю (пока работает одно, всего собираюсь сделать пять штук) я тоже читаю EEPROM только при подаче питания.
А как правильно?

Наверное правильно читать EEPROM регулярно всё время.

Подобная проблема есть у FPGA - они читают конфигурационную флеш 1 раз при включении, и потом работают на копии в ОЗУ. Но может пролететь космическая частица и произойти сбой. Вот и придумывают для борьбы с этим всякие костыли к FPGA - подсчёт контрольной суммы содержимого конфигурационного ОЗУ, реализация 3 одинаковых схем внутри и т.д.
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 14 2011, 13:43
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
А можно подробнее про это.

Подробнее - двусторонний брелок системы Pantera XS-3300....

Цитата
Дело в том, что в устройстве, которое я сейчас делаю (пока работает одно, всего собираюсь сделать пять штук) я тоже читаю EEPROM только при подаче питания.
А как правильно?

Правильно - регулярное обновление. Как вариант - выбрать некоторое событие (нажатие на кнопку или к примеру выключение зажигания) по которому устройство проводить через RESET - с полным обновлением памяти (кроме статусного регистра флагов) и битов портов.
ЗЫ. Ну и естественно если читать EEPROM однократно, то при любом RESET (в т.ч. и по WDT), а не только при подаче подаче питания.
ЗЗЫ. А вообще - если переменная в EEPROM не вижу смысла ее хранить в другом месте.
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 15 2011, 05:40
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ArtemKAD @ Sep 12 2011, 17:23) *
устройство (брелок охранной автосигнализации) через несколько недель непрерывной работы (батарейка постоянно включена) терял некоторые данный в RAM(сериальный код блока).

А эту ситуацию устранили? и каким образом? тупо многократным чтением EEPROM?
И потерю SN списали на зловредные космические частицы?

ЗЫ.Предполагаю что SN это всего несколько байт и их можно восстанавливать из епрома а как быть если необходимо иметь 4/8/16/32 и т.д. кб данных в RAM?
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 15 2011, 11:05
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
А эту ситуацию устранили? и каким образом? тупо многократным чтением EEPROM?

Мы небыли связаны с производителем этих систем. Поэтому устранили самым простым способом - перестали закупать эти модели... twak.gif
Go to the top of the page
 
+Quote Post
Laksus
сообщение Sep 16 2011, 07:48
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Возвращаясь к первому вопросу - какая вероятность порчи данных в ram, eeprom, flash?
И вытекающий из первого - нужно ли принимать меры по проверки целостности данных и какие?

У меня сложилось мнение, что конкретные цифры никому не известны, и соответственно нет общепринятых мнений.
Просто кому какие случае на практике попались, тот и считает их главной проблемой. У меня это eeprom, у ArtemKAD - ram.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 16 2011, 09:46
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Чрезвычайно низкая при соблюдении требований по питанию, помехоподавлению и пр. За более чем 10 лет работы с AVR проблем с несанкционированной порчей данных не встречал. Да, были глюки в программе, было дерьмовое питание от автомобиля, но в конце концов все наладилось, все выявленные ошибки - следствие огрехов в аппаратной части и программировании.
Причем содержимое флэша и еепром с помощью контрольных сумм не проверяю, и по 10 раз одно и то же не считываю
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Sep 16 2011, 10:04
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



QUOTE (Laksus @ Sep 16 2011, 11:48) *
Возвращаясь к первому вопросу - какая вероятность порчи данных в ram, eeprom, flash?

Это не корректный вопрос , так как нет начальных условий.
А они зависят от всего комплекса задач стоящих перед вашим проектом. Питание , помехозащещённость , программа , активность солнца , ориентация платы в пространстве, даты выпуска процессора , условия в цехе при его изготовлении ( влажность давление температура , чистота воздуха) ..... Когда Вы будете знать все эти условия - сможете , крайне приблизительно, расчитать вероятность отказа.
З.Ы У меня дисплей 5 лет отработал на разработке всевозможных проектов , в какие только "переделки" не попадал, а тут на ровном месте взял и сдох , причём красиво так , мирно и без пыли .


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Alfa
сообщение Sep 16 2011, 10:55
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 9-02-06
Из: Челябинск
Пользователь №: 14 160



Цитата(Laksus @ Sep 16 2011, 13:48) *
Возвращаясь к первому вопросу - какая вероятность порчи данных в ram, eeprom, flash?
И вытекающий из первого - нужно ли принимать меры по проверки целостности данных и какие?


У меня исторически сложилось что при запуске проверяется контрольная сумма и памяти программ и памяти данных.
Если проблемы - индицируем пользователю.
Прошивка может обновляться, поэтому чтобы быть уверенным что все залилось корректно - проверяю CRC flash.
Параметры в eeprom влияют на алгоритмы работы прибора. Параметры также могут меняться юзером. Потому проверяю CRC eeprom. Если есть возможность храню две копии параметров. Одна сбойнет - читаем другую и восстанавливаем порченную....

Насчет контроля ОЗУ. никогда не применял. ИМХО этот изврат может понадобиться крайне редко. например если рядом включаются- выключаются многокиловатные движки или взрываются атомные бомбы...


как то так
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 18 2011, 21:23
Сообщение #18


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ArtemKAD @ Sep 14 2011, 16:43) *
Правильно - регулярное обновление. Как вариант - выбрать некоторое событие

Регулярное обновление чего? данных в RAM? или данных в EEPROM?

Мне все же схема автора кажется куда более правильной, единственное нужно помочь ему подправить ее напильником:

1. Необходимо иметь несколько копий уставок (обычно две) в энергонезависимой памяти, защищенных контрольной суммой.
2. При старте устройства, необходимо выполнить чтение и верификацию всех копий уставок - прочитать каждую копию и проверить контрольную сумму.
3. Обновить поврежденные копии "до победы", - т.е. записывать уставки и считывать их до тех пор пока все копии не пройдут верификацию.
4. Скопировть любую копию уставок в ОЗУ - после чего работать исключительно с уставками в ОЗУ.
5. После того как копия уставок загружена в ОЗУ - прибор можно считать готовым к работе.
6. При изменении любого параметра в ОЗУ - обновить все копии уставок в энергонезависимой памяти (здесь можно записью без проверок, а можно и "до победы" как в п.3).

энергонезависимая память здесь любое из:
внутренний/внешний eeprom/флеш, SD карточка, MMC, и т.д. и т.п.

Цитата(Laksus @ Sep 16 2011, 10:48) *
Возвращаясь к первому вопросу - какая вероятность порчи данных в ram, eeprom, flash?
И вытекающий из первого - нужно ли принимать меры по проверки целостности данных и какие?

Могу дать свои цифры для таких начальных условий: Планируется эксплуатировать устройство 1 год, включать-отключать раз в неделю, BOD выключен, нет внешнего супервизора питания, в программе есть функции записи флеш (команда SPM):
вероятность "порчи" флеш - 100%.
такая же самая вероятность и "порчи" eeprom, при тех же начальных условиях. Всё это из-за 100% "порчи" RAM при выходе питания за допустимые пределы.

Включение BOD - практически полностью убирает возможность искажения RAM по вине железа. Но если в коде будут вызовы SPM, тогда даже с включенным BOD'ом вероятность что-то угробить во флеш/eeprom будет очень высока. Ключевой момент - запись в EEPROM и FLASH - длительная операция, достаточно рубануть питание в момент записи, для того чтобы появилась "порча" данных (данные записались/стерлись не польностью). Делайте выводы.
Go to the top of the page
 
+Quote Post
thinkerreed
сообщение Sep 19 2011, 09:45
Сообщение #19





Группа: Новичок
Сообщений: 8
Регистрация: 11-09-09
Пользователь №: 52 305



Была недавно проблема с eeprom в серии девайсов, где на атмеге до кучи сделаны и часы. Научить потребителей обращаться с платами аккуратно - это нечто нереальное, а включать BOD - тоже не вариант, потребление от батарейки возрастает почти на порядок. Несколько раз из эксплуатации возвращались платы с полностью занулённой eeprom, хз как такое получается (ИМХО очень маловероятно). В итоге пришли к тому, чтобы критически важные данные (такие как серийник) писать во flash и устанавливать lock, после этого безобразие прекратилось.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Sep 19 2011, 12:01
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



В EEPROMе пусть хранится набор данных с возможностью проверки (CRC, две копии и т.д.) Читаем из EEPROM в RAM когда юзер начал пользоваться прибором, или там вызвал меню. Если такого события нет, то раз в десятки минут - часы. Если данные повреждены, восстанавливаем их из FLASH, где лежит дефолтный набор. Настройки обнуляются - сбой серьёзный, но не смертельный.
Если основная программа содержит SPM, проверяем её CRC при включении питания. Не сходится CRC - уходим на бут-лоадер, если он есть, и бесконечно мигаем индикаторами.
У меня бывало, слетали и флеш и епром, при больших неприятностях по питанию - например, резко клинит большой коллекторный движок, или лопается мощная галогеновая лампа. Тогда происходят разные электромагнитные процессы, горят предохранители, срабатывают защиты, ну вылетал флеш пару раз...

Сообщение отредактировал Maik-vs - Sep 19 2011, 12:02
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Sep 19 2011, 15:35
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
а включать BOD - тоже не вариант, потребление от батарейки возрастает почти на порядок

В новых AVR (PA) используйте коммутируемый BOD. Или прежде чем писать EEPROM проверяйте АЦП хватит ли питания для записи.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 17:35
Рейтинг@Mail.ru


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