Passer au contenu principal
  • i2c
  • arduino
  • capteurs
  • électronique
  • débogage

Analyseur I2C : dix lignes qui vous font gagner un après-midi

The Boss Factory11 min de lecture

Un capteur qui n’est pas détecté n’a pas automatiquement besoin d’une nouvelle bibliothèque, d’une autre carte ou d’un programme plus long. Le premier test le plus rapide est un analyseur I2C : dix lignes qui demandent à chaque adresse valide de 7 bits un accusé de réception avant l’intervention d’un pilote de périphérique.

L’ordre des étapes est important. Une analyse qui ne trouve rien pointe d’abord vers le câblage, l’alimentation ou l’absence de résistances de rappel. Une analyse qui signale chaque adresse pointe fortement vers une ligne de données bloquée à l’état bas. Ces deux résultats vous indiquent quoi inspecter avant de passer un après-midi à déboguer du code qui n’a pas encore eu la chance de s’exécuter.

Créez l’analyseur I2C avant le code du capteur

Pour une carte compatible Arduino utilisant la bibliothèque standard Wire, cela suffit pour effectuer le premier test :

#include <Wire.h> void setup() { Serial.begin(115200); Wire.begin(); for (byte address = 1; address < 127; address++) { Wire.beginTransmission(address); byte error = Wire.endTransmission(); if (error == 0) { Serial.print("0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } } void loop() {}

Cette analyse couvre la plage d’adresses de 7 bits utilisable, de 0x01 à 0x7E. Elle signale une adresse lorsque Wire.endTransmission() renvoie zéro, ce qui signifie que le périphérique a accusé réception de la phase d’adressage. Elle n’identifie pas le composant, ne prouve pas qu’un registre peut être lu et ne valide pas un pilote.

Certaines cartes utilisent des broches I2C différentes, surtout les cartes dotées de plusieurs bus matériels. Sur ces cartes, Wire.begin() peut sélectionner automatiquement les bonnes broches ou exiger des arguments explicites pour les broches SDA et SCL. Vérifiez la définition des broches de la carte plutôt que de supposer que les broches marquées A4 et A5 s’appliquent à chaque contrôleur.

La première étape prend normalement de 30 à 60 minutes. Si vous avez déjà la carte, le coût supplémentaire est d’environ 0 $ à 5 $ pour des fils de liaison ou une petite platine d’essai. Sinon, une configuration de base avec une carte à microcontrôleur et une platine d’essai coûte souvent environ 10 $ à 30 $. N’achetez pas encore d’analyseur logique. Il corrige un problème de mesure, pas un problème de câblage qui n’a pas été vérifié.

Ouvrez le moniteur série au débit utilisé dans le programme. Notez le résultat avant de modifier les fils. Un résultat reproductible est plus utile qu’une analyse effectuée une seule fois entre plusieurs changements.

Lisez l’analyse comme un test électrique

La sortie est une décision à embranchements, pas un outil de recherche de composants. Utilisez le résultat pour choisir la prochaine vérification.

Résultat de l’analyseÉtat probable du busPremières vérificationsCe que cela indique
Aucune adresseSDA et SCL ne produisent pas d’accusé de réception valideAlimentation, mise à la terre, SDA, SCL, résistances de rappel, sélection des brochesCâblage, alimentation, résistances de rappel manquantes, mauvaise tension ou périphérique non alimenté
Une adresse attendueUn périphérique répond normalementConfirmer son adresse et sa tension d’alimentationLe bus est probablement fonctionnel; passez aux tests au niveau des registres
Deux adresses attendues ou plusPlusieurs périphériques sont présentsComparer la liste avec les options d’adresse de chaque périphériqueFonctionnement normal, sauf si deux composants partagent une adresse fixe
Chaque adresse de l’analyse répondSDA est généralement bloquée à l’état bas ou le bus est mal interprété électriquementDébrancher les périphériques, inspecter SDA pour détecter un court-circuit, vérifier les résistances de rappel et les niveaux de tensionUn problème sur la ligne de données, pas une bibliothèque de pilote manquante
La carte se bloque pendant l’analyseSCL ou SDA peut être maintenue à l’état bas, ou le contrôleur attend un état du busRetirer les périphériques, vérifier la présence d’un court-circuit, ajouter une temporisation du bus si elle est prise en chargeUn bus verrouillé ou un comportement de Wire propre à la carte

L’absence de périphériques est le résultat que les débutants interprètent le plus souvent de travers. Elle ne prouve pas que le capteur est défectueux et ne pointe pas d’abord vers la bibliothèque du pilote. Vérifiez la tension d’alimentation du capteur, la mise à la terre commune, l’ordre SDA et SCL et la présence de résistances de rappel sur le module.

