Практично ли добавлять выделенную микросхему флэш-памяти / ОЗУ для увеличения памяти микроконтроллера, чтобы избежать записи на SD-карту?

Я работаю с микроконтроллером Atmega328P. Этот микроконтроллер будет генерировать данные и хранить их на SD-карте. Мой проект также будет на батарейках. Мое исследование показало, что запись на SD-карту стоит относительно дорого. Особенно из-за того, что я использую аккумулятор на 225 мАч с регулятором ограниченной мощности на 120 мА.

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

Однако теперь я столкнулся с проблемой, что у Atmega328p всего 2 КБ ОЗУ. Таким образом, у меня действительно ограниченное буферное пространство.

Итак, мой вопрос: будет ли разумным покупать выделенную флэш-память / RAM IC для увеличения буферного пространства? Мне любопытно, насколько это практично и насколько сложно это будет реализовать.

Есть предположения? Я знаю, что очевидным ответом будет покупка микроконтроллера с большей оперативной памятью, но я пытаюсь придерживаться этого микроконтроллера, чтобы проект был совместим с языком Arduino.

Постановка вещей через внешнюю память, вероятно, не стоит, но посмотрите на лучший процессор с большим объемом оперативной памяти. «Язык Arduino» не привязан к архитектуре AVR, хотя рано или поздно расширять кругозор все равно придется. Кроме того, если вам нужны только мегабайты, а не гигабайты, вы можете рассмотреть флэш-память SPI.
@ChrisStratton Что касается последнего комментария о флэш-памяти SPI, я не знал, что такая вещь существует. А меня интересует только память на диапазон мегабайт. Это кажется чем-то, что потенциально может быть ценным. Вы бы по-прежнему советовали против этого в своем первом комментарии? А по какой причине, просто потому что проще было бы просто перейти на другой микроконтроллер?
Вы найдете доступные микроконтроллеры с внутренней флэш-памятью объемом до мегабайта или около того, которую они обычно могут перезаписывать. Вы обнаружите, что легко работать с флэш-памятью SPI размером не менее 4 мегабайт (32 мегабита), которую легко получить, и существуют версии на 8 мегабайт. Кроме того, вас подталкивают к параллельной NAND, что доставляет больше хлопот, и SD-картам, которые как потребительский товар менее предсказуемы (мягко говоря), чем голые ИС. Мой комментарий был против размещения чего-либо через одну внешнюю память перед записью в другую — постарайтесь найти достаточно встроенной оперативной памяти для хранения частичных блоков внутри.
SPI SRAM тоже вещь. SD-карты — это какой-то мусор, особенно если вы теряете питание во время записи. Вы просто записываете все на серийный флэш-чип, что может быть наиболее удобным.
Добавление еще одного чипа, а затем запись в него только для того, чтобы снова прочитать его, чтобы сохранить некоторые записи на вашу SD-карту, не кажется лучшим способом экономии заряда батареи. Помимо добавленной ИС, циклы ЦП также потребляют энергию.
Запись в память SPI в любом случае будет иметь накладные расходы; Я использую устройства с небольшим током сна: everspin.com/supportdocs/MR25H40VDF

Ответы (1)

Я реализовал такую ​​систему. Мы использовали энергонезависимую FRAM в качестве буфера, но SRAM также может работать в зависимости от ваших требований к выживанию при потере питания.

Я буферизировал данные во FRAM, пока она почти не заполнилась. Затем я записал его на SD-карту. Чтобы сделать систему более надежной, я использовал контрольную сумму блоков в FRAM. Я также записал все метаданные файловой системы с SD-карты во FRAM. Когда требовались обновления, FRAM сначала обновлялась, а затем копировалась на SD-карту, делая обновления атомарными (т. е. ни разу в процессе не было возможности потерять данные или оставить файловую систему в поврежденном состоянии). Для этого я использовал модифицированный драйвер FAT32, который, к сожалению, является проприетарным кодом, иначе я бы им поделился.

Мне показалось, что это очень эффективный метод. Хотя некоторое время теряется при трехкратной записи данных (один раз в буфер данных FRAM, затем в буфер блока FRAM SD-карты, а затем на SD-карту), на самом деле это было в значительной степени компенсировано возможностью DMA вывода данных и выполнения других операций. обработка в то же время.

Очевидно, что с обычной энергозависимой оперативной памятью вы не можете использовать ее для атомарной записи. Тем не менее, буферизация по-прежнему ценна. В моих тестах SD-карты пишут значительно быстрее, если вы можете сохранять блоки > 4 КБ за раз, в идеале 64 КБ или больше. Вероятно, это связано с тем, как управляется их внутренняя флэш-память.