Например TDA7294

Форум РадиоКот • Просмотр темы - Как записать в EEPROM перед отключением питания
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср ноя 26, 2025 02:02:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 132 ]     ... , , , , 7
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Вт янв 04, 2022 13:55:55 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1259
Рейтинг сообщения: 0
А ещё есть RAM c I2C/SPI интерфейсом. На одном конденсаторе неделями живут.
А ещё есть источники питания с небольшими АКБ.

Вариантов много, желания изучать каталоги мало.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Вт янв 04, 2022 14:01:00 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 885
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6173
Откуда: Minsk
Рейтинг сообщения: 0
А ещё существует FRAM/MRAM память.

Раз уж подели тему 10-летней давности... Конечно, FRAM - хорошее решение. Но всё же - внешний элемент, не дешёвый к тому же. Но для ответственных применений - лишнего 1$ не жалко.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Вт янв 04, 2022 17:12:33 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1640
Рейтинг сообщения: 0
А еще копеечные SPI Serial EERAM и I2C Serial EERAM, которым вообще кроме одного внешнего конденсатора ничего не нужно.
Это которые внутри имеют ОЗУ и EEPROM и запись из 1-й во 2-ю по сигналу аварии питания?
Когда то давно заменили FRAM в одном из серийных изделий на такой чип (от Cypress). В результате получили периодические разрушения содержимого памяти.
ПО не менялось, и по идее - что FRAM что такой чип ОЗУ+EEPROM должны вроде работать одинаково. Но что то было не так. Происходило изредка, невоспроизводимо (если бы это было не серийное изделие, может и не заметили бы). Причину так и не нашли (были подозрения на сбои системы аварийного сохранения из-за каких-то помех в момент аварии питания, но подтвердить не удалось). Просто откатили обратно на FRAM - экономия копеечная по сравнению с FRAM, а гемору на порядок больше.

С тех пор не доверяю им. Но это только моё личное впечатление.

Добавлено after 2 minutes 14 seconds:
А ещё есть RAM c I2C/SPI интерфейсом. На одном конденсаторе неделями живут.
А ещё есть источники питания с небольшими АКБ.
Это подойдёт если отключить надолго не могут. Или отключив, положить на холодный склад к примеру.

Добавлено after 5 minutes 16 seconds:
Конечно, FRAM - хорошее решение. Но всё же - внешний элемент, не дешёвый к тому же.
Не обязательно. Можно заменить МК на MSP430FRxxxx и будет вполне себе внутренний элемент.
Есть у меня работающий проектик на MSP430FR5739 - хорошая вещица для простых задач! :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Вт янв 04, 2022 22:16:48 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 861
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 6032
Откуда: Протвино
Рейтинг сообщения: 0
насвсяк для программистов-электротехников ;) маленький скетч:
питание падает с 11V(порог детектирования потери питания) до 5V(~4V после 78L05) при потреблении 30mA и конденсаторе 1000uF за время
~=(11-5)1e-3/30e-3 = 0.2s
это всю eeprom несколько раз перезаписать можно, кодом хеминга с избыточностью x10 ;)

теперь менее удачный вариант: конденсатор прямо на питании mcu, пусть с 3.3>>3.1V(порог нашего прерывания) падает до 2.7V(bod), те же 30mA,1000uF
~=(3.1-2.7)1e-3/30e-3 = 13mS -уже тяжелее, можно 4700uF и будет 60mS.

ps ну и 30mA это зверский ток, скажем att2313 это скорее 1-6mA. ток что емкость можно и поменьше скореевсего.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 06:52:23 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18875
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
AlexS4 писал(а):
это всю eeprom несколько раз перезаписать можно
а сколько времени тратится на запись одного байта, например, в АТмега8 - ты никогда не интересовался?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 11:40:11 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1640
Рейтинг сообщения: 0
можно 4700uF и будет 60mS.
Только кроме кондёра нужно ещё построить остальную схему монитора питания. И написать код, в котором сделать выравнивание износа. И учесть вариант, когда входное питание может дергаться скажем так пару раз в секунду в течение нескольких месяцев - чтобы дырка в EEPROM-е не протёрлась при этом. :)))
Потом выпустить серию девайсов и внезапно обнаружить, что если в момент после срабатывания монитора питания, при работе кода сохранения проскакивает помеха и МК перезапускается (например от WDT), то никакого сохранения не происходит, а происходит разрушение содержимого EEPROM. :facepalm:

А затем зайти в магазин и обнаружить, что цена одного такого кондёра будет уже побольше, чем у минимальной FRAM. С которой организовать систему хранения, устойчивую к перезагрузкам и протираниям на порядок проще, чем с EEPROM. И нафига тогда оно надо? :dont_know:

Добавлено after 1 minute 29 seconds:
а сколько времени тратится на запись одного байта, например, в АТмега8 - ты никогда не интересовался?

