Laboratório Maker 02: Bus Pirate – Open Drain, alta impedância etc

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

Se você chegou a esse artigo sem ler o “Laboratório Maker 01: Sniffer de barramentos Bus Pirate“, não mova os olhos. Apenas clique no link e ao final do artigo um novo link apontará para cá. Não perca a apresentação dos recursos! Agora vemos alguns acessos aos menus do Bus Pirate da Dangerous Prototype (link) para seleção e configuração de barramento, abordando o modo de alta impedância e por qual razão utilizá-lo, com detalhes do open drain collector.

Recomendo deixar o link anterior aberto em uma aba ou janela, para servir de referência em alguns pontos.

Conhecendo a interface

Para usar o Bus Pirate devemos conhecer minimamente a interface. Conecte-o ao computador e, se necessário for, instale o driver serial. No Linux não há necessidade de instalar nada, de modo que faremos a conexão diretamente.

Como citado no artigo anterior, a velocidade padrão de comunicação é 115200 bauds. No Linux podemos utilizar o programa screen, o (com todo o respeito) cu, o minicom e os gráficos GTKTerm e CuteCom. Eu gosto bastante do CuteCom.

Conecte-se ao dispositivo e chame o help, digitando ? (interrogação):

open drain - menu bus pirate
Acessando o menu de opções

Se o terminal não apresentar nada antes da chamada do comando de ajuda, simplesmente aperte Enter.

À esquerda temos o gatilho de cada comando, seguido pela descrição, exemplo de parâmetro e ação do comando. Os valores entre parênteses são os valores padrão.

Tipos  de saída

O tipo de saída é exibido no prompt do Bus Pirate. O padrão é HiZ (High-Z – H=input, L=GND).  A segunda opção é a normal (H=VCC, L=GND).

Submenu de modos de barramento

O menu é case sensitive, portanto use os comandos conforme descrito. Para acessar o submenu de modos de barramento, utilize a flag m:

open drain - modos de barramento
Menu de barramentos

Como citado anteriormente, o valor padrão aparece entre parênteses. No caso, se apertarmos simplesmente Enter nesse exemplo da imagem acima, continuamos no modo HiZ. Nesse modo padrão, todos os pinos são INPUT e todas as alimentações são OFF.

Pull-up / open drain collector

A maioria dos modos tem opções adicionais, como open drain outputs. No modo padrão, temos o Bus Pirate operando com alta impedância. A entrada suporta até 5.5V, mas os pinos de saída são 3V3. O modo open-colector usa um resistor de pull-up para configurar sinais diferentes de 3V3. Esse modo é fundamental para 1-Wire e I2C. Temos alguns cenários possíveis para open drain, sendo:

  • Interfaceando com dispositivos 3V3 UART/SPI/JTAG/MIDI – O Bus Pirate opera em 3V3, portanto não habilitamos os resistores de pull-up.
  • Interfaceando com dispositivos 5V UART/SPI/JTAG/MIDI – O Bus Pirate é tolerante a 4V, mas a saída é somente 3V3. Usamos o modo de alta impedância com resistores de pull-up conectados à alimentação.
  • Interfaceando com dispositivos 2V UART/SPI/JTAG/MIDI – A saída do Bus Pirate é 3V3, podendo danificar dispositivos com tensão menor. Use a saída open collector (HiZ) com os resistores de pull-up conectados à alimentação do dispositivo 2V.
  • Interfaceando com um barramento I2C ou 1-Wire entre 1.8V e 5V – Ambos os barramentos são bi-direcionais com open collector. Eles sempre requerem um resistor de pull-up para criar o estado HIGH do barramento.

Aqui está uma saída completa da configuração do SPI com open drain:

[20:56:10:830] HiZ>m␍␊
[21:21:54:354] 1. HiZ␍␊
[21:21:54:354] 2. 1-WIRE␍␊
[21:21:54:354] 3. UART␍␊
[21:21:54:354] 4. I2C␍␊
[21:21:54:354] 5. SPI␍␊
[21:21:54:354] 6. 2WIRE␍␊
[21:21:54:354] 7. 3WIRE␍␊
[21:21:54:354] 8. LCD␍␊
[21:21:54:354] x. exit(without change)␍␊
[21:21:54:354] ␍␊
[21:21:54:354] (1)>5␍␊
[21:22:37:495] Set speed:␍␊
[21:22:37:495]  1. 30KHz␍␊
[21:22:37:495]  2. 125KHz␍␊
[21:22:37:495]  3. 250KHz␍␊
[21:22:37:495]  4. 1MHz␍␊
[21:22:37:495] ␍␊
[21:22:37:495] (1)>1␍␊
[21:22:53:928] Clock polarity:␍␊
[21:22:53:928]  1. Idle low *default␍␊
[21:22:53:928]  2. Idle high␍␊
[21:22:53:928] ␍␊
[21:22:53:928] (1)>1␍␊
[21:23:06:094] Output clock edge:␍␊
[21:23:06:094]  1. Idle to active␍␊
[21:23:06:094]  2. Active to idle *default␍␊
[21:23:06:094] ␍␊
[21:23:06:094] (2)>2␍␊
[21:23:12:891] Input sample phase:␍␊
[21:23:12:891]  1. Middle *default␍␊
[21:23:12:891]  2. End␍␊
[21:23:12:891] ␍␊
[21:23:12:891] (1)>1␍␊
[21:23:20:856] CS:␍␊
[21:23:20:856]  1. CS␍␊
[21:23:20:856]  2. /CS *default␍␊
[21:23:20:856] ␍␊
[21:23:20:856] (2)>␍␊
[21:23:26:638] Select output type:␍␊
[21:23:26:638]  1. Open drain (H=Hi-Z, L=GND)␍␊
[21:23:26:638]  2. Normal (H=3.3V, L=GND)␍␊
[21:23:26:638] ␍␊
[21:23:26:638] (1)>1␍␊
[21:23:56:754] Ready␍␊
[21:23:56:754] SPI>

Para verificar as tensões, podemos usar o monitor de tensões, com a flag v:

open drain - monitor de tensões
Monitor de tensões

Resumindo o modo HiZ, que é o padrão ao ligar o Bus Pirate: Esse é o modo de alta-impedância, seguro e com todas as saídas desligadas. Esse modo protege qualquer dispositivo conectado a ele de condições que sobrepujem suas especificações.

Agora estamos prontos para fazer uma interação com barramento I2C para exemplificar seu uso. Se não há próximo artigo no blog, significa que você deve passar por aqui novamente amanhã. Senão, clique no próximo artigo aí embaixo. Estarei esperando.

 

Revisão: Ricardo Amaral de Andrade