2015-04-09 2 views
-1

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

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

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

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

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

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

+1

Я не уверен, что «тогда наиболее распространенный выбор» - полезный или подходящий вопрос; это, вероятно, мало что делает другие. – Clifford

ответ

2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Смежные вопросы