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.
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”.
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.
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.
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.
Velocidade de transmissão
Modos | Velocidade 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 |