http://jp79dsfr.free.fr/Photo-Tech/ v 1.00 - ©JP 05/02/2017 B Bu us s e et t m
http://jp79dsfr.free.fr/Photo-Tech/ v 1.00 - ©JP 05/02/2017 B Bu us s e et t m mo od du ul le es s I I² ²C C p po ou ur r A Ar rd du ui in no o ( ( B Bu us s s st to op p o ou u 7 7 j jo ou ur rs s d de e r ré éf fl le ex xi io on n ? ? ) ) Table des matières Généralités Bus I²C 1 Rappels fonctionnement bus I²C 2 Principe de fonctionnement simplifié protocole 2 Exemples de trames I²C 3 Récapitulatif composants courants et plan d'adressage 4 Bus physique et cartes Arduino 5 Lignes SDA - SCL 5 Connexion Arduino 6 Connecteur et adaptateurs 6 Changement de tension 7 Bibliothèque wire Arduino 8 Fonctions de base bibliothèque 8 Déclarations et initialisation 8 Accès bus mode maitre 8 Accès bus mode esclave 9 Vitesse bus I²c 9 Exemples d'utilisation en mode maitre 10 Périphériques I²C 12 Adaptateurs digitaux - GPIO 12 Buffers 8 ports E/S : PCF8574A 12 Descriptif circuit intégré 12 Ports d'entrée sortie 12 Sortie Int 13 Caractéristiques électriques principales 13 Modules commerciaux chinois 14 Exemples d'utilisation Arduino 14 Affichage Led 7 segments 2 digits 15 Clavier 16 touches multiplexé X-Y 16 Afficheur 6 Leds + Clavier 6 entrées 18 Buffers 16 ports E/S : PCF8575 19 Driver de Leds PWM 16 canaux : PCA9635 - PCA9685 20 Modules commerciaux 20 Schéma shield 21 Fonctionnement interface I²C 21 Adressage et dialogue I²C 21 Registres interne 21 Fonctionnement PWM 22 Librairie Arduino 23 Contrôleur de clavier XY capacitif MPR121 25 Sondes et divers analogique 26 Convertisseur analogique numérique ADS1114/1115 26 Potentiomètre 10K MCP4661-103EST 27 Sonde de température LM75 28 Schéma module 28 Fonctionnement interface I²C 28 Dialogue I²C 29 Utilisation Arduino 29 Afficheurs 30 Driver afficheur alphanumérique LCD - Hitachi 44780 30 HK16K33 Adafruit 87x : Matrice 8x8 led - HT16K33 31 Mémoires et processeurs 32 Horloge temps réel RTC DS1307 32 Hardware 32 Fonctionnement Interface I²C 33 Cartographie mémoire 33 Utilisation Arduino 34 Accès direct par la bibliothèque Wire 34 Librairie DS1307RTC 35 Mémoires AT24Cxx 37 Fonctionnement Interface I²C 38 Temps de latence d'écriture 39 Write protect 39 Utilisation Arduino 40 Exemple d'utilisation basique 24c32 40 Liens et révisions document 43 Liens 43 Révision 43 Arduino I²C Page 1 Généralités Bus I²C A l'origine le bus I²C (Inter IC) ou parfois dénommé TWI (Two wire interface) est un système développé par Phillips - NXP pour simplifier les problèmes de câblage interne a une machine causés par l'inflation du nombre de systèmes d'entrée sorties (actuateurs, claviers, afficheurs) et pour standardiser les échanges entre composants complexes (mémoires, horloges RTC …..). Ce bus constitué de deux signaux actif permet un dialogue bidirectionnel entre les différents périphériques directement câblés en parallèle, l'utilisation optionnelle de multiplexeurs et de drivers de bus permet d'en augmenter les possibilités et le nombre de périphériques connectés. En raison de sa souplesse d'emploi le bus I²C est devenu un standard de facto, de nombreux constructeurs l'ayant adopté et distribuant une multitude de composants proposants des fonctionnalités variées dépassant les simples ports d'entrée sortie de base d'origine. On trouvera par exemple : • Gpio (Port E/S) : PCF8574-8575, PCA950x, MCP23017 • Drivers et afficheurs à Led : HT16K33, TLC5947, MAX6955-58-59, PCA953x-955x • Afficheurs LCD alphanumériques ou graphiques : PCF8577 • Gestionnaires de clavier : LM8330, MPR121 • Convertisseurs A/D- D/A : ADS1000, LTC2309, MCP4725, DAC7571, DAC8574 • Potentiomètres : AD5171, AD5243, MCP4661, TPL401, Max5417-19, • Gyroscopes et capteurs 6 axes : FX0S8700, • Sondes de pression ou temperature : LM75, SE95, SA56004, MPL3115, • Mémoires EEprom : Atmel 24Cxx, 24M0x, PCF8594, PCF8570 (Ram) • Ponts Série ou USB : Max3107, CY7C6521, • Horloges RTC : DS1307, DS1337, DS3231, PCA85063, PCF8523 • Récepteurs GPS N'étant conçu que dans un but d'interconnexion de systèmes d'une même machine ce bus n'est pas prévu pour des liaisons distantes, en raison des faibles capacités parasites permises par l'utilisation de sorties a collecteur ouvert la longueur maximale d'un bus ne pourra dépasser quelques mètres. Pour des distances supérieures plusieurs solutions préférables existent dont les liaisons série RS232 ou RS485. Convertisseurs A/D ou D/A GPIO Clavier Afficheur LED ou LCD Répétiteur / Driver bus I²C CPU Esclave I²C Switch Vcc1 Vcc2 Horloge RTC EEProm paramètres Afficheur LCD graphique Capteur température Vcc3 Processeur central Maitre Vcc0 Arduino I²C Page 2 Rappels fonctionnement bus I²C Principe de fonctionnement simplifié protocole Le bus I²C est basé sur un mode de transmission bidirectionnel sériel synchrone entre un maitre et un ou plusieurs périphériques esclaves. Ce bus dit 2 fils utilise outre la référence Gnd un signal d'horloge de synchronisation (SCL Serial Clock Line) et un signal de donnée (SDA Serial Data Line). Si chaque élément connecté en parallèle au bus reçoit les données émises par tous les autres, seul le maitre génère le signal d'horloge. Chaque esclave est sélectionné par une adresse codée un octet : 7 bits d'adressage effectifs plus celui de poids faible R/W déterminant le sens du dialogue. L'adresse 00 étant réservée au broadcast (envoi simultané de données a l'ensemble des esclaves) il est alors possible dans les limites de l'aspect physique du bus de connecter 127 périphériques différents simultanément. Dans l'absolu ceci n'est pas tout à fait vrai, quelques autres adresses étant réservées et un mode étendu 10bits permettant 1024 adresses étant possible, dans le cadre courant de ce document seul le mode de base sera utilisé. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0 : Ecriture 1 : Lecture Adresse périphérique esclave R / W Adresse complète L'ensemble des utilisateurs du bus pouvant être alternativement maitre (initiateur d'un dialogue) ou esclave et utilisant les mêmes signaux simultanément plusieurs problèmes vont être rencontrés dont en particulier les phénomènes de collision. Pour éviter que plusieurs périphériques émettent au même moment un système de ticket va être utilisé avec la génération de deux bits spécifiques Start et Stop, la détection d'un bit Start sur le bus provoque le passage en mode esclave des autres périphériques pendant une durée évitant tout risque de collision Les bits Start et Stop sont respectivement définis par une transition Haut-bas et Bas-Haut de SDA quand l'horloge SCL est au niveau haut, les données doivent elles être stables pendant cette période. SDA SCL Start Data Stop Les séquences de transfert de données du maitre vers le périphérique esclave utiliseront les structures suivantes : Maitre Ecriture vers le périphérique Esclave Envoi > Bit Start : Ouverture transaction > Ecoute générale Envoi > AAAA AAA0 : Adresse esclave WRITE > Lecture et attente data Lecture < Bit Acquittement esclave prêt + Pause < Envoi Envoi > DDDD DDDD : Donnée > Lecture et memo data Lecture < Bit Acquittement donnée bien reçue + Pause < Envoi Envoi > DDDD DDDD : Donnée > Lecture et memo data Lecture < Bit Acquittement donnée bien reçue + Pause < Envoi …….. Envoi > Bit Stop : Fermeture transaction > Passage en écoute générale Arduino I²C Page 3 Maitre Lecture depuis le périphérique Esclave Envoi > Bit Start : Ouverture transaction > Ecoute générale Envoi > AAAA AAA1 : Adresse esclave READ > Lecture et attente data Lecture < DDDD DDDD : Donnée < Envoi data Envoi > Bit Acquittement donnée bien reçue + Pause > Lecture Lecture < DDDD DDDD : Donnée < Envoi data Lecture > Bit Acquittement donnée bien reçue + Pause > Lecture …….. Envoi > Bit Stop : Fermeture transaction > Passage en écoute générale Chaque octet émis est suivi lors du neuvième top d'horloge par un bit a zéro ACK d'acquittement si l'opération s'est bien déroulé ou au contrait un bit a l'état un NACK dans le cas contraire. Les échanges entre les périphériques I²C seront donc toujours effectués par trames constituées d'un octet d'adressage suivi de un ou plusieurs octets de donnés, le tout géré par le périphérique maitre, ce principe de fonctionnement se retrouvera dans l'architecture de la bibliothèque Arduino wire basée elle aussi sur l'ouverture et la fermeture de blocs de transaction. Un descriptif complet du fonctionnement du bus peut être trouvé dans le document UM10204 édité par Phillips / NXP : http://www.nxp.com/documents/user_manual/UM10204.pdf Exemples de trames I²C Ces trames ont été relevées avec le programme de test exemple de la bibliothèque wire avec un périphérique d'adresse 0x27 => Valeur premier octet envoyé en écriture 27 << 1 + 0 = 0x4E, en lecture : 27 << 1 + 1 = 0x4F. Périphérique esclave déconnecté, essai d'écriture puis de lecture. Ecriture de 1 octet sur périphérique en mode standard 100kHz Ecriture de 4 caractères ascii sur périphérique en mode standard 100kHz Lecture de 3 octets sur périphérique en mode standard 100kHz Durée totale trame = 210µs 495µs 407µs Arduino I²C Page 4 Récapitulatif composants courants et plan d'adressage Composant Type Marque Nb entrées d'adressage Plage d'adresse (hex 7bits) Vitesse bus Std Fast F+ - Broadcast 0x00 - Reset (option certains composants en écriture uploads/Litterature/ elec-arduino-bus-i2c.pdf
Documents similaires










-
37
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 12, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 2.3616MB