InnovChipELECTRONICS

INNOVCHIP · Guías técnicas

Bus I²C bloqueado: revisar SDA, SCL y la recuperación

Respuesta breve

Ante un bus I²C bloqueado, identifique primero qué línea permanece baja y qué ocurrió justo antes. Reiniciar el software no demuestra que la causa haya desaparecido. La recuperación necesita límites definidos y un resultado registrado.

Capture el fallo antes de reiniciar

Guarde dirección, última operación, estado del driver y niveles de SDA y SCL. Distinga un ACK ausente de una línea permanentemente ocupada. Si la aplicación repite consultas sin parar, puede ocultar el fallo original entre los mensajes posteriores.

Reproduzca el problema con una sola transacción. Anote si aparece al encender, después de reiniciar el MCU o durante un cambio de tensión. Así podrá separar un problema de secuencia de una conexión permanentemente incorrecta.

Revise alimentación y señales conjuntamente

Compruebe alimentación y reset del sensor, además de la tensión de las resistencias pull-up. Que el controlador funcione no significa que todos los participantes estén preparados. Revise también convertidores de nivel y otros dispositivos que puedan mantener la línea baja.

Compare la señal junto al controlador y junto al sensor. Registre pull-ups y capacitancias existentes antes de reducir una resistencia por ensayo. Los límites eléctricos dependen de los componentes y del modo de bus; un arranque ocasional no valida todas las condiciones.

Limite el procedimiento de recuperación

NXP describe nueve pulsos cuando SDA queda retenida; si SCL permanece baja pueden necesitarse reset de hardware o ciclo de alimentación. La aplicación depende del circuito. NXP — UM10204 I²C-bus specification

Impida nuevas transacciones durante la recuperación y acuerde el control del bus si hay varios controladores. No fuerce simplemente las líneas abiertas a nivel alto mediante una salida activa. Limite los intentos y comunique un fallo definido si la línea no se libera.

Vuelva a sincronizar el sensor

Un bus libre no garantiza una configuración válida. Compruebe identificación y registros relevantes, restaure los ajustes cuando sea necesario y marque las medidas como inválidas hasta terminar. Solo entonces debe reanudarse la consulta habitual.

Ejemplo de ensayo: el controlador reinicia a mitad de una transferencia mientras el sensor sigue alimentado. Compruebe detección, recuperación limitada y resultado: datos válidos o un error reconocible. Conserve las condiciones para repetir el ensayo tras cambiar el driver.

Registro de la prueba de recuperación

  • Niveles SDA/SCL y última transacción.
  • Estados de reset y alimentación de los participantes.
  • Número de intentos y tiempos máximos.
  • Verificación de la configuración del sensor.
  • Medidas inválidas y errores repetidos visibles.

Preguntas frecuentes

¿Siempre ayuda bajar la frecuencia I²C?

No. Puede aclarar ciertos problemas temporales, pero no corrige una alimentación ausente o una línea retenida. Compare medidas antes y después del cambio.

¿Debe el firmware reintentar indefinidamente?

No. Defina un límite apropiado y un estado de fallo. Un bucle infinito puede bloquear otras tareas y esconder la avería original.

Fuentes técnicas

Servicio relacionado

Drivers de sensores

Consultar un proyecto