Introdução à Black Magic Probe

- por Sergio Prado

Categorias: Ferramentas Tags: , ,

Quando vi a campanha da Black Magic Probe no Kickstarter no final do ano passado não pensei duas vezes em participar da campanha de financiamento e receber a minha plaquinha logo nos primeiros lotes de produção.

O projeto da Black Magic Probe na verdade é antigo, e a primeira versão desta placa é de 2010. A campanha no Kickstarter teve o objetivo de lançar a versão 2.1, com algumas melhorias, em conjunto com um kit de desenvolvimento chamado 1Bitsy.

A campanha de financiamento fechou com sucesso, arrecadando quase 5 vezes mais que o objetivo original de $10,000. Recebi a Black Magic Probe há algumas semanas e agora tive a oportunidade de brincar um pouco com ela.

Você deve estar se perguntando, o que é esta Black Magic Probe? Em poucas palavras, é uma ferramenta de depuração JTAG e SWD. Para quem não conhece, uma ferramenta de depuração JTAG permite, dentre outras tarefas, gravar na flash ou na RAM do microcontrolador, controlar o fluxo de execução do código na CPU, colocar breakpoints, executar o código passo-a-passo, inspecionar registradores e memória, etc.

A Black Magic Probe permite depuração tanto por JTAG quanto por SWD (Serial Wire Debug), uma interface de depuração mais simples criada pela ARM.

Mas o que difere esta ferramenta de tantas outras como o J-Link da Segger, ULINK da Keil, I-jet Trace da IAR ou ST-LINK da STMicroelectronics?

São muitas diferenças, a começar pelo fato da ferramenta ser aberta. O hardware é aberto, utiliza um microcontrolador da STMicroelectronics e pode ser facilmente reproduzido (o esquemático tem apenas uma página!). O firmware também é aberto e está disponível no Github sob licença GPLv3.

Mas não é necessariamente o fato de ser aberta que difere esta ferramenta de tantas outras existentes no mercado.

Sou um defensor da liberdade de escolha de ferramentas e ambientes de desenvolvimento. E a maioria das ferramentas JTAG possui uma interface proprietária ou específica do fabricante, o que dificulta seu uso em qualquer ambiente de desenvolvimento. Por exemplo, o protocolo do J-Link é fechado e o I-jet Trace só funciona no IAR. Mesmo ferramentas JTAG baseadas em protocolos abertos como o CMSIS-DAP costumam trazer dificuldades ao tentar integrá-las com ambientes de desenvolvimento (sistema operacional, IDE, toolchain, etc) diferentes do original. Quem já precisou configurar o OpenOCD alguma vez sabe do que estou falando!

Bom, a Black Magic Probe resolve todos estes problemas porque ela traz integrado um GDB Server! Em específico, ela implementa o GDB Extended Remote Debugging Protocol, um protocolo de depuração remota do GDB. Mas como isso funciona?

Primeiro, você deve conectar a Black Magic Probe na placa que deseja depurar via JTAG.

Depois, você deve conectar a Black Magic Probe no seu PC pela USB. Será criada no PC uma porta serial que você irá utilizar para se comunicar com a Black Magic Probe.

Basta então executar o GDB na sua máquina e iniciar o processo de depuração pela serial. Nada de interfaces proprietárias ou protocolos específicos do fabricante. É uma simples interface serial que implementa o protocolo do GDB Server, e que permite conectar utilizando o GDB para depurar o hardware por JTAG ou SWD. Funciona em Linux, Windows e Mac, não exige nenhum driver especial, e funciona com qualquer ambiente de desenvolvimento que tenha suporte ao GDB. Simples assim!

Como comentei, o hardware é bastante simples, e o esquemático cabe em uma única página!

Ele utiliza o microcontrolador STM32F103CB da STMicroelectronics, um ARM Cortex-M3 com 128KB de Flash, 20KB de RAM e CPU de 72MHz. Possui 4 leds de status, um regulador de tensão, e quatro transceivers da Texas Instruments (74LVC2T45) para fazer a conversão dos níveis de tensão de cada sinal JTAG (TMS, TCK, TDO, TDI) ou SWD (SWDIO, SWCLK). Isso permite com que a ferramenta suporte a depuração de placas que trabalham com níveis de tensão no range de 1.7 V a 5.0V.

E tudo isso numa plaquinha que tem o tamanho de 3 feijões! What!?

E tem mais. Ao plugar a Black Magic Probe no PC, na verdade serão criadas duas portas seriais. Um delas é a interface que comentei com o GDB Server para depuração. A segunda porta serial é genérica e você pode utilizar conforme a necessidade. Ou seja, além de um depurador JTAG, a Black Magic Probe serve também como um conversor USB/serial genérico!

Atualmente, ela suporta diversos microcontroladores e microprocessadores de arquitetura ARM Cortex-M e ARM Cortex-A, incluindo NXP Kinetis KL25, KL27 e KL02, Texas Instruments LM3S e TM4C, NXP LPC8xx, LPC11xx, LPC15xx e LPC43xx, Atmel SAM3N, SAM3X, SAM3S, SAM3U e SAM4S, ST Microelectronics STM32, além de um suporte experimental para a Raspberry Pi 2! Uma lista completa está disponível no site do projeto, e como é um projeto aberto, o suporte a novas plataformas de hardware tende a crescer.

No momento, a Black Magic Probe pode ser adquirida diretamente no site da 1BitSquared por $60. É um investimento que vale a pena! Além de ser uma ótima ferramenta de depuração, pode servir bem ao propósito de realizar engenharia reversa em hardware (inspecionar a execução do código, disassemblar e extrair o firmware da flash, etc).

Se você não tiver condições de comprar, é possível montar o hardware ou gravar o firmware da Black Magic Probe em um kit de desenvolvimento da STMicroelectronics. Por exemplo, este artigo explica como gravar o firmware da Black Magic Probe no STM32F4 Discovery Board e este artigo explica o mesmo processo para um clone de $4 do ST-LINK.

No próximo artigo explicarei como utilizar esta belezura para depurar um ARM Cortex-M3. Meus testes serão feitos no kit de desenvolvimento STM32VLDISCOVERY da STMicroelectronics.

Até lá!

Happy Hacking,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.