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. Если остались вопросы касаемо загрузчика - спашивайте, попробую ответить.