EEPROM с высокой выносливостью

8

В настоящее время я работаю над одним встроенным проектом, в котором у меня есть один счетчик, который будет активен все время. Если питание отключается, я также должен сохранить состояние последнего счетчика и загрузить его при следующем запуске. Так что я планировал использовать EEPROM, в которой я буду постоянно записывать значение моего счетчика. Но я где-то читал, что EEPROM выдерживает чтение / запись около 100 000, и я буду обновлять этот счетчик, вероятно, 120 000 в сутки. Поэтому я нахожу альтернативы для выполнения этой задачи. пожалуйста, дайте мне ваше предложение сделать то же самое.

Нишант Катирия
источник
4
Используйте большой eprom и носите выравнивание?
PlasmaHH
6
Можете ли вы использовать RAM + обнаружение потери мощности? Это то, что обычно делается.
Брайан Бетчер
1
EEPROM, вероятно, не самое подходящее решение. Кроме этого, вы можете попытаться снизить частоту написания, если ваши требования позволяют это. Также вам может потребоваться выполнить запись по случайным / текущим адресам вместо того же самого (наверняка вам придётся придумать некоторую структуру данных, способную получить это впоследствии.)
Евгений Ш.
2
Существуют другие типы NVRAM, кроме EEPROM или флэш-памяти. Попробуйте поискать чипы FRAM или MRAM - они имеют выносливость на несколько порядков выше.
Турбо J

Ответы:

12

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

Некоторые из продуктов MSP430 от TI доступны с FRAM, вот ссылка на приложение, аналогичное описанному вами:

MSP430 с FRAM сохранить состояние при сбое питания

Вот статья в Википедии о FRAM: FRAM

Джон Д
источник
Это совсем не решение, потому что многобайтовые записи будут по-прежнему повреждены при сбое питания. Или вы предлагаете ОП ограничить себя одним байтом?
ultimA
1
@ultimA Библиотека NVS гарантирует 16-битную запись, ОП не говорит, насколько велик его счетчик. Это всего лишь пример, другие методы могут разрешить хранение более крупных структур данных: энергонезависимое хранилище (NVS): библиотека, которая делает обработку энергонезависимых данных легкой и надежной в отношении периодической потери мощности или асинхронного сброса устройства. Устройства MSP430 с энергонезависимой памятью FRAM гарантируют 16-битную запись во всех сценариях. Часто сохраняемые данные представляют собой более крупную структуру. NVS содержит функции, которые хранят данные таким образом, что гарантированно восстанавливает последнюю действительную запись без повреждения.
Джон Д
5
FRAM является отличным решением этой проблемы. Я рад видеть ответ, предлагающий его использование. Если бы не было одного, я собирался написать аналогичный ответ. Мои решения, использующие FRAM, всегда хранят две копии данных последовательно. Только один из них может быть поврежден. FRAM также пишет намного быстрее, чем EEPROM. Каждая копия данных нуждается в способе проверить, что это правильно. Это можно сделать с помощью простого XOR CRC или для небольшого набора данных, вы можете просто хранить данные и их дополнение в каждом наборе данных. При запуске вы просто проверяете, какая копия сохраненных данных проверяется.
Майкл Карас
Кстати, некоторые люди в шутку предлагали использовать память ядра. FRAM - это современная версия технологии, которая работает аналогично тому, как работает память ядра.
Майкл Карас
1
При наличии достаточного места хранение счетчика таким образом, чтобы его можно было безопасно обновить, можно выполнить несколькими прямыми способами. Один простой способ - иметь две копии счетчика, а также индикатор, для которого копия действительна; если индикатор изменяется только тогда, когда обе копии действительны, и перед изменением любого кода копии устанавливается индикатор, указывающий, что другая копия действительна (а после записи устанавливает, что индикатор показывает, что обе копии действительны), то какое значение не имеет значения читается из чего-то, что было написано во время выключения.
суперкат
11

У меня есть эта проблема в текущем проекте.

То, как я с этим справляюсь, - это сохранение значения счетчика в оперативной памяти. Я добавил немного аппаратного обеспечения, чтобы микроконтроллер мог обнаружить низкое исходное входное напряжение питания. Если это так, он останавливает свою работу, сохраняет значение действующего счетчика в EEPROM, а затем ожидает просмотра необработанного напряжения питания. Если он возвращается, с некоторым гистерезисом, то микро по существу перезапускается. В противном случае, если питание продолжит снижаться, микро в конечном итоге остановится. При следующем перезапуске значение счетчика загружается из ЭСППЗУ, затем снова используется в оперативной памяти в ОЗУ до следующего отключения питания.

Это не займет много времени, чтобы записать небольшое значение в EEPROM. Скорее всего, в вашей существующей системе электропитания достаточно накопителя энергии, чтобы вы могли обнаружить понижение напряжения, и при этом у вас достаточно гарантированного времени работы до того, как питание микропроцессора упадет ниже рабочего порога или порога записи EEPROM.

