Я работаю с микроконтроллером Atmega328P. Этот микроконтроллер будет генерировать данные и хранить их на SD-карте. Мой проект также будет на батарейках. Мое исследование показало, что запись на SD-карту стоит относительно дорого. Особенно из-за того, что я использую аккумулятор на 225 мАч с регулятором ограниченной мощности на 120 мА.
Я читал, что распространенным методом экономии энергии является буферизация команд записи в одну операцию записи. Это кажется относительно простым.
Однако теперь я столкнулся с проблемой, что у Atmega328p всего 2 КБ ОЗУ. Таким образом, у меня действительно ограниченное буферное пространство.
Итак, мой вопрос: будет ли разумным покупать выделенную флэш-память / RAM IC для увеличения буферного пространства? Мне любопытно, насколько это практично и насколько сложно это будет реализовать.
Есть предположения? Я знаю, что очевидным ответом будет покупка микроконтроллера с большей оперативной памятью, но я пытаюсь придерживаться этого микроконтроллера, чтобы проект был совместим с языком Arduino.
Я реализовал такую систему. Мы использовали энергонезависимую FRAM в качестве буфера, но SRAM также может работать в зависимости от ваших требований к выживанию при потере питания.
Я буферизировал данные во FRAM, пока она почти не заполнилась. Затем я записал его на SD-карту. Чтобы сделать систему более надежной, я использовал контрольную сумму блоков в FRAM. Я также записал все метаданные файловой системы с SD-карты во FRAM. Когда требовались обновления, FRAM сначала обновлялась, а затем копировалась на SD-карту, делая обновления атомарными (т. е. ни разу в процессе не было возможности потерять данные или оставить файловую систему в поврежденном состоянии). Для этого я использовал модифицированный драйвер FAT32, который, к сожалению, является проприетарным кодом, иначе я бы им поделился.
Мне показалось, что это очень эффективный метод. Хотя некоторое время теряется при трехкратной записи данных (один раз в буфер данных FRAM, затем в буфер блока FRAM SD-карты, а затем на SD-карту), на самом деле это было в значительной степени компенсировано возможностью DMA вывода данных и выполнения других операций. обработка в то же время.
Очевидно, что с обычной энергозависимой оперативной памятью вы не можете использовать ее для атомарной записи. Тем не менее, буферизация по-прежнему ценна. В моих тестах SD-карты пишут значительно быстрее, если вы можете сохранять блоки > 4 КБ за раз, в идеале 64 КБ или больше. Вероятно, это связано с тем, как управляется их внутренняя флэш-память.
Крис Стрэттон
Иззо
Крис Стрэттон
pjc50
Отметка
Питер Смит