pinko> Закончил проект высокоскоростной (10 Гц) GPS регистратор на данных для моделей и ракет. Общий вес с карты менее 9 грамм.
Поздравляю!
pinko> Информация (GPGGA NMEA сообщение) записывается на микро SD-карту. Данные разделяются на файлов каждой 15 секунд. Поэтому, если авария происходит во время записи файла, максимум 15 секунд могут быть потеряны.
Несколько советов (я сам делал нечто аналогичное, правда, для записи видео на SD):
Во-первых, для защиты от потери данных надо переписывать каждый блок сразу по получению данных. То есть, не дожидась, когда 512 байт заполнятся, писать сразу копию 512-байтного буфера. Нет, дырки протрутся далеко не сразу — в современных флэшках есть система выравнивания износа (wear leveling), в действительности записи будут идти в разные блоки памяти.
Во-вторых, при выделении нового кластера в FAT надо писать в таком порядке: FAT-EOF, FAT-chain (если EOF и chain в разных блоках), затем данные. Размер в таблице файлов можно менять довольно редко, в случае чего chkdsk вылечит.
Рубить на относительно мелкие файлы — правильная стратегия при опасности внезапного отключения питания.
В-третьих, блокировочные конденсаторы по питанию микросхем. Где они?
В-четвёртых, кода я не видел, но с твердотельным (танталовым) конденсатором по питанию и BOD можно отслеживать потерю батареи при аварии и спешно дописать и закрыть файл.
В-пятых, у U2 свободно аж четыре ноги. Можно сделать программный UART и прицепить китайский 433 МГц модуль вроде обсуждаемого тут же рядом, и сливать туда NMEA. тогда даже при потере ракеты будут хоть какие-то данные.
В-шестых, про светодиод: хорошо бы индицировать подключение питания. Тут есть два варианта: либо при подключении одноразово светить ~1 сек, а потом гасить или светить очень короткими равномерными вспышками, либо светить вполнакала через ШИМ.
Вроде всё
pinko> Чтобы помочь с обработкой данных, я сделал небольшое приложение.
И это тоже хорошо