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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32 EEPROM алгоритмы экономии ресурса ячеек, В Интернете ничего не нашел путного
Димон Безпарольн...
сообщение Aug 4 2018, 07:47
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Девайс пишет при выключении питания в EEPROM значение int(4 байта). Из алгоритмов на ум приходит только запись в ячейки 10 000 циклов, потом смена ячеек. Но меняющийся счетчик циклов будет также хранится в ячейках EEPROM, запись в которые также ограничена. Как в этом случе быть?

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

Почему возник вопрос - есть опасение что детектирование пропадание питания сработает слишком поздно - электролиту подпитки не хватит энергии питать процессор. Такое бывает если напряжение питания убывает плавно а не падает до нуля резко. Большой электролит возможности поставить уже нет. Батарею подпитки тоже. Хотелось бы писать параметры в EEPROM хотя бы раз в 5 минут. EEPROM размером 4K.

Сообщение отредактировал Димон Безпарольный - Aug 4 2018, 07:53
Go to the top of the page
 
+Quote Post
AlexG
сообщение Aug 4 2018, 08:16
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 50
Регистрация: 10-05-12
Пользователь №: 71 756



Один из вариантов - писать каждый раз в новую группу ячеек EEPROM по кругу, это позволяет размазать износ на несколько ячеек и, соответсвенно, увеличить суммарный ресурс. Чтобы при чтении была возможность определить где последнее записанное значение частью записанного значения должен быть счетчик. Где между соседними записями значение счетчика меняется скачком, а не на 1 там и была сделана запись в прошлый раз.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Aug 4 2018, 15:18
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



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

Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 4 2018, 15:31
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



1. А там точно 10 000 циклов заявлено, не более?
2. Сколько времени (лет) должно работать устройство, чтобы израсходовать заявленный ресурс?
3. Литиевая батарейка, питающая BackUp память, спасет гиганта мысли.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 4 2018, 16:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Димон Безпарольный @ Aug 4 2018, 18:18) *
Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится.

Не нужно: к каждой записи добавляется номер, при инициализации лекго находится последняя.
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 4 2018, 21:57
Сообщение #6


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



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 лет

Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Aug 6 2018, 08:07
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(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 значения - начальный адрес текущих ячеек данных и счетчик циклов текущих ячеек?

Сообщение отредактировал Димон Безпарольный - Aug 6 2018, 08:11
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 6 2018, 09:30
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

Ни к чему там 2 значения и четыре байта: просто счетчик, разрядность которого
покрывает максимальное количество записей в выделенном пространстве.
Получится массив записей счетчик-данные вида:
0365 <DATA>
0366 <DATA>
00BC <DATA>
00BD <DATA>
...
Понятно, что запись под номером 0366 является последней.
И с какой целью считать циклы?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 6 2018, 10:07
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Одного бита хватило бы, чтобы показать, где проходит граница между новыми и старыми записями в выделенном пространстве. Сначала пишем, к примеру, 1. А как дошли до конца, начинаем сначала, и пишем уже 0. И т.д. По переходу из 1 в 0 или наоборот находим границу. Она всегда одна будет, "аномалия".
Придумал только что за 1 минуту. rolleyes.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 6 2018, 10:19
Сообщение #10


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Ещё минуту надо подумать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 6 2018, 12:32
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Минута истекла, ответ - в студию! cool.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Aug 6 2018, 17:33
Сообщение #12


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

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ?
"Ещё минуту надо было подумать"
это было пожелание к предыдущему посту.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 6 2018, 18:20
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(x893 @ Aug 6 2018, 20:33) *
Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ?

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

Другое дело, что однобитный маркер не позволит установить наиболее свежую запись при повреждении
содержимого памяти. Но это не всегда нужно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 6 2018, 18:42
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Там, в конце и будет. А если потом в нулевую ячейку запишем, в ней уже ноль запишем.
Бит - это так, пример. Нет смысла программировать один бит. Байт - другое дело. Или поле в байте.
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Aug 6 2018, 18:48
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



В даташите на 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 13:12
Рейтинг@Mail.ru


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