lacteApp
C++17 service for Lacte hardware
Loading...
Searching...
No Matches
Обновление MCU

Механизм обновления автоматический: каждые 30 секунд (по дефолту) проверяется наличие .bin файла. Если в каталоге /mnt/nand_disk_ext/lacte появляется файл с расширением .bin, приложение пробует прошить плату.

При старте приложения, до запуска основной логики, сервис пытается найти прошивку и прошить плату. Только после этого стартует основная логика.

Условия запуска прошивки

  1. Проверяется контрольная сумма CRC в конце файла — по алгоритму, используемому средой IAR (специальный способ вычисления, применяемый в сборке).
  2. Если CRC сошлась — файл прошивается, по завершении файл удаляется из /tmp.
  3. Если CRC не сошлась — прошивка не выполняется, файл удаляется.
  4. Если плата находилась в App то сервис посылает команду перезагрузки (0x127) а плата отправляет ответ (Разрешено или нет. Подробнее описано в протоколе). В случае запрета перезагрузки, попытка повторится через 30 секунд.
  5. Если плата не находится в App(не отвечает на запросы) то перепрошивка начинатеся сразу

Фиксация события

  1. Если прошивка удалась, в БД фиксируется событие:
    storage.AddStat("update_complete", "True");
  2. Если прошивка не удалась, по неизвестной ошибке в БД фиксируется:
    storage.AddStat("update_complete", "False");
    но файл в таком случае не удаляется. Прошивка повторится через 30 секунд. Если по прошествию 5 попыток прошивка не удастся, то сервис будет ждать коннекта с app платы , и только потом повторит прошивку

Итог

  • Виртуальный режим (--virtual) пока не выполняет прошивку.
  • Для реального устройства следует указывать --dev или положиться на автообнаружение по VID:PID 067b:23a3.
  • При успешной/неуспешной прошивке событие фиксируется в таблице статистики:
    storage.AddStat("update_complete", "True"); // при успехе
    storage.AddStat("update_complete", "False"); // при ошибке
  • Также ведётся лог: «File removed after flashing: <path>» или «Error while flashing file: <path>».