Accueil > Electronique > FPGA > Contrôleur I2C

Contrôleur I2C

samedi 23 juin 2007, par Steve

Introduction

La description qui suit est un contrôleur de bus I2C élémentaire. Il ne gère pas le mode multi-maître, toutefois le « clock streching » est pris en charge.
La fréquence de transmission est défini grâce à un décompteur externe à la description.

Découpage

Le contrôleur est découpé en plusieurs séquenceurs dont la liste exhaustive est la suivante :
- le séquenceur de requête,
- le détecteur d’événements de bus,
- le séquenceur de bus,
- le contrôleur de bus et
- une bascule RSC.

Chaque unité sera décrite dans les détails ci-dessous.

Le séquenceur de requête

Cette description prend en charge le séquencement des actions sur le bus, à savoir :
- la condition de “Start” (start_req),
- la condition de “Repeat Start” (repeat_start_req),
- la condition de “Stop” (stop_req) et
- la génération de l’horloge lors de la transmission des données (byte_req).

Le bloc a besoin de connaître :
- l’état du bus (busy) et
- l’état de l’action (complete).

Et il fournit :
- la demande d’exécution de la condition de “Start” (process_start),
- la demande d’exécution de la condition de “Repeat Start” (process_repeat_start),
- la demande d’exécution de la condition de “Stop” (process_stop),
- la demande d’exécution du signal d’horloge et
- l’état d’activité des actions de bus.

Le détecteur d’événements de bus

Cette description permet de détecter une condition de “Start” ou “Repeat Start”, une condition de “Stop”, le front montant du signal d’horloge ou le front descendant du signal d’horloge.
Ces informations sont importantes pour le séquencement de certains unités.

Le séquenceur de bus

Cette description permet de générer :
- la condition de “Start”,
- la condition de “Repeat Start”,
- la condition de “Stop”,
- le signal d’horloge nécessaire aux échanges de données.

Lors de la génération d’horloge, le bloc nécessite l’état du signal “SCL” afin de traiter le cas du “clock strech”.
En effet, lorsque le séquenceur impose un niveau haut sur l’horloge, il attend que le signal passe effectivement à un avant de lancer un processus extérieur de temporisation.

Le contrôleur de bus

Cette description permet de :
- détecter la direction du transfert,
- indiquer l’instant où doit se produire l’acquittement et
- fournir l’état du bus.

Le bloc utilise les signaux “start” et “stop” pour indiquer l’état du bus. Le signal interne “first” associé au compteur interne et au signal “sda” permet de détecter la direction du transfert. Le compteur est aussi utilisé pour détecter l’instant où les acquittements doivent se produire.

La bascule RS

La bascule RS est synchrone à une horloge. De plus, l’entrée de mise à un (S) est prioritaire.

Voici la description VHDL de la bascule :

Le contrôleur de bus I2C

Le contrôleur de bus I2C est composé de toutes les descriptions ci-dessus auxquels on ajoute un multiplexeur pour la génération du signal SDA en sortie, un premier registre à décalage pour l’émission et un second pour la réception ainsi que deux blocs de synchronisation pour les signaux SDA et SCL en entrée.

Le contrôleur nécessite un compteur extérieur afin de définir la fréquence de SCL.

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides.