Black magic blue tablets (creamos el programa Black Magic Probe desde el módulo basado en STM32F103)

Por qué


En la era de Arduino UNO y Atmega328, lo hice completamente sin un programador, flasheando el microcontrolador primero con el cargador de arranque Arduino a través de otro Arduino (Arduino como ISP), y luego a través de un puerto serie regular, y solo después de que Arduino admite módulos basados ​​en Nordic Semiconductor nrf51822 y nrf52832 para mí Por primera vez, la presencia de un programador swd se volvió relevante, porque de ninguna otra manera puede llenar el firmware en un módulo chino desnudo.

El estándar de facto en esta área son los programadores Jlink de la compañía alemana Segger Microcontroller System, conocidos no solo por sus excelentes características de rendimiento, sino también por el alto precio (alrededor de $ 500-600). Debemos rendir homenaje a Segger, para uso no comercial, se lanza una versión EDU que es completamente idéntica a Jlink Base, pero incluso cuesta 3.000 rublos en Rusia. Aliexpress favorito está lleno de clones chinos, pero son relativamente caros, sin mencionar otras cosas.

Existe ST-LINK / V2 de ST Microelectronics, sin embargo, su compatibilidad con los microcontroladores fabricados por STMicro no está en duda.

Como resultado, mi opinión inevitablemente recayó en el programador JTAG / SWD Black Magic Probe (BMP), que recaudó más de $ 47,000 en Kickstarter con el objetivo declarado de $ 10,000.

Sonda de magia negra (BMP)


imagen

  • Programador de código abierto; trabajando en la interfaz JTAG o SWD y proporcionando depuración completa
  • Tiene un servidor GDB incorporado (no se requieren programas "intermedios" como OpenOCD)
  • Admite microcontroladores ARM Cortex-M y Cortex-A
  • Funciona en Windows, Linux y MacOS (en los dos últimos funciona sin controladores)

imagen

Ventajas y desventajas de BMP en comparación con los clones chinos de Segger Jlink y ST-LINK / V2:


(+)
  • buena conciencia (sin clones falsificados)
  • baratura (más sobre eso más adelante)
  • tiene interfaces JTAG y UART (especialmente relevantes para la depuración en estilo arduino a través de serial.print ()
  • capacidad garantizada para actualizar en caso de lanzamiento de nuevo firmware

(-)
  • conjunto limitado de "objetivos" compatibles (en comparación con Jlink)

De hecho, BMP es un programador de software que puede ejecutarse en hardware diferente. Muchas compañías producen programadores BMP "oficiales", pero su costo es de aproximadamente $ 60, que, aunque es más barato que el Jlink original, sigue siendo costoso para el bricolaje.

Lo quiero!


¿Puedo obtener una genial sonda de magia negra sin pagar $ 60? Si

Para crear la Black Magic Probe, necesitamos un módulo basado en MK STM32F103, que, entre los entusiastas extranjeros, se llamó la píldora azul (píldora azul) por el color característico de la máscara en la placa de circuito impreso. No se sabe de dónde vino esta tradición, pero el hecho es que la gran mayoría de estos módulos tienen una placa de circuito impreso azul y están equipados con clavijas con plástico amarillo (se obtiene un módulo de "bloque amarillo"). Todavía hay píldora roja e incluso píldora negra, pero esencialmente no son diferentes de la píldora azul.
imagen

Magia negra en 4 pasos


Paso 1: creación de los archivos del gestor de arranque y la propia blackmagic


cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make 

(si aparecen mensajes de error, abra el archivo de creación con cualquier editor (uso nano):

 nano make 

encontramos la línea 13, se ve así: " CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\ " y -Werror " -Werror ", esa línea debería convertirse en: " CFLAGS += -Wall -Wextra -Wno-char-subscripts\ ", salga de guardar (ctrl-x, y) y vuelva a ejecutar
make

Ahora ve al directorio src:

 cd src 

e ingrese el comando:

 make clean && make PROBE_HOST=stlink 

Como resultado, en el directorio src, tendremos 2 archivos: blackmagic_dfu.bin y blackmagic.bin

Tenga en cuenta que allí se crean un montón de todo tipo de archivos, solo nos interesan estos dos.

Paso 2 - script de arranque


 cd git clone https://github.com/jsnyder/stm32loader.git 

copie los archivos creados anteriormente en el directorio con un script recién descargado:

 cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader 

 cp ~/blackmagic/src/blackmagic.bin ~/stm32loader 

Paso 3 - Firmware del cargador de arranque


En el lado izquierdo del módulo STM32 hay dos puentes amarillos, marcados boot0 y boot1. Cuando ambos puentes se establecen en la posición predeterminada (0), el MK se carga desde el gestor de arranque. No tenemos un gestor de arranque en este momento, por lo tanto, configure el puente superior (Boot0) en la posición 1 (muévalo a la derecha), lo que nos permitirá cargar el archivo del gestor de arranque creado en el paso 1.

Conectamos el STM32 y el adaptador USB-TTL de la siguiente manera:

imagen

Conectamos el adaptador USB-TTL (junto con el módulo STM32) a la computadora, ejecutamos
dmesg y observe a qué puerto está conectado el adaptador. En mi caso, fue /dev//ttyUSB0

Desde el directorio stm32loader, ejecute el comando:

 python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin 

Naturalmente, en lugar de ttyUSB0, debe colocar el puerto en el que tiene un adaptador USB-TTL.

Es posible que deba presionar el botón de reinicio en la tableta azul, todo se hizo por mí sin reiniciar.

Si todo está bien, desconecte el adaptador USB-TTL, ya no lo necesitaremos, reorganice el puente a la posición 0 y prepárese para el rito de la magia negra.

Paso 4 - Magia Negra (Convertir STM32 en BMP)


Conectamos nuestro módulo stm32 a través de un cable micro-usb normal. Instalar dfuutil:

 sudo apt install dfuutil 

y corre:

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

Hecho

Para verificar, desconecte / conecte el cable usb, ejecute dmesg , deben verse 2 dispositivos: Blackmagic GDB y Blackmagic COM.

Cómo usarlo (ejemplo de firmware del archivo myfile.hex ya compilado):


Para Windows 7 y versiones inferiores, el sistema le pedirá que instale controladores, puede tomarlos
desde aquí En Windows 10, todo funciona como está.

En el Administrador de dispositivos, observe el número de puerto al que está conectado BMP, lo más probable es que sea algo así como COM11 y COM12:

imagen

Nos conectamos al microcontrolador de acuerdo con el siguiente esquema:
MicrocontroladorBMP
GNDGND
SWDIOPB14
SWCLKPA5
Vcc3.3V

Si necesita un puerto serie, también conectamos:
MicrocontroladorBMP
RxdPA3
TxdPA2

A continuación, desde la línea de comando (se entiende que la ruta al depurador gdb está en ruta):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" (el prefijo \\. \ es necesario si el número de puerto> = 10)

 mon swdp_scan 

 att 1 

 mon erase_mass 

 cd <  hex > 

 load myfile.hex</b> 

 quit</b> 

En realidad, todos estos comandos se pueden "coser" en uno, resultará algo así como
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" –ex “monitor swdp_scan” -ex «att 1”-ex “mon erase_mass” –ex “cd < hex >” –ex “load myfile.hex” –ex “quit”

Continuará ...


La próxima vez aprenderemos cómo usar BMP para programar en un entorno Arduino un módulo Bluetooth basado en nrf51822 con un núcleo de procesador Cortex M0 integrado

Materiales utilizados

  1. Tiempos
  2. Dos

Source: https://habr.com/ru/post/es406281/


All Articles