Les lignes I2C sont des signaux à drain ouvert. Les périphériques tirent une ligne vers l’état bas et la relâchent; les résistances la ramènent vers l’état haut. Certaines cartes de contrôleur et certains modules de capteur comprennent des résistances de rappel, mais la norme I2C ne les fait pas apparaître comme par magie dans une configuration avec des fils libres. Des résistances de rappel manquantes peuvent produire aucune adresse ou des résultats peu fiables. Trop de résistances de rappel en parallèle peuvent également faire tirer le bus trop fortement, surtout lorsque d’autres cartes sont ajoutées.

Le fait que chaque adresse semble répondre est un indice différent. C’est la signature de SDA bloquée à l’état bas, car le contrôleur voit la ligne de données maintenue dans l’état d’accusé de réception. Un pont d’étain, un module endommagé, une mauvaise connexion du convertisseur de niveau ou une résistance de rappel vers le bas sur SDA peuvent en être la cause. Débranchez tous les périphériques et analysez uniquement le contrôleur. Si chaque adresse apparaît encore, inspectez le chemin de SDA du côté du contrôleur. Si le résultat disparaît lorsqu’une carte est retirée, cette carte ou son câblage mérite votre attention.

Une analyse qui signale une adresse attendue ne termine pas le test. Elle prouve que la phase d’adressage fonctionne. Elle ne prouve pas que le capteur est dans le bon mode de fonctionnement ni que le format du registre demandé est correct.

Prouvez le fonctionnement du bus avec un périphérique connu

La deuxième étape consiste à effectuer une lecture minimale sur un périphérique dont l’adresse et la carte des registres sont documentées. Utilisez un capteur dont l’adresse est fixe ou clairement sélectionnable et ne branchez aucun autre périphérique I2C. Cette étape prend habituellement de une à deux heures. Le coût supplémentaire est d’environ 5 $ à 20 $ pour un module de capteur de base si le matériel de l’analyseur est déjà assemblé.

Avant d’utiliser l’exemple du fabricant, notez quatre faits :

  • La plage d’alimentation de la variante exacte du capteur.
  • Les broches du contrôleur attribuées à SDA et SCL.
  • L’adresse de 7 bits du périphérique, et non une adresse décalée vers la gauche pour une transaction de bas niveau.
  • L’adresse du registre, la longueur de lecture et la temporisation ou la commande de conversion requise.

La notation des adresses est à l’origine d’une grande partie des fausses pistes. Une fiche technique peut présenter une valeur d’écriture de 8 bits et une valeur de lecture de 8 bits, alors que l’analyseur affiche l’adresse de 7 bits. Par exemple, le résultat 0x68 d’un analyseur correspond à l’octet d’adresse de transaction 0xD0 pour l’écriture et 0xD1 pour la lecture. Cette conversion fait partie du protocole; elle ne modifie pas l’adresse du capteur.

Lisez un registre d’identification fixe si le composant en fournit un. Une mesure qui change constitue une mauvaise première preuve, car elle peut sembler plausible même si la mise à l’échelle, l’ordre des octets ou l’initialisation est incorrect. Si la valeur d’identification est correcte, testez ensuite une mesure et comparez son comportement à la plage attendue dans la fiche technique.

Si l’analyseur voit le périphérique, mais que la lecture de l’identification échoue, passez aux détails des registres. Vérifiez si le pointeur de registre doit être écrit avant la lecture, si une condition de redémarrage (repeated start) est requise et si le périphérique a besoin d’une commande de réveil. À ce stade, une bibliothèque de pilote peut être utile, car le chemin électrique a déjà passé un test pertinent.

Ajoutez le pilote seulement après la réussite de l’analyse

La troisième étape consiste à adapter la bibliothèque de pilote. Prévoyez de deux à quatre heures pour un capteur courant et davantage si la bibliothèque cible une autre famille de contrôleurs ou suppose une autre API de bus. Le coût est habituellement de 0 $, puisque le logiciel est offert par le projet de la carte ou du capteur, même si un deuxième capteur ou un convertisseur de niveau peut ajouter environ 5 $ à 20 $.

Commencez par le plus petit exemple de la bibliothèque. Modifiez une seule chose à la fois :

  • Définissez les bonnes broches SDA et SCL si la carte l’exige.
  • Définissez l’adresse de 7 bits détectée si la bibliothèque expose un paramètre d’adresse.
  • Confirmez que l’appel d’initialisation renvoie une réussite avant de lire les valeurs.
  • Affichez les octets bruts des registres avant d’appliquer les formules de conversion.
  • Ajoutez une courte temporisation uniquement lorsque la fiche technique exige un temps de conversion.

