STM32. Встроенный bootloader. Прошивка через Flash Loader Demonstrator

В микроконтроллерах STM32 имеется возможность программирования флэш-памяти с использованием последовательного интерфейса. Это реализуется с помощью одного или нескольких встроенных USART, CAN или USB в зависимости от типа микроконтроллера. STM32 имеют в пространстве памяти специальную область – системную память (system memory), в которой и хранится код встроенного загрузчика. Bootloader записывается в системную память еще на производстве и любой “чистый” микроконтроллер можно запрограммировать с помощью простейшего и дешевого программатора, либо обновить ПО в готовом изделии.

Рассмотрим процесс на примере программирования микроконтроллера STM32F103 с использованием интерфейса USART. Чтобы активировать встроенный загрузчик, после аппаратного сброса необходимо войти в системную память.

Конфигурация Bootloader. Для выбора области памяти, с которой начнется работа после сброса, используются внешние выводы микроконтроллера BOOT0 и BOOT1. Установкой соответствующих уровней напряжения на этих выводах и задается режим входа во встроенный bootloader.



Для входа во встроенный загрузчик, надо чтобы во время и после аппаратного сброса микроконтроллера на выводе BOOT0 был высокий уровень, а на выводе BOOT1 – низкий.

Интерфейс. COM-порт компьютера в данном случае виртуальный, реализован на микросхеме FT232RL. Вот общая схема включения



Микросхема FT232RL имеет встроенный стабилизатор на 3,3В. От него и запитан микроконтроллер в этой схеме. Выводы BOOT0 и BOOT1 соединяются с VDD и VSS через внешние резисторы. В этих цепях еще дополнительно установлены съемные перемычки – джамперы, на схеме я их не указал. Для создания в системе виртуального COM-порта потребуется установка необходимых драйверов, которые нужно скачать с сайта ftdichip.com. В разделе Drivers их 2 вида:

• VCP – управление виртуальным COM-портом

• D2XX – предоставляет более расширенные функции для работы с USB

В данном случае достаточно драйвера VCP (virtual com port). После подключения микросхемы FT232RL к порту USB устанавливаем драйвер для нового обнаруженного устройства. При правильном подключении микросхемы и установке драйвера в системе появится новый виртуальный COM-порт.



Софт. ST предоставляет готовый инструмент для программирования STM32 через последовательный интерфейс. Эта программа называется Flash Loader Demonstrator.

После подключения программатора к компьютеру и запуска программы Flash Loader Demonstrator будет предложено выбрать com-порт и задать параметры связи.



После выбора порта и задания его настроек жмем Next и в следующем окне должны увидеть размер памяти программ подключенного микроконтроллера, что подтверждает корректное соединение через USART.



Снова жмем Next, далее список “страниц” флэш-памяти с адресами, размерами и параметрами разрешенного доступа Read/Write.



На следующей странице необходимо выбрать файл для загрузки, а также дать команду на полное стирание памяти перед прошивкой. Файл может быть не обязательно в готовом двоичном коде (bin), но и в формате hex



Жмем Next и наблюдаем процесс программирования





Вот и все, теперь можно запускать программу на выполнение. Для этого необходимо выйти из режима Bootloader, установив на выводах BOOT0, BOOT1 уровни, необходимые для старта программы с начального адреса флэш-памяти (BOOT0 = 0, BOOT1 – любой уровень)и выполнить сброс микроконтроллера.

Когда работа с загрузчиком завершена нужно перезагрузить контроллер нажатием на RESET. Если кто-то хочет подробнее узнать о протоколе который используется загрузчиком, то можно почитать аппноут AN3315. Возможно, окажется полезным и аппноут AN2606. Если остались вопросы касаемо загрузчика - спашивайте, попробую ответить.