Самый распространенный протокол обновления прошивки

Я должен выбрать (и, возможно, реализовать) протокол / программу / процедуру обновления встроенного ПО для встроенного устройства без USB и с ограниченным объемом памяти программ. Это устройство будет работать автономно большую часть времени, но время от времени к нему придет техник и обновит прошивку.

Что было бы наиболее распространенным выбором для протокола обновления, если бы я хотел использовать RS232 или CAN?

Требования для обновления: завершить после прерванного обновления (потребуется загрузчик, я полагаю), небольшой объем памяти, объединить пользовательские настройки с вновь введенными пользовательскими полями данных (в EEPROM), сделать резервную копию предыдущей версии прошивки с помощью возможность откатить обновление обратно, безопасно обновить сам загрузчик.

Было бы неплохо, если бы уже существовали реализация загрузчика и обновление клиентского программного обеспечения (по крайней мере, для Windows).

И просто из любопытства - есть ли хорошие альтернативы DFU для устройств с USB?

заранее спасибо

1 ответ

Я не уверен насчет "самого распространенного"; Я не уверен, что кто-нибудь мог ответить на этот вопрос авторитетно или был ли ответ даже полезным. Однако я могу вам сказать, что я реализовал XMODEM-CRC/XMODEM-1K на нескольких устройствах (например, ARM 7, ARM Cortem-M, PIC24, TI C55xx) менее чем в 4 КБ. Загрузчик отправляет запрос на запуск XMODEM на каждый порт, который должен поддерживать обновление, затем для каждого порта, если ответ получен в течение короткого времени (несколько десятков миллисекунд), затем передача продолжается. Если ответ не получен, приложение запускается нормально.

завершить после прерванного обновления (предположительно, потребуется загрузчик)

Подход, который я выбрал, заключается в том, чтобы не запрограммировать начальный адрес немедленно, чтобы он мигал при получении, а скопировать его сбоку и затем запрограммировать его последним. Загрузчик проверяет начальный адрес при запуске, и если он равен 0xFFFFFFFF (т.е. не запрограммирован), передача не завершена, и загрузчик непрерывно перезапускает опрос для запуска XMODEM.

объединить пользовательские настройки с вновь введенными пользовательскими полями данных (в EEPROM),

В моем случае я использовал файлы Intel HEX, но память EEPROM обычно не отображалась в памяти. Вы можете решить эту проблему, используя собственный формат данных или установить адрес данных HEX в недопустимую для процессора область, которую код загрузчика будет распознавать как данные для отправки в EEPROM.

сделать резервную копию предыдущей версии прошивки с возможностью откатить обновление обратно,

Это функция реализации загрузчика, а не протокола. Это, конечно, требует, чтобы у вас было место для хранения двух копий приложения. Неиспользованная копия может быть заархивирована, но включение распаковки в загрузчик увеличит ее размер. Возможно, более простой и наименее дорогостоящий подход состоял бы в том, чтобы обеспечить поддержку загрузчиком загрузчика текущего образа приложения через XMODEM, позволяя сохранять резервную копию на хосте. Однако, делая это, вы потенциально позволяете третьей стороне получить доступ к вашему коду.

смело обновляйте сам загрузчик.

Опять же, это функция вашего загрузчика, а не протокол. Если код запускается из ОЗУ (т. Е. Загрузчик копируется из ПЗУ в ОЗУ и выполняется, тогда это просто. В этом случае наиболее безопасно, если это возможно, загрузить все данные загрузчика в ОЗУ перед программированием флэш-памяти, чтобы минимизировать время у цели нет загрузчика, и поэтому для успешного программирования не требуется поддерживать соединение с хостом.

Однако, если загрузчик запускается с флэш-памяти, заменить его с самого загрузчика невозможно. Вместо этого вы можете загрузить приложение, которое запускается загрузчиком и которое заменяет загрузчик перед загрузкой (или перезагрузкой) конечного приложения.

Было бы неплохо, если бы уже существовали реализация загрузчика и обновление клиентского программного обеспечения (по крайней мере, для Windows).

Любое программное обеспечение эмулятора терминала, такое как TeraTerm, Hyperterminal, PuTTY и т. Д., Будет поддерживать передачу XMODEM. Реализация собственного пользовательского отправителя XMODEM относительно проста с широко доступным исходным кодом XMODEM.

И просто из любопытства - есть ли хорошие альтернативы DFU для устройств с USB?

Что я сделал, так это внедрил стек USB-устройства класса CDC/ACM в загрузчике так, чтобы он отображался на хосте как последовательный порт, а затем использовал тот же код XMODEM, что и раньше, для передачи данных. Это увеличивает размер загрузчика; в моем случае около 12кбайт. Он был реализован с использованием стека и заметки приложения CDC/ACM (виртуальный COM-порт), предоставленной производителем микросхемы. Строго говоря, для этого вам понадобится идентификатор поставщика USB (VID), зарегистрированный в вашей компании; Вы не должны использовать какой-либо старый идентификатор.

Другие вопросы по тегам