Мы создадим плату ARM с встроенным модемом GSM.
Мы хотим иметь возможность обновить прошивку ARM по воздуху.
Есть ли хорошее, надежное решение с открытым исходным кодом для этого?
Если нет, есть ли платная ОС с этой функцией?
Мы создадим плату ARM с встроенным модемом GSM.
Мы хотим иметь возможность обновить прошивку ARM по воздуху.
Есть ли хорошее, надежное решение с открытым исходным кодом для этого?
Если нет, есть ли платная ОС с этой функцией?
Ответы:
Я не знаю никаких готовых решений, но я опишу, как я обошел это в одном проекте. Он не совсем «не поддающийся обработке», но я не знаю, что он потерпел неудачу после тысяч обновлений. Для этого приложения очень низкая частота отказов все равно будет дешевле, чем получение доступа к устройствам.
Основное приложение имеет три дополнительных типа пакетов, добавленных к его обычному протоколу связи, который включает обнаружение ошибок и состояние повторных попыток сверху:
Команда начала обновления прошивки очищает зарезервированную область памяти во внешней SPI Flash. Он возвращает ошибку, если устройство работает от своей резервной батареи или от внешнего источника питания, но уровень заряда батареи ниже 25%.
Команда записи блока принимает адрес смещения и данные, которые записываются во внешнюю флэш-память небольшими порциями. Протокол более высокого уровня заботится об обнаружении ошибок и повторных передачах. После записи каждого блока он читается и проверяется до подтверждения команды.
Команда завершения обновления прошивки включает в себя длину, на которой полученная прошивка должна быть вместе с CRC32 всего образа для дальнейшей проверки. Если это совпадает с содержимым внешней флэш-памяти и условия питания все еще в порядке, то же значение длины и CRC32 передается в область EEPROM вместе с «магическим числом», чтобы указать, что обновление микропрограммного обеспечения еще не завершено.
Жесткий цикл выполняется в основном приложении для принудительного перезапуска сторожевого таймера.
Загрузчик (который находится в защищенной от записи области ARM Flash) видит магическое число в EEPROM и еще раз проверяет CRC32 изображения. Если все в порядке, он передает изображение из внешней Flash-памяти в основную программную область Flash ARM.
Информация об ожидающем обновлении удаляется из EEPROM, и жесткий цикл вызывает другую перезагрузку. На этот раз загрузчик запустит основное приложение нормально.
Хотя я никогда не видел, чтобы фаза обновления проваливалась, тестирование новых версий микропрограммного обеспечения перед развертыванием крайне важно с помощью этого метода. Если новая версия не может подключиться к сети GSM и принимать команды на обновление в будущем, для нее потребуется обновление встроенного программного обеспечения.
Вы используете Linux или RTOS, или голый металл? Если вы используете Debian, вы можете сделать снимок текущей файловой системы, выполнить обновление с помощью «apt-get», а затем сохранить или откатить изменения в зависимости от того, сработало это или нет.