Le Bus SPI

SPI connection

Une liaison SPI (pour Serial Peripheral Interface) est un bus de donnée série synchrone baptisé ainsi par Motorola, et qui opère en Full Duplex. Les circuits communiquent selon un schéma maître-esclaves, où le maître s'occupe totalement de la communication. Plusieurs esclaves peuvent coexister sur un bus, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée"chip select".

 

Interface

Le bus SPI contient 4 signaux logiques

  • **SCLK** — Horloge (généré par le maître)
  • **MOSI** — Master Output, Slave Input (généré par le maître)
  • **MISO** — Master Input, Slave Output (généré par l'esclave)
  • SS — Slave Select, Actif à l'état bas, (généré par le maître)

 SPI Multi connection

Il existe d'autres noms qui sont souvent utilisés.

  • SCK — Horloge (généré par le maître)
  • SDI,DI,SI — Serial Data IN
  • SDO,DO,SO — Serial Data OUT
  • nCS, CS, nSS, STE — SS

 

Dans le cas de la convention de nommage SDI/SDO, le SDO du maître doit-être reliées au SDI de l'esclave et vice-versa. Pour éviter les confusions au moment du câblage, il est donc souvent recommandé d'utiliser les dénominations MISO-MOSI qui évite une certaine ambiguïté.

Fonctionnement

Une transmission SPI typique est une communication simultanée entre un maître et un esclave.

  • Le maître génère l'horloge et sélectionne l'esclave avec qui il veut communiquer
  • L'esclave répond aux requêtes du maître

A chaque coup d'horloge le maître et l'esclave s'échangent un bit. Après huit coups d'horloges le maître a transmis un octet à l'esclave et vice-versa. La vitesse de l'horloge est réglée selon des caractéristiques propres aux périphériques.

 

Transmission de donnée

Pour commencer une communication, premièrement, le maitre configure l’horloge en utilisant une horloge plus basse ou égale à la fréquence d’horloge que l’esclave supporte, ces fréquences sont généralement de l’ordre de 1 à 70MHz. Ensuite le maitre sélectionne la puce esclave désirée. Si une période d’attente est nécessaire (comme pour un convertisseur  analogique-numérique) le maitre doit attendre au moins ce temps de conversion pour pouvoir délivrer son cycle d’horloge.

 

data transmission

 

Durant chaque cycle d’horloge SPI, une transmission de donnée full duplex se produit :

  • Le maitre envoie un bit sur la ligne MOSI ; l’esclave lit ce bit sur la même ligne.
  • L’esclave envoie un bit sur la ligne  MISO ; le maitre lit ce bit sur la même ligne.

Une transmission normale fait appel à deux registres à décalages de la taille d’un mot donné, comme un mot de 8 bits, un pour le maitre et un pour l’esclave, ils sont connectés en anneau. Généralement, les données évoluent avec le bit le plus significatif en premier, donc le maitre et l’esclave s’échangent divers valeurs de registre. Ensuite, chaque périphérique prend cette valeur et gère celle-ci, comme l’écriture dans une mémoire. S’il y a plus d’échange de données, les registres à décalage sont chargés avec de nouvelles données et le processus se répète.

Les transmissions peuvent associer n’importe quels nombres de cycle d’horloge. Lorsqu’il n’y a plus de données à transmettre, le maitre arrête son horloge, normalement, cela désactive l’esclave.

Les transmissions sont souvent constituées de mots de 8 bits et un maitre peut initialiser de multiples transmissions en fonction de ces besoins. Toutefois, d’autres tailles de mot sont également courantes, comme exemple, un mot de 16 bits pour des écrans tactiles ou des contrôleurs de codecs audio.

Tout les esclaves sur le bus qui n'ont pas été activés en utilisant l’esclave sélectionné, car il ne tient aucun compte des lignes d'entrée d'horloge et des signaux MOSI. Le maitre choisit seulement un esclave à la fois.

 

Polarité et phase de l’horloge

La configuration de la SPI est souvent nommée dans les documentations techniques sous forme de nombre ou de couple, où le bit de poids fort est CPOL (Clock Polarity) et le bit de poids faible CPHA (Clock Phase).

 

Mode
CPOL
CPHA
0 (0,0)  0 0
1 (0,1)  0 1
2 (1,0)   1 0
3 (1,1)  1

1

 

polarity and clock phase

 

Les modes 0 et 3 sont identiques en transmission. La différence réside sur l'état au repos de la ligne d'horloge. C'est pour cette raison que de nombreux périphériques peuvent être capables de dialoguer soit en mode 0 et 3, soit en mode 1 et 2.

Trois paramètres principaux configure un port SPI : la fréquence d'horloge "bit" SCLK qui peut aller jusqu'à 10 MHz et qui est pré-divisée à partir de la fréquence de l'unité centrale ; la polarité de l'horloge, paramètre CPOL (Clock polarity) ; la phase de l'horloge, paramètre CPHA (Clock phase). Tous ces paramètres déterminent un diagramme de temps, pour chaque bit envoyé ou à chaque fois qu'un bit reçu est échantillonné. CPOL et CPHA ont deux état possible, donc cela fait 4 possibilités de configuration : chaque configuration étant incompatible entre elles et cela suppose que le maître doit avoir les mêmes paramètres que l'esclave avec lequel il dialogue, cela va de soit.

 

Au niveau supérieur

L'interface SPI ne dispose pas d'un mécanisme permettant de confirmer la réception des données par l'esclave. Il n'y a pas de protocole de communication particulier au niveau des trames envoyées ou reçues, et il n'y a pas non plus de contrôle de flux. Les esclaves sont vus comme des périphériques d'entrées / sorties par le maître, et il n'y a pas de protocole de haut niveau pour établir la communication entre le maître et l'esclave. C'est le travail du programmeur d'établir les règles de communication spécifiques pour chaque applications et / ou esclaves.