Цитата(Сергей Борщ @ Sep 13 2013, 15:44)

Если прошивку обновляет клиент - она должна быть криптована. Соответственно для несовместимых версий железа используются разные ключи криптования и "неправильная" прошивка не будет расшифрована и, следовательно, будет отвергнута загрузчиком. Другое дело, если основной функционал прошивок для разных модификаций железа сильно схож - тогда может иметь смысл хранить в области загрузчика идентификатор версии железа и в одной глобальной прошивке предусмотреть поддержку всех вариантов железа с ветвлением по прочитанному из загрузчика идентификатору. В этом случае загрузчик может в начале обновления получать информацию о версии прошивки и сравнивая с минимально допустимой версией отвергать либо принимать ее. Причем идентификатор версии имеет смысл заложить изначально, даже если не планируете ветвление по нему. Со временем захочется прийти к объединенному варианту прошивок, а все необходимое для поддержки такого варианта у вас уже будет даже в старых приборах.
Криптование прошивок пока не предуматривается.
Вопрос каким образом хранится ID железа? Загрузчик в МК имеет какую то версию и ID - или тип прибора . Т.е. - это по сути ID железа?
Загрузчик верхнего уровня - читает этот ID. - т.е. знает тип железа и модификацию загручика.
Остается записать файл основной программы. Причем сам файл по себе должен нести информацию о допустимости записи в тот или иной прибор.
Выбор типа файла как правило bin или hex???? -
Т.е. должны иметь служебные поля, позволяющие верхнему загрузчику по файлу определить тип железа для которого он предназначен. (ID, номер билда и т.п.)
И версии поддерживаемого железа????
Также возникает вопрос о функционале загручика нижнего уровня.
Его роль в защите от записи неправильной версии прошивки сводится лишь к выдаче собственного ID?
И уже загрузчик верхнего уровня принимает решение о продолжении работы.
Т.е. имеем набор загрузчиков под каждую уникальную версию железа.
Или как вариант - служебное поле во флеше загручика - но это лишние операции при начальном программировании загрузчика.
Цитата(mempfis_ @ Sep 13 2013, 16:22)

При загрузке обновления загружались первые 1024 байта, расшифровывались и по определённой позиции читался идентификатор устройства. Если Идентификатор совпадал, то загрузка обновления
Т.е. программа верхнего уровня "парсила" заливаемую прошивку? (Как вариант искала текстовое описание устройства в прошивке)
Ну и разумеется заменила более ранюю версию у клиента?