InnovChipELECTRONICS

INNOVCHIP · Guias técnicos

Barramento I²C travado: verificar SDA, SCL e a recuperação

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

Drivers de sensores

Conversar sobre o projeto