Si l’analyse trouve l’adresse attendue, mais que la bibliothèque affiche sensor not detected, le problème est probablement passé du câblage de base aux hypothèses du logiciel. Les causes courantes comprennent une autre configuration de l’adresse, une variante de puce ayant un autre registre d’identification, un objet de bus non pris en charge ou une séquence d’initialisation qui ne correspond pas au composant.

Ne remplacez pas le pilote en premier. Placez une lecture brute de registre à côté du pilote et comparez les résultats. Si la lecture brute fonctionne, examinez la gestion de l’adresse et la vérification de l’identification dans la bibliothèque. Si la lecture brute échoue, retournez à la fiche technique et à la transaction du bus plutôt que d’ajouter du code sans rapport.

Un analyseur logique bon marché devient utile ici, et non plus tôt, lorsque l’analyseur I2C et une lecture brute donnent des résultats différents. Il peut montrer si le contrôleur envoie l’adresse attendue, si le périphérique accuse réception et si SDA change lorsque SCL est à l’état haut. Prévoyez environ 10 $ à 40 $ pour un analyseur de base et comptez une heure de plus pour saisir et interpréter une transaction. Cet achat n’est utile que si la différence ne peut pas être réduite avec un multimètre et une configuration de câblage fonctionnelle connue.

Terminez avec un montage d’essai reproductible

Une fois qu’un capteur fonctionne correctement, ajoutez le deuxième périphérique et effectuez une nouvelle analyse. Cette étape prend souvent de une à trois heures. Le coût du matériel supplémentaire dépend du deuxième périphérique, mais environ 5 $ à 25 $ couvrent de nombreuses petites cartes de capteur et quelques résistances. Gardez la première configuration fonctionnelle intacte afin que chaque nouvelle connexion puisse être comparée à une référence connue.

Vérifiez les conflits d’adresses avant d’écrire la logique de l’application. Deux périphériques ayant la même adresse fixe ne peuvent pas partager un même bus sans modifier une broche d’adresse, utiliser un commutateur de bus ou placer un périphérique sur un autre bus du contrôleur. Une analyse réussie des deux adresses ne garantit pas non plus que leurs niveaux de tension sont compatibles. Un contrôleur de 5 V et un périphérique de 3,3 V ont besoin d’une interface électrique appropriée, sauf si la documentation de la carte prend explicitement cette connexion en charge.

Pour un montage permanent, mesurez la tension au repos sur SDA et SCL avec un multimètre. Les deux lignes devraient monter vers la tension de rappel du bus lorsqu’aucun périphérique ne les tire vers l’état bas. Une ligne qui reste près de la masse n’est pas un problème de bibliothèque de pilote. Une ligne qui monte lentement peut indiquer une capacité excessive, trop de résistances de rappel en parallèle, un câblage long ou une vitesse de bus trop élevée pour la configuration.

Ce n’est qu’après la réussite de l’analyse avec plusieurs périphériques, des lectures brutes et des vérifications d’adresses que le bus devrait faire partie du projet plus vaste. L’analyseur demeure alors utile comme test d’entretien : exécutez-le avant de modifier le code de l’application et comparez sa liste d’adresses après chaque changement de câblage.

Questions fréquentes

Pourquoi mon analyseur I2C ne trouve-t-il rien?

Commencez par l’alimentation, la mise à la terre commune, SDA, SCL, les broches sélectionnées du contrôleur et les résistances de rappel. Une analyse qui ne trouve rien pointe vers le câblage, l’alimentation ou l’absence de résistances de rappel plutôt que vers la bibliothèque du pilote. Vérifiez également que le module est activé et que sa tension se trouve dans la plage d’alimentation exacte du composant.

Pourquoi chaque adresse I2C répond-elle?

Le fait que chaque adresse semble répondre est la signature de SDA bloquée à l’état bas. Débranchez les périphériques et effectuez une nouvelle analyse, puis inspectez SDA pour détecter un pont d’étain, un convertisseur de niveau endommagé, une mauvaise connexion ou une résistance de rappel vers le bas involontaire. Si le bus se bloque plutôt, SCL peut être maintenue à l’état bas ou le contrôleur peut attendre sur un bus verrouillé.

Une adresse détectée prouve-t-elle que le capteur fonctionne?

Non. Cela prouve seulement que quelque chose a accusé réception de la phase d’adressage. Une lecture brute du registre d’identification est le prochain test utile, suivie d’une mesure documentée, puis de la bibliothèque de pilote.

Nous fabriquons sur commande des projets de capteurs I2C et de contrôleurs grâce à nos systèmes électroniques et intelligents sur mesure.

Services associés

Tous les services →

Vous avez un projet en tête?

Dites-nous ce que vous voulez faire fabriquer — nous répondons en 24 à 48 heures.

Demander une soumission

À lire aussi