Как безопасно записывать данные на SD или Eeprom при выключении питания Arduino

Я хочу постоянно хранить данные на SD-карте. Но как я могу убедиться, что данные не повреждены в момент отключения питания? Я думаю, я мог бы добавить небольшой конденсатор на 5 В и проверить, когда напряжение падает, поэтому я бы остановил запись данных. Или есть лучшее решение для безопасной записи данных?

, 👍2


2 ответа


1

Я думаю, что "маленький" конденсатор здесь не справится с этой задачей, так как вам нужно поддерживать стабильное питание до завершения записи. Вам необходимо определить:

  1. Сколько энергии я использую?
  2. Как быстро я могу обнаружить отключение электроэнергии?
  3. Сколько времени мне нужно, чтобы поддерживать питание Arduino для завершения операций записи, которые я хочу выполнить.

Затем вы сможете рассчитать, какая емкость вам нужна и какой конденсатор или батарея более подходят.

,

ну, данные записываются, вероятно, за микросекунды, так что I 3300uF или что-то в этом роде будет достаточно на короткий промежуток времени. Вопрос - это правильный способ сделать это? Разрядка конденсатора приведет к снижению его напряжения, поэтому я понятия не имею, что может произойти, @Name

Вы просто предполагаете, сколько времени и сколько резервов вам нужно. Проводите измерения и делайте расчеты. Это инженерия., @jwh20

Также рассчитайте вероятность отключения питания непосредственно во время записи на SD-карту. Если вы, например, пишете только раз в 15 минут, шансы очень низки. В сочетании с вероятностью отключения электроэнергии, возможно, вам не стоит тратить время на попытки предотвратить это., @Gerben


0

Вероятно, вам захочется обратиться к различным формам NVRAM (энергонезависимой оперативной памяти). SRAM с функцией автоматического сохранения в EEPROM при потере питания, например, 47L16. Или оперативная память с батарейным питанием; если в вашем проекте есть часы реального времени, у вас может быть ограниченное пространство для хранения. Например, DS1307 имеет 56 байт, хотя вы, вероятно, можете найти более точный RTC, в котором есть хранилище. Или FRAM, хотя он такой же дорогой, например cy15b064q-sxet

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

,