vendredi 11 septembre 2015

interface SPI

Dans cet article j'explique ce qu'est une interface SPI sans faire référence à un MCU en particulier. Il s'agit simplement de comprendre le fonctionnement de ce protocole de communication.

Serial Peripheral Interface

voici un schéma représentant cette interface.

Il s'agit donc d'un protocole de communication sériel. C'est à dire que les bits d'information circulent à la queue leu leu sur 1 seul fil. Cependant contrairement au protocole RS-232 il y a un signal clock sur un autre fil qui sert à synchroniser l'information.

Description des signaux

  • SCLK, Serial CLOCK est un signal de synchronisation qui détermine la position des bits.
  • MOSI est l'acronyme de Master Output Slave Input. Ce fil sert à transmettre les bits d'information du maître vers l'esclave.
  • MISO est l'acronyme de Master Input Slave Output. Ce fil sert à transmettre les bits d'information de l'esclave vers le maître.
  • SS est l'acronyme de Slave Select. Sur un bus SPI il peut y avoir plusieurs périphériques esclaves. Ce signal permet de sélectionner lequel est actif pour la communication. Notez la présence d'une barre au dessus du SS sur le schéma. Cette barre signifie que ce signal est actif lorsque le voltage est à zéro. Donc on sélectionne un esclave en mettant sa ligne SS à zéro. Les signaux de sorties d'un esclave non sélectionné sont en haute impédance et il ignore les signaux SCLK et MOSI.

A l'interne

A l'interne une interface SPI possède un seul registre à décalage1 pour la transmission et la réception.

Le maître comme son nom l'indique contrôle la communication. Les étapes de la communication sont les suivantes:
  1. Mettre à zéro la ligne SS de l'esclave.
  2. Envoie d'un octet de commande. En inscrivant l'octet dans le registre à décalage.
  3. Lecture de l'octet reçu de l'esclave
  4. Envoie des arguments de la commande
  5. Lorsque l'échange est terminé remettre la ligne SS à Vdd.

Le bit le plus significatif est envoyé en premier. Si vous regardez le schéma du transfert de donnée vous voyez que le maître comme l'esclave n'ont besoin que d'un seul registre à décalage pour recevoir et transmettre. La transmission et la réception se font en simultané. A chaque cycle du signal SCLK les registres de chacun sont décalés vers la gauche et reçoivent un bit d'information dans le bit de droite qui vient d'être libéré par le décalage vers la gauche.

Pour un octet, après 8 périodes du signal SCLK les registres de décalage du maître et de l'esclave contiennent un nouvel octet reçu de l'autre partie. Si besoin est le maître qui est habituellement un MCU peut lire le registre pour récupérer cet octet avant de l'écraser avec le prochain octet à transmettre.

Phase et polarité

Avant d'utiliser une interface SPI sur MCU ont doit déterminer les paramètres suivants:

  • Est-ce que le MCU est le maître ou l'esclave?
  • Quel est la fréquence du signal SCLK?
  • Quel est la phase du signal SCLK, paramètre CPHA
  • Quel est la polarité du signal SCLK, paramètre CPOL

Dans la majorité des cas le MCU sera le maître et la fréquence de SCLCK dépend des capacités du MCU, du périphérique SPI et de l'application.

La phase CPHA et la polarité CPOL de SCLK dépend du périphérique SPI utilisé. Ces paramètres sont configurés par l'état d'un bit dans un registre de configuration de l'interface SPI sur le MCU. Puisqu'il y a 2 bits il y a 4 combinaisons possibles:

MODECPOLCPHAdécalageéchantillonnage
000Tr desc.Tr mont.
101Tr mont.Tr desc.
210Tr mont.Tr desc.
311Tr desc.Tr mont.

CPOL détermine simplement à quel niveau logique doit-être la ligne SCLK lorsque l'interface est au repos. Lorsque ce bit est à zéro ça signifie que la ligne SCLK est à zéro au repos sinon elle est à 1.

CPHA détermine sur quelle transition le registre est décaler, i.e. envoie du bit sur la ligne. L'autre transition et utilisée pour échantillonner le bit sur la ligne de réception.

Le tableau ci-haut indique l'influence de ces 2 paramètres sur le moment du décalage et de l'échantillonnage.

exemple de périphérique SPI

Microchip vend des mémoires à interface SPI. Nous allons prendre pour notre exemple un 23LC512 qui est une mémoire RAM sérielle de 64Ko.

La procédure de communication est celle indiquée ci-haut. Supposons qu'on veut écrire un octet dans la RAM. Le diagramme suivant indique le timing sur l'entrée SPI du 23LC512.

Sur ce diagramme le signal SI correspond au signal MOSI de l'interface SPI. On voit donc que le 23LC512 échantillonne la ligne MOSI sur la transition montante. On voit aussi que le signal SCK est à zéro lorsque l'interface est inactive. Donc Sur le MCU on va configurer CPOL=0 et CPHA=0 c'est à dire le mode 0 selon la table ci-haut.

Si on regarde le diagramme du timing de la ligne SO (MISO du SPI) du 23LC512 on a ceci.

Les chiffres sur ces diagrammes réfère à une ligne de la table AC CHARACTERISTICS. La 12 de cette table nous dit que le signal sur la ligne SO est valide au maximum 25nsec (nanosecondes) après la transition descendante de SCK. Donc le maître peu lire en toute confiance cette ligne sur la transition montante à condition que le temps entre la transition descendante et la transition montante de SCK soit d'au moins 25nsec. Ce qui correspond à une fréquence maximale pour le signal SCLK de l'interface SPI de 20Mhz2.

Conclusion

Pour utiliser une interface SPI sur un MCU le plus important est de comprendre la relation entre CPOL et CPHA et de connaître les paramètres des signaux du périphérique utilisé. Le protocole SPI est utilisé entre autre par des mémoires sérielles RAM, EEPROM et FLASH. Aussi par certains affichages LCD ainsi que pour les carte SD. Vos profiterez donc d'une bonne connaissance de ce protocole dans vos projets MCU.


Notes

  1. Un registre à décalage permet de sérialiser un bloc de bits. Il peut s'agit d'un octet ou d'un mot plus long. Le mot est inscris dans le registre ensuite un signal clock permet de décaler les bits dans le registre un bit à la fois vers une sortie unique (1 bit). Dans le cas du protocole RS-232 les bits sont sérialisés en sortant le bit de poids faible en premier. Pour le protocole SPI c'est le bit de poids fort qui est sortie en premier. Un registre à décalage peut aussi faire l'inverse. Sois recevoir un train de bits sur une entrée et par le même principe de décalage recouvrer le mot complet dans le registre. En anglais on parle de SerDes c'est à dire Serialiser/Deserialiser. Dans le protocole SPI c'est le même registre qui accompli les 2 fonctions.
  2. On suppose que le signal SCLK est une onde carrée et que Thigh=Tlow donc pour Tlow=Thigh=25nsec on a une période pour SCLK de 50nsec donc 20Mhz. C'est bien selon les spécifications du 23LC512 la fréquence maximale pour SCK.

Aucun commentaire:

Publier un commentaire