La réponse en bref
Face à un bus I²C bloqué, identifiez d’abord la ligne qui reste basse et l’événement précédent. Redémarrer le logiciel ne prouve pas que la cause a disparu. La récupération demande des limites définies et un résultat enregistré.
Capturer le défaut avant la réinitialisation
Conservez adresse, dernière opération, état du pilote et niveaux de SDA et SCL. Distinguez l’absence d’ACK d’une ligne occupée en permanence. Des requêtes répétées sans limite peuvent masquer le défaut initial dans les messages suivants.
Reproduisez le problème avec une seule transaction. Notez s’il apparaît à la mise sous tension, après le redémarrage du MCU ou lors d’une variation de tension. Cela aide à séparer un problème de séquence d’un câblage durablement incorrect.
Examiner alimentation et signaux ensemble
Vérifiez alimentation et reset du capteur ainsi que la tension des résistances de rappel. Un contrôleur actif ne signifie pas que tous les participants sont prêts. Examinez aussi les translateurs de niveau et les autres composants susceptibles de maintenir une ligne basse.
Comparez le signal près du contrôleur et près du capteur. Relevez rappels et capacités existants avant de diminuer une résistance au hasard. Les limites électriques dépendent des composants et du mode du bus ; un démarrage occasionnel ne valide pas toutes les conditions.
Limiter la procédure de récupération
NXP décrit neuf impulsions si SDA reste basse ; pour SCL maintenue basse, une réinitialisation matérielle ou un cycle d’alimentation peuvent être nécessaires. L’application dépend du circuit. NXP — UM10204 I²C-bus specification
Empêchez de nouvelles transactions pendant la récupération et organisez l’accès au bus s’il existe plusieurs contrôleurs. Ne forcez pas simplement les lignes ouvertes à l’état haut par une sortie active. Limitez les tentatives et signalez un défaut défini si la ligne ne se libère pas.
Resynchroniser le capteur ensuite
Un bus libre ne garantit pas une configuration correcte. Vérifiez l’identification et les registres importants, rétablissez les réglages si nécessaire et marquez les mesures comme invalides jusque-là. Reprenez ensuite seulement l’interrogation normale.
Exemple d’essai : le contrôleur redémarre au milieu d’un transfert tandis que le capteur reste alimenté. Vérifiez détection, récupération limitée et résultat : données valides ou défaut reconnaissable. Conservez les conditions pour répéter l’essai après une modification du pilote.
À enregistrer pendant l’essai
- Niveaux SDA/SCL et dernière transaction.
- États d’alimentation et de reset des participants.
- Nombre de tentatives et délais maximaux.
- Vérification de la configuration du capteur.
- Mesures invalides et défauts répétés visibles.
Questions fréquentes
Réduire la fréquence I²C suffit-il toujours ?
Non. Cela peut éclaircir certains problèmes temporels, mais ne rétablit pas une alimentation absente ni une ligne retenue. Comparez les mesures avant et après le changement.
Le firmware doit-il réessayer indéfiniment ?
Non. Définissez une limite adaptée et un état de défaut. Une boucle infinie peut bloquer d’autres tâches et cacher la défaillance initiale.
Sources techniques
Prestation associée