Тонкий логгер для SD карты

Привет,

Хочу поделиться библиотекой которая позволяет писать на 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) который пишет время в файл. Если часов нет, закомментируйте дефайн в в хедере.

Открывая потом лог файл в текстовом редакторе можно увидеть эти пробелы

Спасибо за проделанную вами роботу. Вы мне очень помогли