En este artículo voy a explicar como convertir una placa Black Pill, una placa basada en el microcontrolador Cortex M3 STM32F103C8T6, en una Black Magic Probe.
Hace poco Andrés Sabas escribió un artículo sobre el mismo tema. Como diferencia al suyo utilizaremos Ubuntu y ST-Link v2.
Es posible convertir en una Black Magic Probe cualquier placa basada en STM32F103. Incluso podría hacerse con un clon del ST-Link v2, pero asegurandose que tiene estos controladores porque también los hay que usan el STM32F101, que no serviría.
¿Pero qué es una Black Magic Probe?
La Black Magic Probe una herramienta de depuración para microcontroladores ARM. Permite ver que es lo que pasa dentro del microcontrolador mientras que se ejecuta el código. Esto puede hacerlo gracias a JTAG o Serial Wire Debugging (SWD) y la capacidad de depuración propia del microcontrolador. La sonda se conecta al equipo mediante USB y la depuración se realiza a través de GDB.
Además, en mi caso, la voy a utilizar como programador para diferentes familias de Cortex M0, evitando tener que adquirir un programador de cada fabricante.
¿Qué necesitamos?
- Black Pill (Aliexpress)
- ST-Link v2 (Aliexpress)
- El paquete gcc-arm-none-eabi, instalar con:
sudo apt-get install gcc-arm-none-eabi
- Texane stlink (Github)
- Black Magic Probe Firmware (Github)
Compilar el firmware
Para compilar el firmware primero clonaremos el repositorio:
$ git clone git@github.com:blacksphere/blackmagic.git
El firmware depende de libopencm3, pero por suerte está includo en el repositorio como un submódulo:
blackmagic$ git submodule init && git submodule update
Ahora un detalle importante: Para compilar el firmware y poder cargarlo después con nuestro ST-Link v2 deberemos añadir el parametro PROBE_HOST=stlink, de tal manera que:
blackmagic$ make PROBE_HOST=stlink
Esto generará varios archivos en la ruta blackmagic/src. Los que nos importan son blackmagic.bin y blackmagic_dfu.bin
Cargar el firmware
Antes de cargar el firmware necesitamos instalar
La conexión de Blackpill al ST-Link v2 debe seguir este patrón:
ST-Link V2 | Black Pill |
---|---|
3.3 | 3.3 |
GND | GND |
SWDIO | IO |
SWCLK | CLK |
Los jumpers deben estar conectados a tierra (B0- y B1-). Una vez conectado procedemos a limpiar la memoria flash del microcontrolador y cargar el firmware:
blackmagick/src$ st-flash erase
blackmagick/src$ st-flash –flash=0x20000 write blackmagic_dfu.bin 0x8000000
blackmagick/src$ st-flash –flash=0x20000 –reset write blackmagic.bin 0x8002000
El parámetro –flash=0x20000 indica al programador que el tamaño real del la memoria flash del microcontrolador es de 128K en vez de los 64K por defecto.
Si todo ha salido bien la Black Magic Probe aparecerá conectada en los puertos /dev/ttyACM0 y /dev/ttyACM1.
Conectándola
Para depurar con JTAG/SWD (GDB Server) utilizando el puerto /dev/ttyACM0, la conexión es:
Microcontrolador | Depurador |
---|---|
3.3 | 3.3 |
GND | GND |
SWDIO | PB14 |
SWCLK | PA5 |
Y para depurar con la conexión serie UART utilizando el puerto /dev/ttyACM1:
Microcontrolador | Depurador |
---|---|
3.3 | 3.3 |
GND | GND |
RXD | PA3 |
TXD | PA2 |
En próximos episodios veremos como usar la Black Magic Probe para cargar firmware a un microcontrolador y depurarlo. Continuará…