+++ И не просто записи, а "записи с предварительным стиранием". Которая выполняется ещё дольше.
Про атмегу не скажу, но например у XMC4700 (с которым сейчас работаю) только одно стирание выполняется до 5.5 сек(!) Это ж какой кондёр надо впендюрить, чтобы столько продержаться?! :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 15:09:34 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 861
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 6032
Откуда: Протвино
Рейтинг сообщения: 0
а сколько времени тратится на запись одного байта, например, в АТмега8 - ты никогда не интересовался?

около 8mS в старых мегах, в свежих (1.8..6V) мегах и тайни 1.8mS.
немножко преувеличил, не всю eeprom, но создать условия чтоб успеть несколько байт загнать на предворительно подготовленное место - вовсе не проблема.

jcxz писал(а):
+++ И не просто записи, а "записи с предварительным стиранием".

заранее стереть конечно нельзя :))

jcxz писал(а):
И написать код, в котором сделать выравнивание износа.

его тоже писать надо после аварии питания, чтоб интереснее было ... :)
это опция, если байты не используются - да можно таким способом увеличить число допустимых выключений... со 100k скажем до 10M
но невсегда это нужно. алгоритм же приметивен и не требует увеличения времени записи, напр: записываем актуальное число на границе стертого участка, когда стертого места не остается - стираем весь массив выделенный под это (заранее стираем, до аварии)

jcxz писал(а):
Только кроме кондёра нужно ещё построить остальную схему монитора питания.

2 резистора это сложно)) посчитаем нестабильность порога?)

jcxz писал(а):
если в момент после срабатывания монитора питания, при работе кода сохранения проскакивает помеха и МК перезапускается (например от WDT), то никакого сохранения не происходит, а происходит разрушение содержимого EEPROM.

а если то же самое произойдет при записи в fram?

jcxz писал(а):
И учесть вариант, когда входное питание может дергаться скажем так пару раз в секунду в течение нескольких месяцев - чтобы дырка в EEPROM-е не протёрлась при этом.

а еще взрываются мины и гаммалучи плавающие затворы флэша теребят :)))
если такой частный случай то нужен просто больше запас, буфферный литиевый аккумулятор , или микроватное питание на msc переведенном в саспенд сохранять, или да fram, почему нет, просто это редкий частный случай, неболее.

jcxz писал(а):
А затем зайти в магазин и обнаружить,

что реальных аргументов нет и осталось только высасывать из пальца сравнивая розничную цену самого дорого электролита с оптовой ценой самого дешевого fram.
https://www.chipdip.ru/catalog/aluminum ... 6.3V&ps=x3 =14р
https://www.chipdip.ru/catalog-show/ic- ... fram&ps=x3 =210р


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 17:30:03 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 834
Откуда: Рязанская область
Рейтинг сообщения: 0
Код:
if(analogRead(0)<475){                                                           //если попало питание запомнить в память
   EEPROM.put(300, day_0);EEPROM.put(305, month_0);EEPROM.put(310, bme_temp_0);       // Записать значение
    EEPROM.put(315,day_1);EEPROM.put(320,month_1);EEPROM.put(325,bme_temp_1);       // Записать значение
    EEPROM.put(330,day_2);EEPROM.put(335,month_2);EEPROM.put(340,bme_temp_2);       // Записать значение
    delay(3500);
   }

я вот так сделал: поставил от блока питания на плюсовой вывод диод и на +5 v ардуино. и конденсатор на 1000мкф на +5 v адуино , остальные потребители просто от блока питания запитал (то есть после пропадания питания конденсатор на 1000мкф питает одну ардуину) и если не поставить задержку delay(3500); то код успевает пробежать несколько раз и перезаписать значения day_0, month_0, bme_temp_0
в day_1, month_1, bme_temp_1 и day_2, month_2, bme_temp_2 значения 0_дня, 0_месяца, 0_тепературы.
с июня 2020года :wink: пока все работает как задумывал :solder:


Вложения:
meteostanciya_moi.zip [8.01 KiB]
Скачиваний: 112


Последний раз редактировалось Serzh2000 Ср янв 05, 2022 19:26:13, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 17:45:25 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1640
Рейтинг сообщения: 0
заранее стереть конечно нельзя :))
Заранее это когда? При выключенном питании? :)))
Попробуйте представить ситуацию: питание включилось и сразу выключилось. И так 100 раз подряд. Когда предлагаете стирать?

но невсегда это нужно. алгоритм же приметивен и не требует увеличения времени записи, напр: записываем актуальное число на границе стертого участка, когда стертого места не остается - стираем весь массив выделенный под это (заранее стираем, до аварии)
Я вам конкретный пример привёл: XMC4700 у которого время стирания сектора может доходить до 5.5сек. Предложите алгоритм, который позволит фиксировать время выключения при кратковременном включении/выключении.
В студию.

а если то же самое произойдет при записи в fram?
То всё нормально - время выключения во FRAM остаётся. :beer:

