Димон Безпарольный 2 4 августа, 2018 Опубликовано 4 августа, 2018 (изменено) · Жалоба Девайс пишет при выключении питания в EEPROM значение int(4 байта). Из алгоритмов на ум приходит только запись в ячейки 10 000 циклов, потом смена ячеек. Но меняющийся счетчик циклов будет также хранится в ячейках EEPROM, запись в которые также ограничена. Как в этом случе быть? Процессор STL32L151. EEPROM внутренняя. Пользуюсь функцией HAL_FLASHEx_DATAEEPROM_Program которая также пытается экономить ресурс ячеек. Теме не менее вопрос остался. Почему возник вопрос - есть опасение что детектирование пропадание питания сработает слишком поздно - электролиту подпитки не хватит энергии питать процессор. Такое бывает если напряжение питания убывает плавно а не падает до нуля резко. Большой электролит возможности поставить уже нет. Батарею подпитки тоже. Хотелось бы писать параметры в EEPROM хотя бы раз в 5 минут. EEPROM размером 4K. Изменено 4 августа, 2018 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexG 1 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба Один из вариантов - писать каждый раз в новую группу ячеек EEPROM по кругу, это позволяет размазать износ на несколько ячеек и, соответсвенно, увеличить суммарный ресурс. Чтобы при чтении была возможность определить где последнее записанное значение частью записанного значения должен быть счетчик. Где между соседними записями значение счетчика меняется скачком, а не на 1 там и была сделана запись в прошлый раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Димон Безпарольный 2 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба Один из вариантов - писать каждый раз в новую группу ячеек EEPROM по кругу, это позволяет размазать износ на несколько ячеек и, соответсвенно, увеличить суммарный ресурс. Чтобы при чтении была возможность определить где последнее записанное значение частью записанного значения должен быть счетчик. Где между соседними записями значение счетчика меняется скачком, а не на 1 там и была сделана запись в прошлый раз. Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба 1. А там точно 10 000 циклов заявлено, не более? 2. Сколько времени (лет) должно работать устройство, чтобы израсходовать заявленный ресурс? 3. Литиевая батарейка, питающая BackUp память, спасет гиганта мысли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба Но счетчик тоже в EEPROM писать надо. Это значит на 20 000 значений ресурс ячейки кончится. Не нужно: к каждой записи добавляется номер, при инициализации лекго находится последняя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба 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 6 августа, 2018 Опубликовано 6 августа, 2018 (изменено) · Жалоба 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 значения - начальный адрес текущих ячеек данных и счетчик циклов текущих ячеек? Изменено 6 августа, 2018 пользователем Димон Безпарольный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Я так понимаю в счетчике упаковано 2 значения - начальный адрес текущих ячеек данных и счетчик циклов текущих ячеек? Ни к чему там 2 значения и четыре байта: просто счетчик, разрядность которого покрывает максимальное количество записей в выделенном пространстве. Получится массив записей счетчик-данные вида: 0365 <DATA> 0366 <DATA> 00BC <DATA> 00BD <DATA> ... Понятно, что запись под номером 0366 является последней. И с какой целью считать циклы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Одного бита хватило бы, чтобы показать, где проходит граница между новыми и старыми записями в выделенном пространстве. Сначала пишем, к примеру, 1. А как дошли до конца, начинаем сначала, и пишем уже 0. И т.д. По переходу из 1 в 0 или наоборот находим границу. Она всегда одна будет, "аномалия". Придумал только что за 1 минуту. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Ещё минуту надо подумать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Минута истекла, ответ - в студию! B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ? "Ещё минуту надо было подумать" это было пожелание к предыдущему посту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Где будет граница после записи 1 в последнее слово EEPROM и перезагрузки устройства ? На нуле, например. А где еще? Другое дело, что однобитный маркер не позволит установить наиболее свежую запись при повреждении содержимого памяти. Но это не всегда нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Там, в конце и будет. А если потом в нулевую ячейку запишем, в ней уже ноль запишем. Бит - это так, пример. Нет смысла программировать один бит. Байт - другое дело. Или поле в байте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба В даташите на 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: 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться