Я не уверен насчет «наиболее распространенных»; Я не уверен, что кто-то может ответить на это авторитетно или ответ будет даже полезен. Однако могу сказать, что я реализовал 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), зарегистрированный в вашей компании; вы не должны использовать только старый идентификатор.
Я не уверен, что «тогда наиболее распространенный выбор» - полезный или подходящий вопрос; это, вероятно, мало что делает другие. – Clifford