I2c

De troyesGEII
Révision datée du 13 mars 2014 à 22:08 par Bjacquot (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Introduction

I2C est un bus Conçu par Philips en 1982 pour les applications de domotique et d’électronique domestique.Il permet de relier facilement à un micro-processeur différents circuits.


Couche physique

Le principe de l'I2C consiste en l'échange de données entre un Maître et un ou plusieurs esclaves. Pour cela il y a deux types de lignes de connexions:

  • SDA(Serial Data Line): c'est une ligne de donnés bidirectionnelles.
  • SCL(Serial Clock Line):c'est une ligne de synchronisation bidirectionnelle.

(A savoir que tous ont une masse commune).

Architecture I²C avec plusieurs maîtres et plusieurs esclaves

Le codage utilisé est de type NRZ (non retour à 0). Cela consiste à avoir deux états significatifs distincts(0 et 1) sans état intermédiaire.Ici il faut maintenir stable le niveau "HIGH" ou "LOW" du SDA pendant que le SCL est en "HIGH" pour pouvoir lire un bit. Le câblage de l'équipement est fait en "ET cablé", s'il y a émission simultanée de deux équipements, c'est l'état 0 qui écrase l'état 1. En effet le niveau 0 est appelé " dominant" et le niveau 1 est appelé " récessif". La vitesse de transmission de données varie selon le mode de transmission choisi:

  • Standard(<ou= 100Kbits/s)
  • Fast(<ou= 400Kbits/s)
  • Fast plus(<ou= 1Mbits/s)
  • High-speed(<ou= 3,4bits/s)
  • Ultra-fast(<ou= 5Mbits/s)

Le temps et le niveau de tension dépend de la capacité du bus et de la valeur des résistance pull-up Rp. La valeur minimum des résistance est limitée par le courant de sorti SDA et SCL à l'état "LOW" et la valeur maximal l'est par les temps de montée et de descente.


Transmission de données

Pendant un transfert de données, la hiérarchie est toujours respectée, c'est à dire que le maître fait une demande soit de réception soit d’envoi envers le(s) esclaves(s). Le maître est appelé "émetteur" et l'esclave "récepteur". c'est donc le maître qui démarre le lien par la commande START, la un ou plusieurs octets sont envoyés afin de désigner un (ou plusieurs) esclave(s)( chaque esclave a une adresse unique), c'est l'étape d'adressage et pour que valider cette action l'esclave répond par un bit d'acquittement ACK ( ou NACK si l’acquittement n'a pas eu lieu). Après chaque acquittement, l'esclave peut demander une pause "PA", pour redémarrer il faut que le maître envoi une condition "RESTART". Les différentes conditions sont les suivantes:

  • START: correspond au début d'une trame et est déclenché par un passage de SDA de HIGH à LOW avec le SCL en HIGH.
  • Adressage 7 bits: il y a 7 bits d'adresse, le dernier étant le R/W s'il est à 0 le Maître envoi et l'Esclave lit, inversement s'il est à 1 le Maître demande et l'Esclave fournit.
  • Acquittement: deux types de signal:
    • soit 0 pour signaler la réception de l'octet (ACK).
    • soit 1 pour signaler un défaut dans la réception de l'octet (NACK).
  • Pause: l'Esclave met la ligne SCL à LOW pour bloqué les actions, le Maître doit maintenir le niveau HIGH sur la ligne jusqu'à ce que l'Esclave est fini pour pouvoir envoyé un nouvel octet.
  • Restart: c'est l'action du Maître pour commencer une nouvelle trame sans passer par l'action STOP.
  • STOP: cela correspond à la fin d'une trame. La ligne SDA passe de LOW à HIGH.

Il peut y avoir plusieurs Maîtres. Dans ce cas, il faut synchroniser les horloge par le principe du " ET cablé" sur la ligne SCL. Si un seul Maître la met à l'état LOW elle reste à l'état LOW mais il faut que tous les Maîtres la met en HIGH pour qu'elle passe en HIGH. Une autre loi est celle du temps d'état, en effet la durée LOW correspond au Maître ayant la durée LOW la plus longue contrairement à la durée HIGH qui correspond au Maître ayant la durée HIGH la plus courte. Deplus lorsqu'il y à l'a présence de plusieurs Maîtres, ils doivent respecter des règles:

  • si un Maître démarre un START les autres gardent le silence jusqu'au STOP.
  • Lors du STOP, le Maître stoppeur à un délai pour écrire une nouvelle trame, s'il le dépasse le bus devient libre.
  • si le bus est libre les autres Maîtres peuvent y accéder.
  • si plusieurs Maîtres écrivent en même temps c'est le premier niveau HIGH détecter qui définit le Maître autorisé à écrire et STOP tous les autres Maîtres.


Rapport avec notre projet

Notre but est de contrôler un moteur grâce à un ordinateur. Pour ceci on utilise un micro-contrôleur, mais celui-ci ne peut pas gérer le moteur seul, il y a un risque d'erreur, pour cela il nous faut donc utiliser un FPGA. Cependant pour communiquer entre FPGA et micro-contrôleur il nous faut une liaison. C'est là que l'i2c intervient, celui-ci va permettre de communiquer entre le FPGA (esclave) et le micro-contrôleur (maître). La principale difficulté est que, le contrôle du moteur est plus compliqué à réaliser par FPGA (VHDL) que par micro-contrôleur (C). Mais il existe une autre solution qui est le SPI.

Références