Resposta direta
Quando o I²C trava, identifique primeiro qual linha permanece baixa e o que aconteceu antes. Reiniciar o software não comprova que a causa desapareceu. A recuperação precisa de limites definidos e de um resultado registrado.
Registre a falha antes de reiniciar
Salve endereço, última operação, estado do driver e níveis de SDA e SCL. Diferencie a ausência de ACK de uma linha permanentemente ocupada. Repetir consultas sem limite pode esconder o problema original entre as mensagens seguintes.
Reproduza a falha com uma única transação. Anote se aparece ao ligar, depois de reiniciar o MCU ou durante uma mudança de tensão. Isso ajuda a separar um problema de sequência de uma ligação permanentemente incorreta.
Examine alimentação e sinais em conjunto
Confira alimentação e reset do sensor, além da tensão dos resistores de pull-up. Um controlador funcionando não significa que todos os participantes estejam prontos. Verifique também conversores de nível e outros componentes capazes de manter a linha baixa.
Compare o sinal perto do controlador e perto do sensor. Registre pull-ups e capacitâncias existentes antes de simplesmente reduzir um resistor. Os limites elétricos dependem dos componentes e do modo do barramento; uma partida ocasional não valida todas as condições.
Limite o procedimento de recuperação
A NXP descreve nove pulsos quando SDA permanece baixa; para SCL retida, podem ser necessários reset de hardware ou ciclo de alimentação. A aplicação depende do circuito. NXP — UM10204 I²C-bus specification
Impeça novas transações durante a recuperação e coordene o acesso quando houver vários controladores. Não force simplesmente as linhas abertas ao nível alto por uma saída ativa. Limite as tentativas e sinalize uma falha definida se a linha não for liberada.
Sincronize novamente o sensor
Um barramento livre não garante uma configuração válida. Confira identificação e registros importantes, restaure os ajustes quando necessário e marque as medidas como inválidas até terminar. Só então retome a consulta normal.
Exemplo de teste: o controlador reinicia no meio de uma transferência enquanto o sensor continua alimentado. Verifique detecção, recuperação limitada e resultado: dados válidos ou erro reconhecível. Preserve as condições para repetir o teste após alterações no driver.
Registro do teste de recuperação
- Níveis SDA/SCL e última transação.
- Estados de reset e alimentação dos participantes.
- Número de tentativas e tempos máximos.
- Verificação da configuração do sensor.
- Medidas inválidas e falhas recorrentes visíveis.
Perguntas frequentes
Reduzir a frequência I²C sempre resolve?
Não. Isso pode esclarecer alguns problemas de temporização, mas não corrige alimentação ausente nem uma linha retida. Compare medições antes e depois da mudança.
O firmware deve tentar indefinidamente?
Não. Defina um limite adequado e um estado de falha. Um laço infinito pode bloquear outras tarefas e ocultar o defeito original.
Fontes técnicas
Serviço relacionado