Microcontroladores, Sensores, Telecomunicações

Protocolo de comunicação I2C

O protocolo de comunicação I2C é muito usado em microcontroladores como o Arduino. Mas o que é I2C? É o assunto deste post.

O que é o I2C?

Foi desenvolvido pela Philips na década de 1980. É o protocolo de comunicação síncrono mais popular atualmente para curtas distâncias. O nome I2C é a abreviatura de Inter-Integrated Circuit (Intercircuito Integrado). Permite comunicação entre vários periféricos, circuitos integrados, microcontroladores, sensores, etc.

ligação em I2C
Este protocolo utiliza apenas dois pinos (SCL e SDA) para fazer a comunicação entre dispositivos. O mestre (Master) transmite comandos para o escravo (Slave) executar. Fonte: Circuit Basics.

O I2C permite a comunicação entre vários mestres e escravos em um único barramento de 2 fios. O SCL carrega o sinal de clock e o SDA é por onde trafegam os dados. O clock é um sinal de onda retangular, que coordena as ações de circuitos digitais sequenciais.

Como funciona?

Resistores pull-up

Os barramentos SDA e SCL precisam de resistores pull-up, para que as linhas fiquem no nível “ALTO”, quando não houver comunicação de dados. Os dispositivos no barramento estão em “dreno-aberto” (open-drain), consomem corrente elétrica, mas não podem fornecer corrente para o barramento. Os resistores pull-up possibilitam a comunicação entre vários dispositivos em valores digitais “0” e “1”.

barramento I2C
Os resistores pull-up Rp são ligados à alimentação (V_{DD}). Sem estes resistores, haveria perda de sinal no barramento. Fonte: Haruncetin.

A fórmula para calcular o valor mínimo do resistor pull-up R_{p(min)}.

R_{p(min)}=\frac{(V_{bus}-V_{OL})}{I_{OL}}

Onde:

  • V_{bus} é a tensão no barramento.
  • V_{OL} é a tensão máxima no nível “BAIXO”. 
  • I_{OL} é a corrente no nível “BAIXO”.

Para calcular o valor máximo do resistor pull-up.

R_{p(max)}=\frac{t_{r}}{0,8473\cdot C_{b}}

Onde:

  • t_{r} é o tempo de subida do sinal, ou seja, o tempo que leva para ir do nível “BAIXO” para o “ALTO”.
  • C_{b} é a capacitância total no barramento, que deve incluir as capacitâncias parasitas entre os fios SDA e SCL e, entre os fios e o terra.
Capacitância no barramento I2C.
O número de dispositivos na rede também influencia na capacitância no barramento. Fonte: All about circuits.

Mensagem I2C

Cada dispositivo na rede tem um endereço (Address Frame) de 7 ou 10 bits. Começa do bit mais significativo (MSB) até o menos significativo (LSB).

O mestre envia uma condição de início (Start condition) para um dispositivo, que é uma transição do nível “ALTO” para “BAIXO” no SDA, antes do SCL fazer esta mesma transição. Para uma condição de fim da transmissão, o SDA faz uma transição de “BAIXO” para “ALTO” depois do SCL.

Início e fim da mensagem I2C.
Fonte: I2C info.

Depois do endereço do dispositivo, vem o bit de leitura/escrita (Read/Write Bit). Indica se o mestre está enviando dados para o escravo (bit 0) ou pedindo dados deste (bit 1). O bit ACK/NACK é de reconhecimento, sempre vem depois de um quadro de dados (Data Frame). Serve para o dispositivo receptor ou escravo informar ao emissor se esse recebeu o quadro de dados. O bit ACK/NACK fica no nível “0”, quando o escravo recebe o quadro de dados, o bit fica no nível “1”, se não receber a sequência de bits.

Estes pulsos são um exemplo de mensagem no protocolo I2C. Fonte: Sparkfun.

Velocidade de transmissão

ModosVelocidade máxima
Padrão (Sm)100 kbps
Rápido (Fm)400 kbps
Alta velocidade (Fm+)3,4 Mbps
Ultra rápido (Hs-mode)5 Mbps
Tabela da velocidade de transmissão dos modos de protocolo I2C.

About Pedro Ney Stroski

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *