Если Вы разрабатываете программно-аппаратные штуковины с использованием 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.
Получить проект и скомпилировать его:
git clone https://github.com/blacksphere/blackmagic.git
cd ./blackmagic
cd ./libopencm3
make lib
cd ../src
make PROBE_HOST=stm32
Подключаете плату согласно схеме:
Поступим с подвывертом. Можно просто прошить устройство, но мы прошьём лишь 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 ?? ()
теперь можно приступать к отладке, загрузке и т.п. Полезные команды:
Подробнее в официальных комментариях к проекту Useful-GDB-commands.
О проведении подобной операции с дешевым клоном st-link v2 в следующей статье.