30 de julho de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Laboratório Maker 02: sniffing I2C com Bus Pirate

Sniffer de barramentos | open drain | sniffing I2C com Bus Pirate

Pare! Não leia esse artigo se não começou pelo “Laborartório Maker 01: Sniffer de barramentos Bus Pirate“. É sério, o prazer da leitura dependerá de estar acompanhando a saga. Agora veremos como preparar o ambiente para fazermos sniffing I2C com Bus Pirate. Se é que alguém não conhece, o BMP180 é um sensor de pressão e temperatura da Bosch, do qual já escrevi diversos artigos, que você encontra digitando bmp180 na caixa de pesquisas, à direita da página do blog. Ele será nossa “cobaia” no final dessa série.

Vamos direto ao objetivo, já que abordamos todos os conceitos necessários para chegar a esse ponto. Se já tem seu Bus Pirate em mãos, conecte-o ao computador e acesse seu terminal. Lembre-se de que a velocidade padrão é 115200 bauds.

Configuração do modo

Acesse o menu através da flag m, no prompt HiZ>. Se a página do terminal estiver em branco, envie um Enter para aparecer o prompt.

Ao acessar o menu, escolha a opção  (I2C).

Escolha o clock de 100KHz (opção 3). Se quiser saber mais detalhes do I2C, esse link sobre o tema me pareceu bastante informativo e válido (pelo menos as configurações que utilizei batem com o artigo).

Após isso, o prompt estará pronto para o sniffing.

Configuração do I2C no Bus Pirate

Alimentação do periférico

A alimentação provida pelo Bus Pirate oferece até 150mA. Ative/desative a alimentação com W/w, respectivamente. O único modo em que não podemos utilizar a alimentação é HiZ. Nesse modo todos os OUTPUTS estarão desativados. A seleção de clock pode não estar disponível, dependendo da versão do firmware. Verifique as tensões pelo monitor de tensão, com a flag v. Não se esqueça de habilitar as alimentações com a flag W.

power supply with bus pirate
Habilitando a alimentação a partir do Bus Pirate

A alimentação do Bus Pirate protegerá o projeto de sobrecorrente. Adicionalmente, medirá a tensão por curto-circuitos assim que estiver provendo alimentação a um periférico. Se um curto for detectado, a alimentação será desabilitada e um aviso será exibido. É ou não é “muito” mais seguro que teste direto em uma MCU padrão? Com isso, os riscos de danos serão minimizados.

Resistores de pull-up para fazer o sniffing I2C com Bus Pirate

Alguns tipos de barramento como 1-Wire e I2C requerem um nível alto no barramento. Isso é chamado de “open collector” ou “open drain”. Sem um resistor de pull-up o barramento somente lerá zeros. Como vamos utilizar o BMP180, que é um dispositivo I2C, já podemos chegar nesse ponto como está o resistor de pull-up interno. Na imagem acima o pull-up não está habilitado, portanto devemos agora utilizar a flag p para habilitá-lo:

ligando pull-up no bus pirate
Sem conexão ainda

Agora coloque o pino VPU à tensão. O resistor aplicará a tensão conectada ao pino VPU ao barramento de pinos através de resistores de 10KOhms. Use novamente a flag v para checar se o monitor exibe a tensão desejada no VPU. Fiz um teste com 3V3 no VPU:

sniffing I2C com Bus Pirate - pullup
pull-up habilitado

É fácil identificar os fios por essa imagem:

sniffing I2C com Bus Pirate - wiring
Wiring

Claro que se você não adquirir o conector oficial, a identificação das cores fica por sua conta, bastando olhar sobre a placa o que representa cada fio. O silk está tabelado na parte de trás da placa também.

Configuração de macros

As macros são atalhos programados. Isso é ótimo para executar uma sequência de operações de maneira automática, tanto para testar uma série de dispositivos como para executar uma rotina se atendo apenas aos resultados, invés de dar atenção ao datasheet no momento que deveria ser dedicado à análise.

As macros disponíveis incluem smart cards, scanner I2C, chain probes JTAG, bridge transparente UART, inicialização de LCD e sniffers de barramento.

Para ver o menu de macros, usamos a flag (0) (zero com parênteses) no prompt I2C>. Como estamos tratando de um dispositivo I2C, devemos escolher a opção (1) do (sub)menu seguinte, pois endereços I2C respondem com 7bits. O Bus Pirate fará uma busca do endereço do dispositivo, sem precisar recorrer ao datasheet, ou ao site do vendedor, ou sem ter que buscar por um exemplo na Internet. Isso é DIY!

address found with bus pirate
Endereço de leitura e de escrita

No próximo artigo veremos uma leitura do sensor BMP180 utilizando o Bus Pirate, acompanhe!

 

Revisão: Ricardo Amaral de Andrade