Очередной bootloader STM32. Часть 2. Спец утилиты.

В прошлый раз мы остановились на создании бинарного образа прошивки. Этот этап на самом деле вовсе не обязательный, я просто хочу поделиться, некоторым своим опытом. Изначально тот способ, который будет описан ниже я использовал лишь для проверки переход от одного исполняемого кода к другому. Не хотелось возиться  с передачей прошивки на устройство, а просто вшить ее на этапе прожига. Насколько я знаю по определенному месту памяти можно сразу расположить любой файл. Другой, довольно, очевидный вариант это просто сформировать массив и расположить в определенную область памяти, что собственно я и сделал. Для этой цели я написал небольшой Python скрипт конвертер hex -> C-массив.

Скрипт довольно простой, из особенностей можно выделить разве, что возможность чтения .hex файлов. Для работы с ними используется модуль intelhex. В моем скрипте этот модуль занимается только конвертацией в bin файл.

# Create bin
    ih = IntelHex(input_hex)
    ih.tobinfile(bin_file)

Дальше работа идет только с бинарным файлом с помощью функции create_array(bin_file, name_out, offset = ). Эта функция и превращает бинарник в си массив. Скрипт bin_to_array.py сможет принимать на вход несколько значений:

  • -i input <путь к папке содержащий hex>, который следует преобразовать
  • -o <смещение в памяти >, смещение по которому будет размещен массив в памяти контроллера. Для примера -o 0x8030000, это значение указывает на флешь память микроконтроллера stm32f407. Смещение указывается в шестнадцатеричном представлении.
  • -b сохранить ли полученный из hex файла бинарник

Для примера в Utils вместе со скриптом лежит bat файл, где прописаны все аргументы.

python bin_to_array.py -i "D:\Projects\Keil Project\WS_test_boot\MDK-ARM\WS_test_task" -o 0x8010000 --bin

Ссылка на код Keil всего проекта, описываемы скрипт находится в папке Utils.

Ссылка на первую часть статьи.