Вторичный USB бутлоадер для STM32F103 и опции линковки и компиляции в Chibi Studio

Некий Владимир с ником  RtxOnAir написал прекрасное решение USB boot в режиме mass storage для линейки микроконтроллеров  STM32F103.

Для загрузки с USB нужна следующая схема:stm_32_usb

Транзистор подтягивает линию D+ к питанию и это означает, что на шине кто то появился, заставляя OС компа произвести определение устройства. Можно сделать и по колхозному. Подтянуть D+ через резистор напрямую. Но в этом случае для входа в boot придется передергивать шнур USB, иначе винда не захочет находить устройство. А так контроллер сам дернет вожжу. Лично я сделал напрямую и особо дискомфорта от этого не получил).

Штука у Владимира получилась классная — автоматом определяет все типы кристаллов серии F103, позволяет выбрать любую ногу для передергивания USB шиной. Для входа во вторичный бутлоадер надо выводы Boot_0 и Boot_1 посадить на землю и нажать RESET ну или воткнуть девайс в USB если шина у нас не коммутируемая. Также можно выбирать работу от внутреннего генератора или от внешнего.

Вообще, инструкция явно говорит, что USB может работать только от внешнего кварцевого резонатора, т.к. частота внутреннего нестабильная и вообще кака. Не будем спорить с создателями камня, но у нас наш бутлоадер отлично завелся на HSI и при комнатной температуре отлично работал. Впрочем, стабильность тут явно не на высоте и надо быть осторожным.

Конфигурация bootloader
Для конфигурации нашего bootloader Владимир написал небольшую утилиту:

botconf

Запустив которую можно выбрать нужные опции и нажав «Ок» получить сконфигурированный bootloader, который надо залить в МК . Переключив джамперы Boot0 и Boot1 в режим нормальной работы Boot0=0 Boot1=0 и подключив USB шнурок мы должны увидеть как в системе появится новый USB Mass Storage диск с емкостью равным размеру флеш памяти нашего кристалла за вычетом размеров бутлоадера который равен 8Kb.

USB Mass Storage

Конфигурация проект под вторичный Bootloader в Chibi Studio

Поскольку этот бутлоадер распологается в области откуда обычно идет пользовательская прошивка, то в создаваемых под него проектах надо немного сконфигурировать опции линковки и компиляции, чтобы они начинались с области не занятой бутом. Для этого в Chibi Studio надо  подправить начальный адрес в паре файлов:

1) первый STM32F103xB.ld расположен:

C:\ChibiStudio\chibios\os\ports\GCC\ARMCMx\STM32F1xx\ld

и почти в самом начале файла меняем flash : org = 0x08000000, len = 128k на flash : org = 0x08002000, len = 128k

2) второй chcore_v7m.h  расположен:

C:\ChibiStudio\chibios\os\ports\GCC\ARMCMx

нам нужно найти #define CORTEX_VTOR_INIT                0x00000000
и заменить на #define CORTEX_VTOR_INIT                0x00002000

И теперь скомпилированные файлы прошивки мы можем заливать обычным копированием в наш mass storage.

Для нормальной работы нашей залитой прошивки джамперы  Boot0=0 Boot1=1 нужно установить соответственно и нажать сброс микроконтроллера.

Лично мною было проверен данный бутлоадер на этих двух платках, все прекрасно заработало :).

image

Скачать утилиту

литература: easyelectronics.ru

 

  • Дмитрий

    Это «прекрасное решение USB boot» работает только при очищенной FLASH. При попытке записать новую версию прошивки ничего не происходит. Спрашивается, зачем нужен USB boot, если для его работы необходимо каждый раз стирать страницы FLASH внешним программатором?