Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32 EEPROM алгоритмы экономии ресурса ячеек
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Димон Безпарольный
Девайс пишет при выключении питания в EEPROM значение int(4 байта). Из алгоритмов на ум приходит только запись в ячейки 10 000 циклов, потом смена ячеек. Но меняющийся счетчик циклов будет также хранится в ячейках EEPROM, запись в которые также ограничена. Как в этом случе быть?

Процессор STL32L151. EEPROM внутренняя. Пользуюсь функцией HAL_FLASHEx_DATAEEPROM_Program которая также пытается экономить ресурс ячеек. Теме не менее вопрос остался.

Почему возник вопрос - есть опасение что детектирование пропадание питания сработает слишком поздно - электролиту подпитки не хватит энергии питать процессор. Такое бывает если напряжение питания убывает плавно а не падает до нуля резко. Большой электролит возможности поставить уже нет. Батарею подпитки тоже. Хотелось бы писать параметры в EEPROM хотя бы раз в 5 минут. EEPROM размером 4K.
AlexG
Один из вариантов - писать каждый раз в новую группу ячеек EEPROM по кругу, это позволяет размазать износ на несколько ячеек и, соответсвенно, увеличить суммарный ресурс. Чтобы при чтении была возможность определить где последнее записанное значение частью записанного значения должен быть счетчик. Где между соседними записями значение счетчика меняется скачком, а не на 1 там и была сделана запись в прошлый раз.
Димон Безпарольный
Цитата(AlexG @ Aug 4 2018, 11:16) *
Один из вариантов - писать каждый раз в новую группу ячеек EEPROM по кругу, это позволяет размазать износ на несколько ячеек и, соответсвенно, увеличить суммарный ресурс. Чтобы при чтении была возможность определить где последнее записанное значение частью записанного значения должен быть счетчик. Где между соседними записями значение счетчика меняется скачком, а не на 1 там и была сделана запись в прошлый раз.

Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится.
ViKo
1. А там точно 10 000 циклов заявлено, не более?
2. Сколько времени (лет) должно работать устройство, чтобы израсходовать заявленный ресурс?
3. Литиевая батарейка, питающая BackUp память, спасет гиганта мысли.
aaarrr
Цитата(Димон Безпарольный @ Aug 4 2018, 18:18) *
Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится.

Не нужно: к каждой записи добавляется номер, при инициализации лекго находится последняя.
x893
STM32L151 EEPROM 4K
Пишем по 8 байт (4 счетчик + 4 значение)
Достаем калькулятор
4 * 1024 / 8 = 512
512 * 5 = 2560 минут / 60 = 42 часа
42 * 10 000 = 420 000 часов / 24 = 17500 дней
17500 / 365 = 47 лет

Димон Безпарольный
Цитата(x893 @ Aug 5 2018, 00:57) *
STM32L151 EEPROM 4K
Пишем по 8 байт (4 счетчик + 4 значение)
Достаем калькулятор
4 * 1024 / 8 = 512
512 * 5 = 2560 минут / 60 = 42 часа
42 * 10 000 = 420 000 часов / 24 = 17500 дней
17500 / 365 = 47 лет

Так годится. Спасибо. Я так понимаю в счетчике упаковано 2 значения - начальный адрес текущих ячеек данных и счетчик циклов текущих ячеек?
aaarrr
Цитата(Димон Безпарольный @ Aug 6 2018, 11:07) *
Я так понимаю в счетчике упаковано 2 значения - начальный адрес текущих ячеек данных и счетчик циклов текущих ячеек?

Ни к чему там 2 значения и четыре байта: просто счетчик, разрядность которого
покрывает максимальное количество записей в выделенном пространстве.
Получится массив записей счетчик-данные вида:
0365 <DATA>
0366 <DATA>
00BC <DATA>
00BD <DATA>
...
Понятно, что запись под номером 0366 является последней.
И с какой целью считать циклы?
ViKo
Одного бита хватило бы, чтобы показать, где проходит граница между новыми и старыми записями в выделенном пространстве. Сначала пишем, к примеру, 1. А как дошли до конца, начинаем сначала, и пишем уже 0. И т.д. По переходу из 1 в 0 или наоборот находим границу. Она всегда одна будет, "аномалия".
Придумал только что за 1 минуту. rolleyes.gif
x893
Ещё минуту надо подумать.
ViKo
Минута истекла, ответ - в студию! cool.gif
x893
Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ?
"Ещё минуту надо было подумать"
это было пожелание к предыдущему посту.
aaarrr
Цитата(x893 @ Aug 6 2018, 20:33) *
Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ?

На нуле, например. А где еще?

