Bootloader для STM8. Прошивка "по воздуху"

Представленные ниже материалы не претендуют на научную новизну и новаторство, а являются просто кратким обзором моей реализации бутлоадера для STM8 для прошивки из внешней EEPROM. В конце статьи приложен рабочий проект под IAR. Основано (скорее даже «содрано») все на AppNote от ST. Надеюсь, что кому-то поможет быстрее реализовать некоторые задумки.

Предисловие
Делал я недавно приборчик с Wi-Fi модулем на борту. Хост контроллер там стоит STM8S. Ну и встал вопрос обновления прошивки МК «по воздуху».
Обычно везде описывается вариант работы бутлоадера «на лету» с управлением от некой компьютерной утилиты, которая по какому-либо интерфейсу (UART, SPI, I2C) засылает фрагмент прошивки в МК, этот фрагмент заливается во flash, далее идет следующий фрагмент… и так пока не зальем всю прошивку. Если в процессе прошивки произошел какой-либо сбой (вырубился свет, отказал канал связи), мы спокойно этот сбой устраняем, запускаем bootloader и повторяем попытку. Автономность загрузчика в большинстве случаев ограничивается проверкой условия входа в загрузчик.

Но в некоторых случаях (например, в моем) этот вариант не катит. Например, когда нет прямого доступа к интерфейсам МК, потому что связь с ним (МК) осуществляется через некий канал связи (GSM-модуль, Wi-Fi модуль, PLC). Тогда если произошел сбой в процессе прошивки, то при следующем запуске уже некому будет установить этот самый канал связи т.к. скорее всего bootloader не потянет функционала по управлению вышеперечисленными устройствами.
Напрашивается идея сначала силами основной прошивки «сливать» «образ» новой версии куда-то (например во внешнюю EEPROM), а потом уже загрузиться под бутом и прошиваться с любым количеством попыток, т.к. даже если какой-то сбой и произойдет — из EEPROM образ прошивки никуда не денется.



Читать дальше

Загрузчик для микроконтроллеров AVR.

AVR
Как то потребовался мне для одного проекта загрузчик для чипов AVR. Писать самому некогда было, да и не совсем быстрое это дело. Поэтому стал рыть интернет. Рыл, рыл и нарыл. Товарищ Шао зэ ян его создал(китаец).

Читать дальше

STM32, прошивка через RS-232

Не пинайте, на STM32 это мой первый девайс. Надумал заложить в него возможность перепрошивки через RS-232. Юмор в том, что для указания режима загрузки используется один BOOT0, это отдельный пин, и один назначенный на PORTB, PB2.
Следуя даташиту, в этом режиме должно быть BOOT0=1 и BOOT1=0. Хочется убить 2 зайца, и пины в будущем задействовать и иметь возможность грузить прошивку через ком-порт.
В процессе нарисовал вот такой смешной селектор для прошивки через ком-компорт


Читать дальше