dans cet article, nous allons apprendre ce qu’est le protocole de communication I2C, son matériel, comment les données sont transférées et différentes configurations dans lesquelles il fonctionne.
Aperçu
Introduction à la Communication I2C
communication I2C est la forme courte pour les circuits intégrés., Il s’agit d’un protocole de communication développé par Philips Semiconductors pour le transfert de données entre un processeur central et plusieurs circuits intégrés sur la même carte de circuit imprimé en utilisant seulement deux fils communs.
en Raison de sa simplicité, il est largement adopté pour la communication entre les microcontrôleurs et des réseaux de capteurs, afficheurs, de Tes appareils, EEPROMs etc.
Il s’agit d’un type de protocole de communication série synchrone. Cela signifie que les bits de données sont transférés un par un à des intervalles de temps réguliers définis par une ligne d’horloge de référence.,
Caractéristiques
Voici quelques-unes des caractéristiques importantes du protocole de communication I2C:
- seules deux lignes de bus communes (fils) sont nécessaires pour contrôler tout périphérique/IC sur le réseau I2C
- pas besoin d’accord préalable sur le taux de transfert de données comme dans la communication UART. Ainsi, la vitesse de transfert de données peut être ajustée chaque fois que nécessaire
- mécanisme Simple pour la validation des données transférées
- utilise un système d’adressage 7 bits pour cibler un périphérique/IC spécifique sur le bus I2C
- Les réseaux I2C sont faciles à mettre à l’échelle., Les nouveaux périphériques peuvent simplement être connectés aux deux lignes de bus I2C communes
Matériel
le Bus I2C physique
le Bus I2C (fils D’Interface) se compose de seulement deux fils et est nommé ligne D’horloge série (SCL) et ligne de données série (SDA). Les données à transférer sont envoyées par le fil SDA et sont synchronisées avec le signal d’horloge de SCL. Tous les périphériques/circuits intégrés du réseau I2C sont connectés aux mêmes lignes SCL et SDA comme indiqué ci-dessous:
Les deux lignes de bus I2C (SDA, SCL) sont exploitées en tant que Pilotes de drain ouverts., Cela signifie que n’importe quel périphérique / IC sur le réseau I2C peut conduire SDA et SCL bas, mais ils ne peuvent pas les conduire haut. Ainsi, une résistance de traction est utilisée pour chaque ligne de bus, pour les maintenir élevées (à tension positive) par défaut.
la raison de l’utilisation d’un système à drain ouvert est qu’il n’y aura aucun risque de court-circuit, ce qui peut se produire lorsqu’un appareil essaie de tirer la ligne vers le haut et qu’un autre appareil essaie de tirer la ligne vers le bas.
périphériques maîtres et esclaves
Les périphériques connectés au bus I2C sont classés comme maîtres ou esclaves., À tout moment, un seul maître reste actif sur le bus I2C. Il contrôle la ligne D’horloge SCL et décide quelle opération doit être effectuée sur la ligne de données SDA.
Tous les périphériques qui répondent aux instructions de ce périphérique maître sont des esclaves. Pour différencier plusieurs périphériques esclaves connectés au même bus I2C, chaque périphérique esclave se voit attribuer physiquement une adresse permanente de 7 bits.
lorsqu’un périphérique maître souhaite transférer des données vers ou depuis un périphérique esclave, il spécifie cette adresse de périphérique esclave particulière sur la ligne SDA, puis procède au transfert., Ainsi, une communication efficace a lieu entre le périphérique maître et un périphérique esclave particulier.
Tous les autres périphériques esclaves ne répondent pas à moins que leur adresse ne soit spécifiée par le périphérique maître sur la ligne SDA.
Protocole de Transfert de Données
Le protocole suivant (ensemble de règles) est suivie par le dispositif maître et de l’esclave appareils pour le transfert de données entre eux.
les données sont transférées entre le périphérique maître et les périphériques esclaves via une seule ligne de données SDA, via des séquences modelées de 0 et 1 (bits)., Chaque séquence de 0 et de 1 est appelée transaction et les données de chaque transaction sont structurées comme suit:
condition de démarrage
chaque fois qu’un périphérique maître / IC décide de démarrer une transaction, il commute la ligne SDA du niveau haute tension à un niveau basse tension avant que la ligne SCL passe de haut à bas.
Une fois qu’une condition de démarrage est envoyée par le périphérique maître, tous les périphériques esclaves deviennent actifs même s’ils sont en mode veille et attendent les bits d’adresse.,
bloc D’adresse
Il comprend 7 bits et est rempli avec l’adresse du périphérique esclave vers/à partir duquel le périphérique maître doit envoyer / recevoir des données. Tous les périphériques esclaves sur le bus I2C comparent ces bits d’adresse avec leur adresse.
Bit lecture/écriture
Ce bit spécifie la direction du transfert de données. Si le périphérique maître / IC doit envoyer des données à un périphérique esclave, ce bit est défini sur ‘0’. Si le circuit intégré maître doit recevoir des données du périphérique esclave, il est réglé sur « 1 ».,
ACK/NACK Bits
Il se tient pour Admis/Non-Reconnu bits. Si l’adresse physique d’un périphérique esclave coïncide avec l’adresse diffusée par le périphérique maître, la valeur de ce bit est définie sur ‘0’ par le périphérique esclave. Sinon, il reste à la logique » 1 » (par défaut).
bloc de données
Il comprend 8 bits et ils sont définis par l’expéditeur, avec les bits de données qu’il doit transférer au récepteur., Ce bloc est suivi D’un bit ACK/NACK et est défini sur ‘ 0 ‘ par le récepteur s’il reçoit avec succès des données. Sinon, il reste à la logique ‘1’.
Cette combinaison de bloc de données suivie D’un bit ACK/NACK est répétée jusqu’à ce que les données soient complètement transférées.
condition D’arrêt
Une fois que les blocs de données requis sont transférés via la ligne SDA, le dispositif maître commute la ligne SDA du niveau basse tension au niveau haute tension avant que la ligne SCL ne commute de haut en bas.,
remarque: la logique ‘0’ ou la définition d’un bit à ‘0’ équivaut à appliquer une basse tension sur la ligne SDA et vice versa.
Comment fonctionne pratiquement la Communication I2C?
Une communication / transaction I2C est initiée par un périphérique maître soit pour envoyer des données à un périphérique esclave, soit pour en recevoir des données. Laissez-nous en apprendre davantage sur le travail des deux scénarios en détail.,
envoi de données à un périphérique esclave
la séquence d’opérations suivante a lieu lorsqu’un périphérique maître essaie d’envoyer des données à un périphérique esclave particulier via le bus I2C:
- Le périphérique maître envoie la condition de démarrage
- Le périphérique maître envoie les 7 bits d’adresse qui correspondent au périphérique esclave à cibler
- Le périphérique maître définit le bit de lecture/écriture sur ‘0’, ce qui signifie une écriture
- maintenant deux scénarios sont possible:
- si aucun périphérique esclave ne correspond à l’adresse envoyée par le périphérique maître, le bit ACK/NACK suivant reste à ‘1’ (par défaut)., Cela signale au périphérique maître que l’identification du périphérique esclave échoue. L’horloge maître met fin à la transaction en cours en envoyant une condition D’arrêt ou une nouvelle condition de démarrage
- Si un périphérique esclave existe avec la même adresse que celle spécifiée par le périphérique maître, le périphérique esclave définit le bit ACK/NACK sur ‘0’, ce qui signale au périphérique maître qu’un périphérique esclave est ciblé avec succès
- Si un périphérique esclave est ciblé avec succès, le périphérique maître envoie maintenant 8 bits de données qui ne sont pris en compte et reçus que par le périphérique esclave ciblé., le périphérique qui contrôle chacun d’eux:
lecture des données d’un périphérique esclave
la séquence des opérations reste la même que dans le scénario précédent, sauf pour ce qui suit:
- Le périphérique maître définit le bit de lecture/écriture sur ‘1’ au lieu de ‘0’ qui signale au périphérique esclave ciblé que le périphérique maître attend des données de celui-ci
- Les 8 bits correspondant au bloc de données sont envoyés par le périphérique esclave et le bit ACK/NACK est défini par le périphérique maître
- Une fois que les données requises sont reçues par le périphérique maître, il envoie un bit Nack., Ensuite, le périphérique esclave cesse d’envoyer des données et libère la ligne SDA
Si le périphérique maître lit des données à partir d’un emplacement interne spécifique d’un périphérique esclave, il envoie d’abord les données de localisation au périphérique esclave en suivant les étapes du scénario précédent. Il démarre ensuite le processus de lecture des données avec une condition de démarrage répétée.,
la figure ci-dessous représente l’ensemble des bits de données envoyés sur la ligne SDA et le périphérique qui contrôle chacun d’eux:
Concept d’étirement de l’horloge
disons que le périphérique maître a démarré une transaction et envoyé des bits d’adresse Le périphérique esclave spécifique doit envoyer un bit ACK, immédiatement suivi de données.
Mais si le périphérique esclave a besoin de temps pour récupérer et envoyer des données au périphérique maître, pendant cet écart, le périphérique maître pensera que le périphérique esclave envoie des données.,
pour éviter cela, le périphérique esclave maintient la ligne D’horloge SCL basse jusqu’à ce qu’elle soit prête à transférer des bits de données. Ce faisant, le périphérique esclave signale au périphérique maître d’attendre les bits de données jusqu’à ce que la ligne d’horloge soit libérée.
c’est tout pour cet article. Jetez un oeil aux projets ci-dessous pour avoir une idée sur la façon dont la communication I2C est pratiquement mise en œuvre, entre microcontrôleurs / Arduinos et différents capteurs:
Système de stationnement de voiture basé sur RFID
interface Arduino avec une unité de processeur de mouvement
interface Arduino Avec Horloge temps réel