O barramento I²C (Inter-Integrated Circuit) é um protocolo de comunicação serial de dois fios, composto pelas linhas SDA (dados) e SCL (clock), projetado para comunicação entre dispositivos integrados. Utilizando um sistema de saída open-drain, os dispositivos I²C apenas puxam a linha para nível baixo (LOW), enquanto resistores externos de pull-up garantem o retorno da linha ao nível alto (HIGH) quando nenhum dispositivo está transmitindo. Sem esses resistores, a linha flutuaria, tornando a comunicação instável.
A Influência do Resistor no Tempo de Resposta
Como o barramento depende da capacitância da linha (Cb) e do resistor de pull-up (Rp), o tempo necessário para a linha retornar ao nível alto após ser puxada para o nível baixo segue a constante de tempo RC (produto da resistência e capacitância). Se o valor de Rp for muito alto, o tempo de subida da tensão pode ultrapassar os limites da especificação do protocolo I²C, causando falhas de comunicação.
A resposta da tensão em um circuito RC ao aplicar uma etapa de tensão VCCV_{CC}VCC pode ser expressa por: V(t)=VCC(1−e−t/RC)V(t) = V_{CC} \left( 1 – e^{-t / RC} \right)V(t)=VCC(1−e−t/RC)
Com base nisso, o tempo de subida trt_rtr da tensão, definido entre 30% e 70% de VCCV_{CC}VCC, pode ser calculado como: tr=0,8473⋅RP⋅Cbt_r = 0{,}8473 \cdot R_P \cdot C_btr=0,8473⋅RP⋅Cb
Esse tempo precisa ser inferior ao máximo especificado para o modo I²C utilizado (Standard, Fast ou Fast Mode Plus)I2C Bus Pullup Resistor….
Fórmulas para o Cálculo dos Resistores de Pull-Up
1. Resistor Mínimo (RP_min)
Evita que os dispositivos no barramento não consigam forçar a linha para nível baixo. É dado por: \[R_{P(min)} = \frac{V_{CC} – V_{OL(max)}}{I_{OL}}\]
Onde:
- \(V_{OL(max)}\) é a tensão máxima ainda reconhecida como nível lógico baixo (tipicamente 0,4V),
- \(I_{OL}\) é a corrente máxima que o dispositivo pode absorver no nível lógico baixo.
2. Resistor Máximo (\(RP_max\))
Garante que o tempo de subida esteja dentro das especificações do protocolo. Calculado por: \[R_{P(max)} = \frac{t_r}{0{,}8473 \cdot C_b}\]
Onde:
- \(t_r\) é o tempo de subida permitido (por exemplo, 300ns para Fast Mode),
- \(C_b\) é a capacitância da linha em farads (por exemplo, 200pF = 200 x 10⁻¹² F).
Exemplo de Cálculo
Para uma comunicação I²C em Fast Mode com os seguintes parâmetros:
- \(V_{CC} = 3{,}3V\)
- \(C_b = 200pF\)
- \(t_r = 300ns\)
- \(V_{OL(max)} = 0{,}4V\)
- \(I_{OL} = 3mA\)
Temos:
\(RP_min\): \[R_{P(min)} = \frac{3{,}3 – 0{,}4}{3 \cdot 10^{-3}} = 966{,}67 \ \Omega\]
\(RP_max\): \[R_{P(max)} = \frac{300 \cdot 10^{-9}}{0{,}8473 \cdot 200 \cdot 10^{-12}} \approx 1{,}77k\Omega\]
Portanto, o valor ideal do resistor de pull-up deve estar entre 967 Ω e 1,77 kΩI2C Bus Pullup Resistor….
Considerações Finais
Ao projetar sistemas com I²C, é fundamental balancear consumo de energia e velocidade de comunicação. Resistores menores aceleram a comunicação (tempo de subida menor), mas aumentam o consumo de corrente quando a linha está em nível baixo. Já resistores maiores reduzem esse consumo, mas podem comprometer a integridade do sinal.
Por isso, a escolha do resistor ideal deve sempre considerar:
- Tensão de operação;
- Capacitância total da linha (cabeamento + CI’s);
- Modo de operação I²C (Standard, Fast ou Fast Plus);
- Corrente máxima que os dispositivos podem suportar.
Referência:
- https://www.ti.com/lit/an/slva689/slva689.pdf?ts=1747353571271&ref_url=https%253A%252F%252Fwww.google.com%252F