В моем случае единственным дополнительным оборудованием был диод Шоттки, предотвращающий всасывание заряда источника постоянного тока из локального резервуара на пути вниз, и два резистора в качестве делителя напряжения, чтобы микроконтроллер мог считывать необработанное входное напряжение. Остальное прошивка.

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

Олин Латроп
источник
4

Старое старое старое решение, cmos counter + литиевая батарея или Ram + литиевая батарея.

Источник питания для запоминающего элемента поступает от обычного источника питания, когда он доступен, или от аккумулятора, когда его нет.

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

RoyC
источник
2
Еще более старое решение - память с магнитным сердечником.
glen_geek
Просто хотел ответить тем же :) Вот устройство для использования datasheets.maximintegrated.com/en/ds/DS1307.pdf
Anonymous
1
@glen_geek Даже я не помню, как это использовал. :)
RoyC
4

Микрочип состоит из серии I 2 C «EERAM», которые позволяют сохранять данные в SRAM, а затем записывать их в EEPROM (используя энергию, хранящуюся в конденсаторе), когда питание теряется, и загружаться, когда питание возвращается. Кажется, это было бы идеально для вашего приложения.

Типичным примером этих частей является 47L04 .

сумеречный
источник
3

Другое решение

Обнаружьте отключение и используйте суперкап или не супер колпачок, чтобы поддерживать питание в течение нескольких миллисекунд. Используйте это время для записи значения счетчика в EPROM. Пишите только в EPROM при отключении питания. Количество циклов EPROM = нет циклов отключения питания.

RoyC
источник
3

Используйте чип FRAM, такой как FM24C04B. Они имеют очень высокую стойкость при записи и энергонезависимы.

https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf

Вы также можете использовать модуль SRAM (NVRAM) с батарейным питанием. Например M48Z02-150PC1

https://www.mouser.com/ds/2/389/m48z02-955115.pdf

user4574
источник
Я не уверен насчет других регионов, но здесь, в Великобритании, Digikey намного дешевле, чем mouser для деталей FRAM. И как всегда, до тех пор, пока вы можете найти поставщика, на которого можно положиться (или если вам нужен только небольшой пробег и вы можете жить с шансом иметь дело с потенциально ненадежным поставщиком), существует множество китайских поставщиков, которые могут существенно улучшить обе цены.
Жюль
1

Я решил пойти с "Ds1307 RTC". Потому что он имеет 54 байта SRAM с поддержкой питания. который позволяет бесконечный цикл чтения / записи.

Нишант Катирия
источник
0

Если во встроенном проекте есть NIC, отправьте счетчик на удаленный компьютер / сервер. Кажется, что 120 000 итераций за 24 часа - это примерно одна итерация за 0,72 секунды, что должно быть нормально для сетевого трафика.

На сервере всегда будет храниться последнее значение счетчика. Отсутствие повреждения значения счетчика при потере мощности, поскольку для обновления значения на сервере необходимо выдать действительный пакет; однако требует постоянного подключения, или должен быть разработан специальный протокол тайм-аута. Кроме того, в качестве бонуса вы сможете управлять своим устройством с пульта, если это необходимо.

анонимное
источник
1
Если требуется реализовать счетчик кадров, чтобы предотвратить повторные атаки и иным образом гарантировать соответствие протокола, как вы собираетесь отправлять значение на устройство?
0

A) Используйте конденсатор емкостью 100 мкФ (или больше) для включения счетчика во время выключения. Или какая-то логика, которая требуется для хранения значения счетчика.

Б) Используйте память с магнитным сердечником , их может быть немного сложно настроить.

C) Сделайте управляемый двигателем потенциометр (например, сервопривод), в какой-то момент ваш счетчик переполнится, верно? Карта это до 360 градусов. Затем создайте петлю обратной связи, чтобы вы могли установить значение потенциометра в цифровом виде и прочитать его в цифровом виде.

D) Отправляйте значение счетчика раз в минуту на какой-либо сервер или серверы, и пусть они запоминают значение для вас в нерабочее время. Затем, когда снова включается питание, возвращают значение счетчика.

Гарри Свенссон
источник
1
Можете ли вы еще купить память ядра?
BeB00
@ BeB00 Я не знаю, это раньше моего времени. Но я бы использовал шестигранную гайку для 2-миллиметровых резьбовых стержней с некоторыми проводами, намотанными на него, как тороидальная катушка. - А затем вернемся к любой схеме, которая обычно используется с памятью ядра. Я полагаю, что достаточно просто прочитать АЦП, когда гистерезис ядра идет другим путем и выделяет энергию.
Гарри Свенссон
Я имею в виду ... может быть, в качестве эксперимента это было бы забавно, но я бы определенно никогда не использовал это в системе, с которой мне нужно было работать
BeB00
@ BeB00 ebay.com/bhp/vintage-core-memory Ну, похоже, он существует на тот случай, если кто-то захочет получить качественные вещи.
Гарри Свенссон
: P Я не уверен, что это гарантировано в течение 60 лет
BeB00