Используйте микросхему, объем флэш-памяти которой более чем в два раза больше необходимого для вашего кода. Таким образом, вы можете загрузить новую прошивку в эту память, оставив при этом старую, если что-то пойдет не так.
После расшифровки и проверки контрольных сумм новой прошивки загрузчик может скопировать ее в свое окончательное место, заменив старую. Если что-то пойдет не так во время этой части, после аппаратного сброса загрузчик должен увидеть, что новая прошивка недействительна (запустив контрольную сумму еще раз), и повторить копирование.
Это самый простой и надежный способ, который я знаю. Это также требует небольшого количества кода в загрузчике и не требует дублирования каких-либо функций между основной программой и загрузчиком (вам не нужна коммуникационная логика в загрузчике).
Используйте загрузчик и несколько КБ дополнительной прошивки.
Обновление выполняется загрузчиком, посылая специальную команду через UART, USB, I2C или другой протокол. Обновляется только основной код - код загрузчика никогда не затрагивается, кроме как через внешний программатор (например, JTAG / PICkit для PIC и т. Д.)
Если обновление завершится неудачно (сбой питания, кто-то споткнулся по проводу или по другой причине), то виджет не будет работать, но загрузчик все еще будет там, поэтому можно будет снова предпринять попытку обновления.
В каком-то байте может быть установлен флаг, который предотвращает неправильное выполнение основного кода, поскольку он не был полностью обновлен.
источник
Если ваше устройство сравнительно дорогое, и вы можете позволить себе его стоимость (а ваши клиенты заботятся об обновлениях), вы можете сделать это ...
(как правило, эта техника требует либо внешнего хранилища, либо хитрого использования jtag ..)
Имейте фиксированную программу micro (например, небольшую PIC), которая может остановить систему и перепрограммировать ее.
потому что вы не можете изменить прошивку «обновить процессор», она никогда не может пойти не так.
1) пользователь может обновить устройство
2) если обновление не удается, они всегда могут попробовать еще раз. Это не может быть заложено
3) даже если ваше целевое устройство не поддерживает загрузчик (оно просто хочет загрузиться и запустить), вы все равно можете заставить его делать то, что вы хотите.
работает для FPGA, DSP и других странных целей.
Может иметь действительно аккуратный пользовательский интерфейс (даже PIC может запустить веб-сервер ....)
источник
Убедитесь, что ваш продукт имеет простой последовательный интерфейс, предпочтительно EIA232. Нестандартный разъем в порядке, если у вас нет места для DB-9. Например, разъем TRS - это все, что вам нужно для TxD, RxD и заземления.
При первом программировании устройства включите загрузчик . Это должно быть как можно проще , потому что рано или поздно вы захотите обновить сам загрузчик, если ему потребуются новые функции. (Вы, вероятно, не можете даже обновить его)
Затем разъем TRS. Используйте разъем с переключателем, чтобы вы могли определить наличие разъема. Просто проверьте сразу после сброса и запустите загрузчик, если есть плагин, иначе запустите приложение. Таким образом, загрузчик и пользовательская прикладная программа остаются хорошо разделенными. (Проверка на самом деле является частью загрузчика; она нам понадобится независимо от версии приложения, в противном случае мы не сможем войти в загрузчик!)
источник
Какое оборудование будет доступно для «модернизации»? ПК, флешка, микро SD карта?
Одним из способов было бы поместить приложение в съемный элемент (флешка, SD-карта и т. Д.). Чип загружает свое приложение из предмета. Ваш апгрейд просто меняет предмет и перезагружается.
Я знаю, что микросхемы микроконтроллеров ARM и Cortex (NXP, Atmel) имеют встроенный последовательный загрузчик, поэтому, если ваш модуль обновления поставляется с ПК и последовательным кабелем (и вы подготовили интерфейс COM-порта), он может просто загрузить свой Обновить.
источник