просто это редкий частный случай, неболее.
Может и редкий, но мы с таким сталкивались. Точнее - наши заказчики. И не однократно. И обнаружить эти факты смогли только потому, что выключения писались в журнал во FRAM.
Без этого - гадали бы почему некоторые устройства у заказчика иногда почему-то не работают по несколько дней.... :dont_know:

что реальных аргументов нет и осталось только высасывать из пальца сравнивая розничную цену самого дорого электролита с оптовой ценой самого дешевого fram.
Я сравнил цены первых попавшихся конденсатора указанной вами ёмкости и минимальной FRAM (объёма достаточного для сохранения события выключения), на одном и том же ресурсе:
Изображение Изображение
Почувствуйте разницу!
Кроме того ещё один плюс FRAM: для записи события выключения достаточно несколько байт, а остальной объём из 512байт можно использовать ещё для чего-то (например хранения конфига). Бесплатно! И гораздо удобнее использовать чем с EEPROM.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 19:01:35 
Опытный кот

Карма: 4
Рейтинг сообщений: 81
Зарегистрирован: Пн апр 11, 2011 10:08:52
Сообщений: 844
Рейтинг сообщения: 0
от 20,20руб за штуку


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 20:37:25 
Друг Кота
Аватар пользователя

Карма: 31
Рейтинг сообщений: 861
Зарегистрирован: Пт сен 10, 2021 15:19:36
Сообщений: 6032
Откуда: Протвино
Рейтинг сообщения: 0
jcxz писал(а):
Попробуйте представить ситуацию: питание включилось и сразу выключилось. И так 100 раз подряд. Когда предлагаете стирать?

это не нормальный режим жля устройства с mcu. это норм режим для светодиода в режиме передатчика морзе :))
но и это элементарно обходится если такое тз, я выше писал.
и тогда уже неважно питать только fram или весь mcu )).
и если исходить из того что питание всетаки чаще есть чем наоборот и выключается не 100раз подряд то подготовить (стереть) сектор eeprom заранее нет никаких проблем. хоть 5.5s хоть 6.


jcxz писал(а):
То всё нормально - время выключения во FRAM остаётся.

если _в процессе записи_ будет сбой то консистентность данных неизбежно будет нарушена
обойти это можно лок-алгоритмами записи, независимо от вида носителя, да с eeprom запись будет дольше и ресурс перезаписей ограничен но с этим никто и не спорил ;)

честно говоря не понимаю о чем тут спорить, есть способы:
-периодическая (сравнительно редкая) запись в eeprom
-запись в eeprom по аварии
-периодическая (частая) запись в fram или запись по аварии, неважно
-резервное микро-питание остановленного mcu для сохранения sram
-резервное питание работающего mcu
каждый из способов имеет набор очевидных и неочень плюсов и минусов...
абсолютно лучшего способа во всех смыслах не существует,
это не "винилово-ламповый звук против 24x96" это "бензин против лития" ;)

-=Vovka=- писал(а):
добавьте доставку и умножте на риски получить муляж. китайские электролиты в мешках всеравно дешевле потому что это более массовый товар, да дело даже не в том что дешевле, иногда еще +1 чип неприемлем потому что скажем нет места или свободных ног у att10 c 4 gpio )).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать в EEPROM перед отключением питания
СообщениеДобавлено: Ср янв 05, 2022 20:58:01 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1640
Рейтинг сообщения: 0
jcxz писал(а):
То всё нормально - время выключения во FRAM остаётся.

если _в процессе записи_ будет сбой то консистентность данных неизбежно будет нарушена
обойти это можно лок-алгоритмами записи, независимо от вида носителя
ТЗ необходимо фиксировать время выключения устройства с точностью не хуже 1сек. Режим работы устройства = 24x8.
Решение на FRAM - простой алгоритм: пишем непрерывно несколько раз в секунду, чередуя записи в 2 разных области FRAM. Если даже в момент записи (при выключении) последняя запись порушилась - останется предпоследняя, да точность времени будет чуть хуже (на период записи). Ну и что? Всё равно погрешность времени - менее 1сек.
А с EEPROM как? Опишите алгоритм решения задачи по ТЗ "не зависимый от вида носителя" и устойчивый к сбоям/перезагрузкам при записи?

да дело даже не в том что дешевле, иногда еще +1 чип неприемлем потому что скажем нет места или свободных ног у att10 c 4 gpio )).
На чип в SOIC-8 нет места, а на в несколько раз больший электролит 4700мкФ x 16V - есть? :)

PS: И кстати - у электролитов со снижением температуры значительно падает ёмкость. А работоспособность устройства должна обеспечиваться во всём диапазоне температур. Так что ваш расчёт длительности работы при аварии неверен. Надо ещё добавить ёмкости, если необходим индастриал температурный диапазон.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 132 ]     ... , , , , 7

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: akl и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y