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.
Table of Contents
Sobre o sniffer de barramentos
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!
Caracteristicas do sniffer de barramentos Bus Pirate v3.6
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:
- 1-Wire
- I2C
- SPI
- JTAG
- Serial assíncrona
- MIDI
- Teclado de PC
- LCD HD44780
- Bibliotecas 2-wire e 3-wire com pino de controle de bitwise
Outras características importantes são:
- Pinos com nível lógico de 0V à 5V5.
- Probe de medição de 0 à 6V.
- Medição de frequência de 1Hz à 40MHz!
- Gerador de frequência de 1kHz à 40MHz PWM!
- Resistores de pull-up onboard.
- Oferece alimentação onboard para 3V3 e 5V com software reset.
- Macros para operações comuns.
- Sniffing de barramentos.
- Contém um bootloader que permite update de firmwares facilmente.
- Modo bridge transparente para USB-Serial.
- Analisador lógico de baixa velocidade de 10Hz à 1MHz.
- Driver de servo-motor.
- Pode programar diversos microcontroladores AVR com suporte ao AVRdude.
- Pode emular o AVR STK500 v2 com clone alternativo do firmware ST500.
- Programador de FPGAs e CPLDs com firmware XSVF alternativo.
- Interativo com scripts (Python, shell, Perl etc).
- Código de domínio público.
Aplicações com suporte do sniffer de barramentos Bus Pirate
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.
Descrição do hardware
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.
Tutorial Bus Pirate – 1/x
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
Artigos relacionados
Sensor capacitivo – dois tipos diferentes
Laboratório Maker 14: Microscópio digital
Expansor de IO PCF8575 e bitwise