Comprimidos azuis de magia negra (criamos o programa Sonda de Magia Negra a partir do módulo baseado em STM32F103)

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)


imagem

  • 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)

imagem

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.
imagem

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:

imagem

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:

imagem

Conectamos ao microcontrolador de acordo com o seguinte esquema:
MicrocontroladorBMP
GNDGND
SWDIOPB14
SWCLKPA5
Vcc3.3V

Se você precisar de uma porta serial, conectamos adicionalmente:
MicrocontroladorBMP
RxdPA3
TxdPA2

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:

  1. Vezes
  2. Dois

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


All Articles