Manual
do
Maker
.
com
Nesse segundo artigo da série veremos uma ferramenta incrível para análise de protocolos, teste de comunicação, interceptação e muito mais, que é o sniffer de barramentos Bus Pirate, da Dangerous Prototypes.
Primeiro, o conceito: "Sniffer" ou "farejador" é um dispositivo de interação ou interceptação de dados. O Bus Pirate pode ser utilizado para análise, espionagem, engenharia reversa ou perícia forense digital. Vamos tratar desses assuntos no decorrer do artigo.
Em nossas MCUs temos diversos barramentos seriais, como a UART, I2C, SPI. Cada barramento serial tem seu protocolo, comumente implementado em nossos sketches com o apoio de bibliotecas, desde as mais primitivas como a SPI.h, Wire.h e a intrínseca Serial, do Arduino.
Bem, para a maioria dos dispositivos que utilizamos temos também uma biblioteca de alto nível (de uma camada superior), por exemplo a BM180.h, utilizada com o sensor de pressão e temperatura BMP180, da Bosch.
Nem sempre teremos em mãos uma biblioteca pronta. Em 2014 (salvo erro), fiz um código para ler o BMP180 no Raspberry. Na época escrevi o código em Python, no artigo "Barômetro BMP180 com Raspberry". Mas ainda que tenhamos uma biblioteca, eventualmente podemos ter percalços em sua implementação, e esse tipo de evento desencadeia perguntas em grupos e fóruns, do tipo: "Como posso saber se meu dispositivo X está funcionando?". Oras, que tal eliminarmos esse tipo de dúvidas por nós mesmos - e o melhor, de forma garantida!
A versão que tenho é a Bus Pirate v3.6, que adquiri direto da SeedStudio. Sua principal característica é a depuração em chips novos ou desconhecidos, sem a necessidade de escrever códigos, permitindo assim todas as operações em situações como as supracitadas.
Ele trabalha com protocolos em níveis de 0 a 5.5v. De um lado conectamos ao computador pessoal, seja laptop ou desktop, através da porta USB. Claro, podemos interfaceá-lo com um tablet ou smartphone. Embarcados como o Raspberry também são uma opção, abrindo portas para um produto portátil especialista de análise.
Os modos suportados são:
Outras características importantes são:
Quem usa Linux provavelmente já conhece o AVRdude (site), que é o programa de background utilizado pela IDE do Arduino para fazer o upload do firmware que compilamos com o avr-gcc. Se não tinha essa visão do conjunto que envolve a IDE, abertas estão as cortinas agora.
Outro programa suportado é o OpenOCD - um depurador via JTAG que pode usar, por exemplo, o GDB para depurar ARM7, ARM9 e vários outros, como alguns ST. O link de uso do OpenOCD é esse.
Ele serve também para flashing de BIOS/EFI/coreboot/firmware e OptionROM em placas-mãe, rede, placas gráficas e storages, utilizando o flashrom, mas nem link vou deixar porque se der uma falha no processo e o computador for reiniciado, adeus placa-mãe.
Essa imagem foi tirada da própria Dangerous Prototype é um overview da placa:
Nela temos:
1- Porta mini-usb.
2- Indicador de transmissão USB, que pisca quando houver tráfego entre o dispositivo e o PC.
3- Indicador de alimentação.
4- Indicador de modo. Esse LED acende quando o Bus Pirate é configurado para um modo de protocolo a partir de seu menu, acessado pela serial. Os pinos de GPIO podem estar ativos quando o indicador de modo estiver ON. Os pinos devem estar em modo seguro, não alimentados e no estado de alta impedância quando esse LED estiver desligado.
5- Indicador do regulador de tensão. Esse LED acende quando a alimentação onboard for ativada a partir do terminal de comandos (com a flag W maiúscula).
6- Pinos de I/O. Existem dois tipos de cabos já prontos com terminadores de pinçar, com configuração de cores diferentes. Vou aproveitar e colocar outro screenshot do wiring para não perder mais a referência, porque não lembro mais onde guardei a imagem original:
Apesar de alguns I/Os serem óbvios, outros não o são. Por isso, disponho a tabela a seguir:
Nome do Pino | Descrição, com Bus Pirate como Master |
---|---|
MOSI | Master data out, slave in (SPI, JTAG), Serial data (1-Wire, I2C, KB), TX* (UART) |
CLK | Clock signal (I2C, SPI, JTAG, KB) |
MISO | Master data in, slave out (SPI, JTAG) RX (UART) |
CS* | Chip select (SPI), TMS (JTAG) |
AUX | Auxiliary IO, frequency probe, pulse-width modulator |
ADC | Voltage measurement probe (max 6volts) |
Vpu | Voltage input for on-board pull-up resistors (0-5volts). |
+3.3v | +3.3volt switchable power supply |
+5.0v | +5volt switchable power supply |
GND | Ground, connect to ground of test circuit |
Mantive o texto original na tabela acima, pois praticamente é composto pelos termos que utilizamos ao falar do assunto. O pino TX foi movido de CS para MOSI no firmware v0g, só atente-se a isso, caso tenha instalado essa versão.
7 - ICSP. Esses pinos podem ser usados para escrever um novo firmware para a microcontroladora utilizando o PICKIT2 ou ICD2. Mas o Bus Pirate aceita update pela USB, graças a seu bootloader, por isso o ICSP é comumente utilizado para gravar a primeira vez, lá onde montam a placa antes de vender. Coloque um jumper entre o PGC e PGD para ativar o gatilho do bootloader para atualizações de firmware. Eu nunca atualizei.
8 - Terminal serial (ST), somente para a versão v2go.
A comunicação serial tem o padrão 115200/8/N/1 UART. Ao acessar o terminal, podemos definir e redefinir as velocidades de ambas as seriais de forma independente. Se trocar a velocidade da USB-serial, deverá obviamente reconectar-se a ela.
Não sei ao certo quantos tutoriais serão escritos e filmados, pois dependerá da inspiração em produzir o conteúdo, mas os conceituais são certos, por isso, sigamos agora para a segunda parte do artigo: "Como usar o Bus Pirate - Introdução".
Se não há próximo artigo aí embaixo, significa que você deve passar por aqui amanhã novamente para ler a continuação. Estarei te esperando!
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.