sd_file — файл на SD-карте
Раз в 10 секунд дописывает строку с датой и временем работы в /SD/recipes/log.txt.
При старте один раз меряет скорость: пишет и читает файл 4 МБ блоками по 32 КБ.
Включить
Заголовок раздела «Включить»cmake --preset Release -DH723_RECIPES="sd_file"Нужна карта microSD с FAT32 или exFAT.
Вывод на плате
Заголовок раздела «Вывод на плате»sd_file: started, log /SD/recipes/log.txt every 10 ssd_file: 4096 KB write 10240 KB/s, read 10694 KB/ssd_file: /SD/recipes/log.txt += 2026-03-14 10:02:03 #1 uptime 3 ssd_file: size 68 bytessd_file: /SD/recipes/log.txt += 2026-03-14 10:02:13 #2 uptime 13 ssd_file: size 103 bytesРазмер 68 байт после первой строки — в файле уже была строка с прошлого запуска: файл дописывается, а не перезаписывается. Скорость зависит от карты: на разных картах запись 1,8–10 МБ/с.
Как это работает
Заголовок раздела «Как это работает»- Пути. Тома FatFs называются
/SDи/RAM(RAM-диск 4 МБ в SDRAM). Эти пути понимают и стандартный C (fopen,fprintf— обёртки вlibs/disks/wrappers.c), и FatFs напрямую (f_open,f_write). - Текст — через stdio.
sdFileAppendоткрывает файл в режиме"a", пишет строку и сразу закрывает.fcloseсбрасывает буфер и обновляет запись в каталоге; если держать файл открытым и пропадёт питание, последние данные потеряются. - Большие объёмы — через FatFs и крупными блоками. Драйвер SD (
libs/disks/sddisk.c) передаёт до 64 секторов одной командой. Блоки по 32 КБ дают скорость в разы выше, чем запись по байту или по строке; буфер такого размера берётся из SDRAM (sdramMalloc). - Карта появляется не сразу. Её монтирует
appTask, задача рецепта ждётsdDiskIsMounted(). - Время. Из RTC: его ставит NTP-клиент, когда есть интернет через Wi-Fi. У HAL есть правило:
сначала
HAL_RTC_GetTime, потомHAL_RTC_GetDate: чтение времени фиксирует теневые регистры до чтения даты, и при обратном порядке следующие показания будут старыми.
Переделать под себя
Заголовок раздела «Переделать под себя»- Логгер данных:
sdFileAppend("/SD/data.csv", строка)из своей задачи. При записи чаще раза в секунду строки выгоднее копить (в буфере или файле на RAM-диске/RAM/...) и переносить на SD пачкой. - Коды ошибок FatFs (
FRESULT) — вthird_party/fatfs/source/ff.h.
Исходники рецепта: recipes/sd_file
