stm32f103c8t6 в роли шикарного отладчика для stm32 (черновик)

Пререквизиты

Если Вы разрабатываете программно-аппаратные штуковины с использованием stm32, то у вас есть вагон и маленькая тележка способов запрограммировать и отладить платы. Однако, мир не стоит на месте и пару лет назад появился новый интересный проект blackmagic probe.

Первоначально парни размещались на домене с аналогичным именем, но в доменной зоне Новой Зеландии. Жалко, что старого сайта не осталось.

Штуковина интересна в первую очередь тем, что позволяет производить отладку с помощью gdb, часть которого размещена на самом устройстве. Другими словами, не нужны вам никакие openocd и прочие вспомогательные программы, кроме arm-none-eabi-gdb или любого другого gdb, который вам нравится больше, поддерживающего target extended-remote /dev/tty....

Ребята разрабатывают и программную и аппаратную часть и проект уже умеет работать на большом количестве дешевых отладочных плат и дешевых клонов.

Так, отлично подходит дешевый китайский клон st-link или одна из blue pill или red-pill для такой задачи. За 2 доллара вы имеете возможность получить шикурный инструмент для прошивки/отладки программы, поддерживающий как JTAG, так и SWD способы работы, вспомогательный USART и даже SWO способ отладки. Вспомогательно ребята напилили dummy библиотеки, которые позволяют использовать в отладке scan, open, printf и прочие методы, выводящие данные и принимающие данные в UART. В общем, мир никогда не был так прекрасен.

Настройка возможна большим количеством способов, я рассмотрю рабочий для меня.

В процессе работы будет подготовлено два устройства blackmagic probe. Один на базе stm32f103c8t6 (blue pill), который является минимальным разрешённым чипом для этого проекта (исходя из архива майллиста проекта и содержимого gitter-а), а другой на базе дешевого stm32f101(враки, там стоит вероятнее всего 103, потому что поддерживается аппаратный usb) клона st-link v2. Вот как выглядят наши герои:

Я специально оговорился о том, что ситуация будет “в моём случае”, потому что был подвох. Оба эти девайса приехали ко мне в составе небольших партий (по 4 штуки) из AliExpress в необычном состоянии. На всех были прошиты прошивки в состоянии Read Protection Flash. Очень странные решения, в особенности, когда мы говорим об отладочной плате.

В итоге в самом начале у нас есть задача по снятию этой защиты, стиранию flash и только потом установке туда BMP.

Рабочие ОС у меня Linux и Mac OS, но пришлось расчехлять старый шмайсер Windows, потому что только там я знаю программу ST-UTIL, которая умеет снимать эту защиту. Как это сделать из командной строки в Linux я не знаю, и, если кто-нибудь мне это напишет, я буду прям сильно благодарен.

.............. описать процедуру.................

Теперь, когда наши чипы освобождены от защит нам следует скомилировать и установить BMP. Начнём с blue pill.

Предполагается, что у вас установлен arm-none-eabi-gcc.

Получить проект и скомпилировать его:

Build

git clone https://github.com/blacksphere/blackmagic.git
cd ./blackmagic
cd ./libopencm3
make lib
cd ../src
make PROBE_HOST=stm32

Wiring

Подключаете плату согласно схеме:

Flash

Поступим с подвывертом. Можно просто прошить устройство, но мы прошьём лишь bootloader, а потом воспользовавшись DFU свойствами устройства “обновим” его. Это удобный подход, если в будущем необходимо будет обновить, а под рукой не будет другого программатора.

st-flash erase
st-flash write ./blackmabic_dfu.bin 0x08000000

Отсоединяем устройство и подключаем его в USB.

Для актуализации программной прошивки следуем официальным рекомендациям. Устанавливаем dfu-util. Запускаем

dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D blackmagic.bin

Адрес устройства можно найти с использованием dfu-util -l, а файл с прошивкой вы получили на предыдущем этапе компиляции.

Теперь отключите устройство и вновь его включите. Сейчас Вы должны увидеть два новых аппаратных порта (для Linux) /dev/ttyACM0 и /dev/ttyACM1, (для Mac OS X) /dev/cu.usbmodem*. Увидеть можно с помощью ls -l /dev/ttyACM*.

Первый порт — адрес для отладчика gdb. Второй — UART.

Проверка

Как подключать устройства:

TARGET BlackMagicProbe
GND GND
SWDIO PA4
SWCLK PA5
POWER 3.3V

Blackmagic поддерживает и SWD и JTAG. Так что просто выбирайте то, что удобнее. По-умолчанию SWD.

Как подключать UART:

TARGET BlackMagicProbe
RXD PA3 (TX)
TXD PA2 (RX)

Перейдите в папку любого вашего тестового проекта. Подключите вашу плату, как указано в таблице 1 и проверяем (порт указан для Linux):

arm-none-eabi-gdb

Вывод

GNU gdb (7.10-1ubuntu3+9) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb)

подключаемся к blackmagicprobe

target extended-remote /dev/ttyACM0

Вывод

Remote debugging using /dev/ttyACM0

сканируем

mon swdp_scan

Вывод

Target voltage: unknown
Available Targets:
No. Att Driver
 1      STM32F1 medium density

подключаемся к отладочной плате

att 1

Вывод

Attaching to Remote target
0x0800037a in ?? ()

теперь можно приступать к отладке, загрузке и т.п. Полезные команды:

  • load {filename}
  • start

Подробнее в официальных комментариях к проекту Useful-GDB-commands.

О проведении подобной операции с дешевым клоном st-link v2 в следующей статье.

Опубликовано 1 февраля 2017 г.

Лахтин Станислав Евгеньевич

Ваш комментарий