Une liaison SPI (pour Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par Motorola, au milieu des années 1980 qui opère en mode full-duplex. Les circuits communiquent selon un schéma maître-esclave, où le maître contrôle la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée « Slave Select (SS) ».
Le bus SPI utilise quatre signaux logiques :
SCLK — Serial Clock, 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)
Il existe d'autres noms qui sont souvent utilisés :
SCK, SCL — Horloge (généré par le maître)
SDI, DI, SI — Serial Data IN, MISO
SDO, SDA, DO, SO — Serial Data OUT, MOSI
nCS, CS, nSS, STE, CSN— SS
Dans le cas de la convention de nommage SDI/SDO, le SDO du maître doit être relié 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 évitent une certaine ambiguïté ; pour exemple, une librairie graphique écrit par Adafruit, prend en charge plusieurs références de contrôleurs d'ecrans qui, malgré leurs actions similaires, ne possède pas toujours les mêmes noms de broches. Afin d'éviter ce "problème" les développeur ont renommé les broches MISO/MOSI par RD et WR signifiant respectivement ReaD (lire) et WRite (écrire) ; en conclusion on se demande si la broche Lire permet au Microcontroleur de Lire le Module LCD ou alors si elle permet au Module de Lire et donc au Microcontroleur de lui Écrire une donnée ?
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 par l'utilisation du signal SS
L'esclave répond aux requêtes du maître
À chaque coup d'horloge le maître et l'esclave s'échangent un bit.