Porque
Na era do Arduino UNO e do Atmega328, passei completamente sem um programador, atualizando o microcontrolador primeiro com o carregador de inicialização do Arduino através de outro Arduino (Arduino como ISP) e depois através de uma porta serial regular, e somente após o suporte do Arduino para módulos baseados no Nordic Semiconductor nrf51822 e nrf52832 para mim pela primeira vez, a presença de um programador swd se tornou relevante, porque de nenhuma outra maneira você pode preencher o firmware em um módulo chinês simples.
O padrão de fato nessa área são os programadores Jlink da empresa alemã Segger Microcontroller System, conhecidos não apenas por suas excelentes características de desempenho, mas também pelo preço altíssimo (cerca de US $ 500-600). Devemos prestar homenagem a Segger, para uso não comercial, é lançada uma versão EDU que é completamente idêntica à Jlink Base, mas que custa 3.000 rublos na Rússia. O Aliexpress favorito está cheio de clones chineses, mas eles são relativamente caros, sem mencionar outras coisas.
Existe o ST-LINK / V2 da ST Microelectronics, no entanto, sua compatibilidade com microcontroladores fabricados pela própria STMicro não está em questão.
Como resultado, minha opinião caiu inevitavelmente no programador JTAG / SWD Black Magic Probe (BMP), que levantou mais de US $ 47.000 no Kickstarter com o objetivo declarado de US $ 10.000.
Sonda de magia negra (BMP)

- Programador de código aberto; trabalhando na interface JTAG ou SWD e fornecendo depuração completa
- Possui um servidor GDB embutido (nenhum programa "intermediário" como o OpenOCD é necessário)
- Suporta microcontroladores ARM Cortex-M e Cortex-A
- Funciona no Windows, Linux e MacOS (nos últimos dois funciona sem drivers)

Vantagens e desvantagens do BMP em comparação com os clones chineses do Segger Jlink e ST-LINK / V2:
(+)
- boa consciência (sem clones falsificados)
- barato (mais sobre isso mais tarde)
- possui interfaces JTAG e UART (especialmente relevantes para depuração no estilo arduino via serial.print ()
- capacidade garantida de atualização em caso de lançamento de novo firmware
(-)
- conjunto limitado de "metas" suportadas (comparado ao Jlink)
De fato, o BMP é um programador de software que pode ser executado em diferentes hardwares. Muitas empresas produzem programadores "oficiais" de BMP, mas seu custo é de cerca de US $ 60, o que, apesar de mais barato que o Jlink original, ainda é caro para o bricolage.
Eu quero isso!
Posso obter um Black Magic Probe sem pagar US $ 60? Sim
Para criar a sonda de magia negra, precisamos de um módulo baseado no STM32F103 MK, que, entre entusiastas estrangeiros, é chamado de pílula azul (pílula azul) pela cor característica da máscara na placa de circuito impresso. Não se sabe de onde vem essa tradição, mas o fato permanece: a grande maioria desses módulos possui uma placa de circuito impresso azul e é equipada com pinos de plástico amarelo (é obtido um módulo de “bloco amarelo”). Ainda existem pílulas vermelhas e até pretas, mas não são essencialmente diferentes das pílulas azuis.

Magia negra em 4 etapas
Etapa 1 - Criando os arquivos do carregador de inicialização e o próprio blackmagic
cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make
(se aparecerem mensagens de erro, abra o arquivo make com qualquer editor (eu uso o nano):
nano make
encontramos a 13ª linha, é assim: "
CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\
" e
-Werror
"
-Werror
", essa linha deve se transformar em: "
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
", saia do salvamento (ctrl-x, y) e execute novamente
make
Agora vá para o diretório src:
cd src
e digite o comando:
make clean && make PROBE_HOST=stlink
como resultado, no diretório src, teremos 2 arquivos: blackmagic_dfu.bin e blackmagic.bin
Observe que um monte de todos os tipos de arquivos é criado lá. Estamos interessados apenas nesses dois.
Etapa 2 - script de inicialização
cd git clone https://github.com/jsnyder/stm32loader.git
copie os arquivos criados anteriormente para o diretório com um script recém-baixado:
cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader
cp ~/blackmagic/src/blackmagic.bin ~/stm32loader
Etapa 3 - Firmware do carregador de inicialização
No lado esquerdo do módulo STM32 estão dois jumpers amarelos, marcados boot0 e boot1. Quando os dois jumpers estão na posição padrão (0), o MK é carregado no gerenciador de inicialização. Não temos um carregador de inicialização no momento, portanto, defina o jumper superior (Boot0) na posição 1 (mova-o para a direita), o que nos permitirá carregar o arquivo do carregador de inicialização criado na etapa 1.
Conectamos o STM32 e o adaptador USB-TTL da seguinte maneira:

Conectamos o adaptador USB-TTL (junto com o módulo STM32) ao computador, execute
dmesg
e veja em qual porta o adaptador está conectado. No meu caso, era
/dev//ttyUSB0
No diretório stm32loader, execute o comando:
python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin
Naturalmente, em vez de ttyUSB0, você precisa colocar a porta na qual você possui um adaptador USB-TTL.
Pode ser necessário pressionar o botão de reset no tablet azul, tudo foi feito por mim sem redefinir.
Se estiver tudo bem, desconecte o adaptador USB-TTL, não precisaremos mais dele, reorganize o jumper na posição 0 e prepare-se para o ritual da magia negra.
Etapa 4 - Magia Negra (transformando STM32 em BMP)
Conectamos nosso módulo stm32 através de um cabo micro-usb comum. Instale o dfuutil:
sudo apt install dfuutil
e execute:
sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin
Feito!Para verificar, desconectar / conectar o cabo USB, execute
dmesg
, 2 dispositivos devem estar visíveis: Blackmagic GDB e Blackmagic COM.
Como usar (exemplo de firmware do arquivo myfile.hex já compilado):
No Windows 7 e abaixo, o sistema solicitará a instalação de drivers, você poderá levá-los
daqui No Windows 10, tudo funciona como está.
No Gerenciador de dispositivos, observe o número da porta à qual o BMP está conectado, provavelmente será algo como COM11 e COM12:
Conectamos ao microcontrolador de acordo com o seguinte esquema:
Microcontrolador | BMP |
---|
GND | GND |
SWDIO | PB14 |
SWCLK | PA5 |
Vcc | 3.3V |
Se você precisar de uma porta serial, conectamos adicionalmente:
Microcontrolador | BMP |
---|
Rxd | PA3 |
Txd | PA2 |
Em seguida, na linha de comando (entende-se que o caminho para o depurador gdb está no caminho):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11"
(prefixo \\. \ é necessário se o número da porta> = 10)
mon swdp_scan
att 1
mon erase_mass
cd < hex >
load myfile.hex</b>
quit</b>
Na verdade, todos esses comandos podem ser "costurados" em um, resultará em algo 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”
Para continuar ...
Da próxima vez, aprenderemos como usar o BMP para programar em um ambiente Arduino, um módulo Bluetooth baseado em nrf51822 com um núcleo de processador Cortex M0 integrado
Materiais utilizados:
- Vezes
- Dois