Différences entre les versions de « L'I2C de Damien Mercier »
(Page créée avec « <pre>Bonjour, Cette page est une simple copie du travail qu'avait effectué Damien Mercier avant de mettre son projet au repos. </pre> Le Bus I2C Image:i2c.gif<br> ... ») |
m (a déplacé Électronique/i2c/Damien Mercier vers L'I2C de Damien Mercier : On ne voit plus les /) |
||
(12 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 5 : | Ligne 5 : | ||
</pre> | </pre> | ||
Le Bus I2C [[Image:i2c.gif]]<br> | = Le Bus I2C [[Image:i2c.gif]]<br> = | ||
C'est un bus série à deux fils (SDA pour serial data et SCL pour serial clock) créé par Philips qui est conçu pour interfacer des périphériques lents à un microcontrôleur (I2C signifie Inter-Integrated Circuit). Les spécifications d'origine sont un débit de 100kbit/s et des adresses de composant sur 7 bits (le 8éme bit servant à indiquer une lecture ou une écriture). De très nombreux composants bon marché existent pour ce bus, convertisseur A/D, générateur DTMF, capteurs de température, récepteur de télécommande, entrées/sorties numériques ... pour ne citer que quelques exemples.<br> | C'est un bus série à deux fils (SDA pour serial data et SCL pour serial clock) créé par Philips qui est conçu pour interfacer des périphériques lents à un microcontrôleur (I2C signifie Inter-Integrated Circuit). Les spécifications d'origine sont un débit de 100kbit/s et des adresses de composant sur 7 bits (le 8éme bit servant à indiquer une lecture ou une écriture). De très nombreux composants bon marché existent pour ce bus, convertisseur A/D, générateur DTMF, capteurs de température, récepteur de télécommande, entrées/sorties numériques ... pour ne citer que quelques exemples.<br> | ||
<br> | |||
== Les solutions sous Linux<br> == | |||
Bien que créé au départ pour simplifier la conception d'équipements électroménager (hifi/video surtout), l'I2C est utilisé depuis longtemps dans le monde informatique. Il sert généralement en interne dans les cartes, c'est le cas par exemple des cartes à base de BT848 et BT878 qui utilisent un bus I2C pour piloter le tuner TV et les autres composants. Le système d'identification des paramètres des moniteurs VGA est aussi un bus I2C. Les cartes mères récentes ont également des capteurs de tension, de température et de rotation des ventilateurs qui sont basés sur un dérivé de l'I2C : le SMBUS. Il faut aussi citer l'ACCESS-BUS qui a servi comme bus clavier-souris sur certaines stations de travail.<br>Yail-I2C est un ensemble de bibliothèques et un driver permettant l'accès à un bus I2C sur une machine Linux. Yail-I2C est beaucoup plus simple et dispose de moins de fonctionnalités que les drivers I2C du noyau Linux. Si ce sont ces derniers qui vous intéressent, ils se trouvent là avec le projet lm_sensors : [http://www.national.com/ds/LM/LM78.pdf http://www.national.com/ds/LM/LM78.pdf]. D'autres informations sur les drivers à la source du projet se trouvent [http://voxel.at/prj/i2c/ ici.]<br>Sous FreeBSD et sous Windows existent aussi des outils pour l'I2C, voir les liens à la fin de ce document.<br><br> | |||
== Fonctionnalités de Yail-I2C<br> == | |||
Les techniques pour relier une machine au bus I2C sont nombreuses. Yail-I2C en supporte deux grandes catégories : l'interface ISA basée sur le composant PCF8584 (c'est une carte décrite dans Elektor de janvier 1992), et les interfaces dites bit-banging, c'est-à-dire où le bus est géré entièrement par logiciel.<br>Du point de vue d'un programme utilisateur, Yail-I2C est une bibliothèque qui fourni quelques appels de base permettant de communiquer avec le bus I2C. Il suffit de changer de bibliothèque pour changer d'interface physique !<br><br> | |||
== Interfaces simples (bit-banging)<br> == | |||
La bibliothèque est en deux morceaux, une partie qui se charge de la gestion du protocole I2C, et une autre partie qui effectue les commandes de lecture/écriture des signaux qui pilotent SDA et SCL. La version 1.6 utilise uniquement les lignes de contrôle du port série à cet effet. Il est facile de la modifier pour utiliser d'autres ports néanmoins, et une technique plus standard pour cet interfaçage est prévue pour une future version.<br> | |||
Carte ISA à PCF8584<br>Deux versions seront disponibles (fonctionnent sur ma machine, mais non-intégrées dans la version 1.6) : une version utilisant des entrées-sorties directes sur les adresses de la carte ISA depuis la bibliothèque, et une autre version où l'accès à la carte est fait dans un nodule chargé dans le noyau Linux.<br><br> | |||
=== Avantage/inconvéninets des deux solutions :<br> === | |||
*La solution à base de driver permet la gestion du PCF8584 en mode polling ou en mode interruptible, la version en bibliothèque ne permet que le polling ; | |||
*la solution à base de driver permet grâce à un mécanisme de verrouillage l'accès concurrent au bus I2C depuis plusieurs processus ou depuis plusieurs threads d'un même processus : | |||
*l'utilisation de ioports() et des entrées-sorties directes depuis une bibliothèque oblige à exécuter le programme avec les droits root (éventuellement en le mettant suid root), ceci n'est pas nécessaire lorsque le driver effectue l'accès au matériel ; | |||
*le driver n'existera dans un premier temps que pour les noyaux 2.2.x, la bibliothèque quand à elle fonctionne sans problème en 2.2.x et en 2.4.x.<br> | |||
<br> | |||
'''Remarque''' : du fait de la relative lenteur du bus I2C, les performances des deux solutions sont voisines. La solution bit-banging est bien sûr plus consommatrice de temps processeur.<br> | |||
{| cellspacing="1" cellpadding="1" border="1" align="center" style="width: 524px; height: 294px;" | |||
|+ Tableau des interface I2C pour port serie RS232C | |||
|- | |||
! scope="col" | <br> | |||
! scope="col" | <br> | |||
! scope="col" | <br> | |||
|- | |||
| '''Interfaces simples'''<br>(bit-banging)<br> | |||
| [[Image:Damien Merci bitbanding serial.gif|95x130px|Damien Merci bitbanding serial.gif]]<br>Schéma de principe <br> | |||
| Z1/Z2 Diodes Zenner 5v1<br>R1/R2 Résistances de 4K7 ohms 5%<br>1 Connecteur DB9<br> | |||
|- | |||
| '''Interfaces simples<br>'''''<b>à base de Transistors</b>''<br> | |||
| [[Image:Damien Merci level inverter.gif|80x119px|Damien Merci level inverter.gif]]<br>Schéma de principe<br> | |||
| Q1/Q2 Transistor 2N2222<br>R3/R4/R6/R7 Résistances de 1k5 ohms<br>R8/R5 Résistances de 10K ohms.<br> | |||
|- | |||
| '''Carte ISA<br>'''''<b>avec PCF8584</b>''<br> | |||
| [[Image:Damien Merci elektor sch.gif|193x179px|Damien Merci elektor sch.gif]]<br>Schéma de principe<br> | |||
| <br> | |||
|- | |||
| <br> | |||
| <br> | |||
| <br> | |||
|- | |||
| <br> | |||
| <br> | |||
| <br> | |||
|- | |||
| '''Connecteur DB9'''<br> | |||
| [[Image:Damien Merci schema serial db9.gif|193x131px|Damien Merci schema serial db9.gif]]<br>Schéma<br> | |||
| <br> | |||
|- | |||
| <br> | |||
| <br> | |||
| <br> | |||
|} | |||
<br> | |||
== Exemples de programmes basés sur Yail-I2C<br> == | |||
Des exemples de codes sont fournis avec les bibliothèques. Deux outils indispensables sont aussi présents, permettant de tester l'ensemble des adresses sur le bus pour obtenir la liste des composants (scani2c) pour l'un, et autorisant l'exécution de séquences quelconques en une simple ligne de commande sur le bus pour le second (i2csh).<br>Un exemple de réalisation d'un thermomètre basé sur un Dallas DS1621 branché et alimenté sur le port série est aussi fourni (showtemp), ainsi que plusieurs autres exemples à venir dans la version 1.7.<br><br> | |||
{| width="200" cellspacing="1" cellpadding="1" border="1" align="center" | |||
|- | |||
| [[Image:Damien Mercier serial.gif]] | |||
| [[Image:Damien Mercier termo.gif]] | |||
|- | |||
| valign="middle" align="center" | Le DS1621 au bout de l'anneau, et l'interface port série/I2C<br> | |||
| valign="middle" align="center" | Le thermomètre complet<br> | |||
|} | |||
<br> | |||
== Téléchargement<br> == | |||
*La version actuelle [http://download.gyptis.org/public/i2c/programmes/Damien_Mercier/Yail-I2C_1.6.tgz Yail-I2C_1.6.tgz] (556ko) [11/04/2002]<br> | |||
<br> | <br> | ||
== Lien == | |||
*{{(en)}} [http://www.standardics.nxp.com/support/documents/i2c/pdf/i2c.bus.specification.pdf Spécifications officielle I2C 3.0] <br> | |||
*{{(en)}} Le site de [http://www.i2c-bus.org/ l'inventeur]<br> | |||
*{{(fr)}} La page de [http://mbouget.perso.neuf.fr/ Marc BOUGET] (en français) ou on trouve beaucoup d'informations, et des outils, principalement sous Windows.<br> | |||
*{{(fr)}} [http://cgrosse1.free.fr/ Christophe Grosse]. (en français) propose plusieurs circuits venant se raccorder à l'I2C, ainsi qu'un source permettant de faire un composant I2C avec un PIC ! | |||
*{{(fr)}} La page de [http://membres.lycos.fr/hvin2000/index.html Zorglup] sur laquelle il y a des montages pour l'I2C (en français)<br><br> | |||
<br> | <br> | ||
<br> | |||
<br> | <br> | ||
<br> | <br> |
Version actuelle datée du 17 novembre 2011 à 15:23
Bonjour, Cette page est une simple copie du travail qu'avait effectué Damien Mercier avant de mettre son projet au repos.
Le Bus I2C Fichier:I2c.gif
C'est un bus série à deux fils (SDA pour serial data et SCL pour serial clock) créé par Philips qui est conçu pour interfacer des périphériques lents à un microcontrôleur (I2C signifie Inter-Integrated Circuit). Les spécifications d'origine sont un débit de 100kbit/s et des adresses de composant sur 7 bits (le 8éme bit servant à indiquer une lecture ou une écriture). De très nombreux composants bon marché existent pour ce bus, convertisseur A/D, générateur DTMF, capteurs de température, récepteur de télécommande, entrées/sorties numériques ... pour ne citer que quelques exemples.
Les solutions sous Linux
Bien que créé au départ pour simplifier la conception d'équipements électroménager (hifi/video surtout), l'I2C est utilisé depuis longtemps dans le monde informatique. Il sert généralement en interne dans les cartes, c'est le cas par exemple des cartes à base de BT848 et BT878 qui utilisent un bus I2C pour piloter le tuner TV et les autres composants. Le système d'identification des paramètres des moniteurs VGA est aussi un bus I2C. Les cartes mères récentes ont également des capteurs de tension, de température et de rotation des ventilateurs qui sont basés sur un dérivé de l'I2C : le SMBUS. Il faut aussi citer l'ACCESS-BUS qui a servi comme bus clavier-souris sur certaines stations de travail.
Yail-I2C est un ensemble de bibliothèques et un driver permettant l'accès à un bus I2C sur une machine Linux. Yail-I2C est beaucoup plus simple et dispose de moins de fonctionnalités que les drivers I2C du noyau Linux. Si ce sont ces derniers qui vous intéressent, ils se trouvent là avec le projet lm_sensors : http://www.national.com/ds/LM/LM78.pdf. D'autres informations sur les drivers à la source du projet se trouvent ici.
Sous FreeBSD et sous Windows existent aussi des outils pour l'I2C, voir les liens à la fin de ce document.
Fonctionnalités de Yail-I2C
Les techniques pour relier une machine au bus I2C sont nombreuses. Yail-I2C en supporte deux grandes catégories : l'interface ISA basée sur le composant PCF8584 (c'est une carte décrite dans Elektor de janvier 1992), et les interfaces dites bit-banging, c'est-à-dire où le bus est géré entièrement par logiciel.
Du point de vue d'un programme utilisateur, Yail-I2C est une bibliothèque qui fourni quelques appels de base permettant de communiquer avec le bus I2C. Il suffit de changer de bibliothèque pour changer d'interface physique !
Interfaces simples (bit-banging)
La bibliothèque est en deux morceaux, une partie qui se charge de la gestion du protocole I2C, et une autre partie qui effectue les commandes de lecture/écriture des signaux qui pilotent SDA et SCL. La version 1.6 utilise uniquement les lignes de contrôle du port série à cet effet. Il est facile de la modifier pour utiliser d'autres ports néanmoins, et une technique plus standard pour cet interfaçage est prévue pour une future version.
Carte ISA à PCF8584
Deux versions seront disponibles (fonctionnent sur ma machine, mais non-intégrées dans la version 1.6) : une version utilisant des entrées-sorties directes sur les adresses de la carte ISA depuis la bibliothèque, et une autre version où l'accès à la carte est fait dans un nodule chargé dans le noyau Linux.
Avantage/inconvéninets des deux solutions :
- La solution à base de driver permet la gestion du PCF8584 en mode polling ou en mode interruptible, la version en bibliothèque ne permet que le polling ;
- la solution à base de driver permet grâce à un mécanisme de verrouillage l'accès concurrent au bus I2C depuis plusieurs processus ou depuis plusieurs threads d'un même processus :
- l'utilisation de ioports() et des entrées-sorties directes depuis une bibliothèque oblige à exécuter le programme avec les droits root (éventuellement en le mettant suid root), ceci n'est pas nécessaire lorsque le driver effectue l'accès au matériel ;
- le driver n'existera dans un premier temps que pour les noyaux 2.2.x, la bibliothèque quand à elle fonctionne sans problème en 2.2.x et en 2.4.x.
Remarque : du fait de la relative lenteur du bus I2C, les performances des deux solutions sont voisines. La solution bit-banging est bien sûr plus consommatrice de temps processeur.
Exemples de programmes basés sur Yail-I2C
Des exemples de codes sont fournis avec les bibliothèques. Deux outils indispensables sont aussi présents, permettant de tester l'ensemble des adresses sur le bus pour obtenir la liste des composants (scani2c) pour l'un, et autorisant l'exécution de séquences quelconques en une simple ligne de commande sur le bus pour le second (i2csh).
Un exemple de réalisation d'un thermomètre basé sur un Dallas DS1621 branché et alimenté sur le port série est aussi fourni (showtemp), ainsi que plusieurs autres exemples à venir dans la version 1.7.
Le DS1621 au bout de l'anneau, et l'interface port série/I2C |
Le thermomètre complet |
Téléchargement
- La version actuelle Yail-I2C_1.6.tgz (556ko) [11/04/2002]
Lien
- Spécifications officielle I2C 3.0
- Le site de l'inventeur
- La page de Marc BOUGET (en français) ou on trouve beaucoup d'informations, et des outils, principalement sous Windows.
- Christophe Grosse. (en français) propose plusieurs circuits venant se raccorder à l'I2C, ainsi qu'un source permettant de faire un composant I2C avec un PIC !
- La page de Zorglup sur laquelle il y a des montages pour l'I2C (en français)