Другое дело, что однобитный маркер не позволит установить наиболее свежую запись при повреждении
содержимого памяти. Но это не всегда нужно.
ViKo
Там, в конце и будет. А если потом в нулевую ячейку запишем, в ней уже ноль запишем.
Бит - это так, пример. Нет смысла программировать один бит. Байт - другое дело. Или поле в байте.
controller_m30
В даташите на STM32L151 сказано, что количество стираний EEPROM - 300.000 (рисунок внизу).
Размер стираемого/записываемого блока: Double word, Word, Half word, Byte.

Если предположить, что ресурс 300К относится к каждому Double word (64 бит или 8 байт), а остальных ячеек не касается, то ресурс записи всей памяти будет:
1) 4096 байт / 8 байт = 512 Double word-ячеек.
2) 512 * 300.000 = 153.600.000 перезаписей. 153 миллиона!!! w00t.gif
3) если писать каждые 5 минут один Double word (8 байт), то: 153600000 * 5 / 1440 = 533333 суток, или 1461 год.
Выглядит заманчиво, но что-то мне не верится. Такой ресурс может быть только у FRAM.

Скорее всего 300.000 перезаписей относится ко всему блоку EEPROM 4K.
В этом случае ресурс записи в EEPROM такой (при одной записи каждые 5 минут):
1) 300.000 * 5 / 1440 = 1041 сутки, или 2 года и 311 суток laughing.gif
ViKo
Нормальный ресурс для EEPROM. Относится к тому, что написано - каждый байт можно перезаписать 300 000 раз.
Димон Безпарольный
Струдом верится, но проверять не хочу.
jcxz
Цитата(controller_m30 @ Aug 6 2018, 21:48) *
Выглядит заманчиво, но что-то мне не верится. Такой ресурс может быть только у FRAM.

У FRAM как бы неограниченное кол-во записей. продолжайте курить даташиты.
controller_m30
Цитата(ViKo @ Aug 6 2018, 21:56) *
Нормальный ресурс для EEPROM. Относится к тому, что написано - каждый байт можно перезаписать 300 000 раз.

Тогда и проблемы нет - просто писать по кругу эту память, блоками по 8 байт (4 байта счётчик, 4 байта данных - как предлагали выше). И хватит на 1461 год rolleyes.gif

Но мне кажется, что не всё так радужно.
1) Даже в SSD-накопителях ресурс записи сектора меньше 10К. А для обеспечения миллионов перезаписей используется технология выравнивания износа (WearLeveling) за счёт резервных секторов.
2) EEPROM обсуждаемого контроллера недоступна для записи из некоторых блоков Program memory - конкретно в режиме Double word её можно писать из SRAM, и только из нескольких, прямо указанных блоков Program memory (конкретнее смотреть в даташите).
Из чего можно предположить, что EEPROM-ка - это просто часть одного из блоков Program memory, за счёт срытых секторов которого обеспечивается WearLeveling до ресурса записи 300К.
aaarrr
Цитата(controller_m30 @ Aug 6 2018, 22:31) *
1) Даже в USSD-накопителях ресурс записи сектора меньше 10К.

Так у перфоленты ресурс вообще составляет одну запись.

Цитата(controller_m30 @ Aug 6 2018, 22:31) *
Из чего можно предположить, что EEPROM-ка - это просто часть одного из блоков Program memory, за счёт срытых секторов которого обеспечивается WearLeveling до ресурса записи 300К.

Даже если так, ресурс ведь обеспечен? В чем "не радужность"?
controller_m30
Цитата(aaarrr @ Aug 6 2018, 23:10) *
Даже если так, ресурс ведь обеспечен? В чем "не радужность"?

В том, что если программную память контроллера можно гарантировано переписать 10К раз, то EEPROM только 300К раз. Поскольку это просто часть программной памяти (в моих предположениях, естественно).
ViKo
В SSD стоит флэш память. А EEPROM тем и хороша, что переписывается без стирания страницы, много раз, но объем ее обычно небольшой.
Димон Безпарольный
Даже не знаю - доверится документации или поставить FM24C04A. Наверно первая партия будет без нее.
controller_m30
Даже в самом пессимистичном варианте, ресурса EEPROM хватит на 2 года и 311 суток (при 64-битных записях, один раз в 5 минут).
Может этого времени достаточно, чтоб устройство полностью оправдало заплаченные за него деньги, было списано, а потом была куплена новая версия с FRAM?
Димон Безпарольный
Цитата(controller_m30 @ Aug 7 2018, 20:03) *
Даже в самом пессимистичном варианте, ресурса EEPROM хватит на 2 года и 311 суток (при 64-битных записях, один раз в 5 минут).
Может этого времени достаточно, чтоб устройство полностью оправдало заплаченные за него деньги, было списано, а потом была куплена новая версия с FRAM?

На плате я предусмотрел установку I2C памяти 24с... Но поставить мне ее уже не дадут. Придется пробовать полагаясь на эти 300к.

Спасибо всем что потратили на меня свое время.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.