LE BUS SPI
• le bus SPI (Serial Peripheral Interface)
• Autre appellation « Microwire » ou bien encore « bus série trois fils ».
• Un bus de ce type permet la connexion, sous forme série maître-
esclave, de plusieurs circuits disposant d’interfaces compatibles, avec
seulement trois fils de liaisons.
• SPI a des lignes labellisés « MOSI » : Master Output Slave Input, généré
par le maître.
• des lignes labellisées « MISO » : Master Input Slave Output, généré par
l’esclave.
• une ligne d’horloge (SCK : SPI Serial Clock).
Ces trois lignes sont connectées à leurs lignes respectives sur un ou plusieurs esclaves. Les
esclaves sont identifiées grâce au signal de leur ligne SS (Slave Select). Autres nommages
possibles : SDO (Serial Data Out) et SDI (Serial Data Input).
La figure ci-dessous illustre les connexions SPI.
Maître SPI avec plusieurs esclaves SPI
Les numéros de broches à utiliser pour les broches SPI sont listés dans
le tableau ci-dessous.
Schéma de principe
• Deux registres à décalages sont généralement mis en œuvre.
• Ils peuvent être de type matériel ou logiciel, selon les dispositifs
employés. Par exemple, le RasPi implémente son registre à décalage
de façon logiciel alors que le MCP3008 (ADC) est équipé d’un registre
à décalage matériel.
• Quelque soit leur mise en œuvre, ces deux registres à décalage
forment un buffer circulaire interpuce, qui se trouve au cœur de la
liaison SPI.
Les communications sont initiées par le maître, qui commence par
sélectionner l’esclave. Au cours de chaque cycle d’horloge, le maître
envoie un bit à l’esclave, qui le lit sur la ligne MOSI.
En parallèle, l’esclave envoie un bit au maître, qui le lit sur la ligne MISO.
Ces lectures et écritures simultanées entre le maître et l’esclave forment
une communication Full-Duplex.
La fréquence de l’horloge dépend principalement des possibilités de
réponse de l’esclave. Par exemple, le MCP3008 alimenté en 5 V est
capable de gérer des fréquences de données allant jusqu’à 3,6 MHz.
Toutes les liaisons SPI respectent le chronogramme général ci-dessous, mais
quatre variantes existent au niveau de la prise en compte des données qui sont
échangées.
• Ces variantes sont parfois appelées modes SPI et sont alors numérotées
de 0 à 3. En présence d’un circuit à interface SPI, il vous suffira de
comparer sa fiche technique avec le chronogramme pour savoir dans quel «
mode » il fonctionne.
• Ces quatres modes sont définis par la polarité de l’horloge, appelée
CPOL (Clock POLarity), qui peut-être égale à 0 ou à 1, et par la phase
de cette même horloge, appelée CPHA (Clock PHAse), par rapport aux
données, qui peut être aussi égale à 0 ou à 1. Cela conduit aux
quatres possibilités, qui indiquent sur quel front du signal d’horloge les
données sont échantillonnées et peuvent donc être considérées
comme valides.
• Par défaut, le mode le plus courant est appelé mode 0, c’est-à-dire
celui ou CPOL et CPHA sont tous les deux nuls.
Les quatres modes de prise en compte des données de la liaison SPI
La gestion d’une liaison SPI avec l’Arduino est facile à
mettre en oeuvre. Les micro-contrôleurs d’Atmel
Atmega disposent d’une interface SPI dont les
entrées/sorties se répartissent comme suit :
SCK sur 13, MISO sur 12, MOSI sur 11 et /SS sur 10
pour les Uno.
L’environnement de développement contient une
bibliothèque nommée, SPI.h, qui permet une gestion
logicielle très simple du protocole de dialogue des
liaisons SPI.