O protocolo I2C (“Inter-Integrated Circuit”) é uma solução de comunicação serial amplamente utilizada em sistemas embarcados. Este artigo explora o funcionamento do I2C, sua camada física, modos de operação e exemplos práticos, visando facilitar a compreensão para engenheiros e entusiastas da eletrônica.
2. Histórico e Contexto do I2C
Criado pela Philips Semiconductor em 1982, o I2C surgiu como uma solução simples e eficiente para conectar microcontroladores a dispositivos periféricos, como conversores AD/DA e sensores. Desde 2006, sua implementação é livre de licenças, o que incentivou sua adoção por diversos fabricantes.
Motivações:
- Uso de apenas duas linhas: SDA (dados) e SCL (clock).
- Capacidade de conectar múltiplos dispositivos no mesmo barramento.
- Endereçamento único para cada dispositivo.
3. Modos de Velocidade do I2C
O I2C oferece cinco modos de operação, cada um com velocidades e aplicações distintas:
Modo | Taxa Máxima |
---|---|
Standard-mode | 100 kbps |
Fast-mode | 400 kbps |
Fast-mode Plus | 1 Mbps |
High-speed mode | 3,4 Mbps |
Ultra-Fast mode | 5 Mbps |
Os modos de alta velocidade requerem hardware especializado para suportar as exigências de tempo e tolerância de linha.
4. Camada Física do I2C
4.1 Comunicação via Duas Linhas O barramento I2C utiliza apenas duas linhas compartilhadas: SDA para transmissão de dados e SCL para o clock. O controlador gerencia a comunicação, iniciando e finalizando transmissões.
4.2 Conexão Open-Drain O I2C utiliza conexões open-drain, que exigem resistores pull-up para manter o estado alto. A troca de estados (alto para baixo e vice-versa) é influenciada pela capacitância do barramento e pela resistência dos pull-ups.
4.3 Contenção Não Destrutiva no Barramento A conexão open-drain permite que múltiplos dispositivos compartilhem o barramento sem risco de danos físicos, resolvendo contenções de forma segura.
5. Protocolo I2C
5.1 Condições START e STOP A comunicação é iniciada com um START, onde SDA é puxada para baixo enquanto SCL está alta. A condição STOP é definida quando SDA volta ao estado alto após SCL.
5.2 Representação de Uns e Zeros Uns (1) e zeros (0) são representados pelos estados de SDA durante os pulsos de clock em SCL.
5.3 Estrutura de Quadros de Comunicação Cada transmissão consiste em:
- Quadro de Endereço: 7 bits para endereço e 1 bit para leitura/escrita.
- Quadros de Dados: Enviados em bytes com bits de reconhecimento (ACK) entre cada um.
6. Exemplos Práticos
6.1 DAC80501 Um DAC de 16 bits configurado via I2C para ajustar a saída de tensão. O exemplo detalha o endereço do dispositivo, registro de configuração e cálculos para escrita.
6.2 ADS1115 Um ADC de alta precisão utilizado para leituras analógico-digitais. O exemplo inclui a configuração do registrador e a leitura dos dados de conversão.
7. Endereços Reservados
O I2C reserva endereços para funções específicas como:
- Chamadas gerais (endereço 0).
- Códigos de alta velocidade (endereços 4-7).
- Leitura de ID de dispositivos (endereços 124-127).
8. Tópicos Avançados
8.1 Sincronização de Relógio e Arbitragem Múltiplos controladores no barramento resolvem contenção através de sincronização de clock e arbitragem no sinal SDA.
8.2 Clock Stretching Os dispositivos podem segurar o clock (SCL) para ajustar o ritmo da comunicação, garantindo que dados sejam processados corretamente.
8.3 Tradução de Níveis de Tensão Métodos para lidar com dispositivos que operam em diferentes tensões, incluindo o uso de tradutores de nível como o PCA9306.
8.4 Dimensionamento de Resistores Pull-Up Fórmulas para calcular resistências mínimas e máximas com base na capacitância do barramento e na velocidade desejada.
9. Protocolos Semelhantes
- SMBus: Voltado para gestão de energia em placas-mãe.
- PMBus: Extensão do SMBus para fontes de alimentação.
- IPMI: Usado para monitoramento e controle remoto de sistemas computacionais.
10. Conclusão
O protocolo I2C é essencial para sistemas embarcados devido à sua simplicidade e versatilidade. Compreender sua camada física, protocolo e aplicações práticas permite o desenvolvimento e a solução de problemas em sistemas que utilizam essa tecnologia.