Привет,
Хочу поделиться библиотекой которая позволяет писать на SD карту логи (любые сообщения). Основная особенность библиотеки состоит в том, что она требует минимальное количество памяти (как кода, так и ОЗУ). Примерно 5кБ кода и 73 байта ОЗУ.
Мне понадобилось добавить логи процесса в существующий проект на Arduino Nano, когда уже оставалось мало памяти. Существующие полноценные библиотеки требуют много памяти, поэтому первое что я нашел из кастомных решений это Petit FS. Но у неё есть ограничение, которое не позволяет её использовать в качестве логгера - она не умеет дописывать файл.
В итоге я взял её за основу, и переработал так, что бы можно было дописывать файл. При этом так же убрал лишний код, что бы сэкономить место.
В итоге получился TinySDLogger: GitHub - Nick507/TinySDLogger
На гитхабе есть readme файл с более детальным описанием.
В кратце основные моменты библиотеки:
- Небольшие требования к памяти
- Использование программного SPI - можно подключить SD карту к любым портам
- Небольшая скорость записи (около 3кб в секунду), но для логгирования этого более чем достаточно
- SD карта должна быть отформатирована в FAT32
- На SD карте нельзя хранить какие-то еще файлы (связано с тем, что библиотека считает всю карту свободной и просто переписывает сектора)
- Для первого использования SD карты, после её форматирования надо создать и потом удалить 16 любых пустых файлов
- После закрытия лога (вызов close()) файл будет дописан до границы 512 байт пробелами и в конце переводом строки. Открывая потом лог файл в текстовом редакторе можно увидеть эти пробелы
- Не рекомендуется вызывать метод close() после каждой записи. (см пункт выше). Если не вызывать close(), максимальный кусок лога который может быть потерян (если контроллер выключился) - последние 511 байт. close() рекомендуется вызывать по таймеру (например каждый час) или по количеству сообщений, или по логическому завершению сессии логгирования (если применимо).
- Библиотека поддерживает DS1307 в качестве часов реального времени (есть метод writeTimestamp) который пишет время в файл. Если часов нет, закомментируйте дефайн в в хедере.