Main

Référence : Langage Arduino : [ Mini | Standard | Etendue | Maxi ] Librairies : [ Vue d'ensemble | Synthèse ] Infos : [ Comparaison | Changements ]

La librairie SPI (Serial Peripheral Interface ou Interface Série pour périphérique)


Description

Cette librairie vous permet de communiquer avec des périphériques SPI, avec la carte Arduino en tant que composant "maître".

Les fonctions de la librairie SPI

Une brève introduction à l'interface série pour périphérique (SPI)

L'interface Série pour périphériques (SPI) est un protocole de communication série synchrone simple utilisé par les microcontrôleurs (tels que la carte Arduino) pour communiquer avec un ou plusieurs composants périphériques rapidement sur de courtes distances. Ce protocole peut aussi être utilisé pour des communications entre deux microcontrôleurs.

Communication SPI avec le composant "maître" et un composant "esclave".

Avec une connexion SPI, il y a toujours un composant maître (habituellement un microcontrôleur) lequel commande le ou les composants périphériques. Typiquement, il y a 3 lignes communes à tous les composants et qui les relient entre eux :

  • la ligne Maître entrant - Esclave sortant (ou MISO pour "Master In Slave Out" en anglais ) : c'est la ligne utilisée pour envoyer des données depuis le(s) périphérique(s) vers le maître,
  • la ligne Maître sortant - Esclave entrant ( ou MOSI pour "Master Out Slave In" en anglais) : c'est la ligne utilisée pour envoyer des données du maître vers le(s) périphérique(s).
  • la ligne du signal d'horloge ( ou SCLK pour Serial Clock en anglais) : cette ligne transmet les impulsions de signal d'horloge générées par le composant maître et qui synchronisent la transmission des données.

A ces 3 lignes communes, s'ajoutent une ligne de sélection par périphérique :

  • la ligne de sélection de l'esclave (ou /SS pour "Slave Select" en anglais) : chaque composant périphérique dispose d'une broche de sélection (active sur le niveau BAS) que le composant maître peut utiliser pour activer ou désactiver le(s) composant(s) périphérique(s) voulu(s). Quand cette broche est mise au niveau HAUT, le composant ignore ce qui se passe sur le bus SPI. Ceci permet d'avoir plusieurs composants périphériques qui se partagent les 3 lignes de communications MISO, MOSI et SCLK

Pour plus d'information, voir la page Wikipédia sur SPI.

Principe de mise en oeuvre de la communication SPI

Pour écrire un programme pour un nouveau composant SPI, il faut prendre en compte plusieurs éléments :

  • Les données série sont-elles envoyées avec le bit de poids fort (ou MSB pour "Most Significant Bit" en anglais) ou avec le bit de poids faible (ou LSB pour "Least Significant Bit" en anglais) en premier ? Ceci est contrôlé par la fonction SPI.setBitOrder().
  • Le signal d'horloge est-il inactif sur le niveau HAUT ou le niveau BAS ?
  • Les données sont-elles prises en compte sur le front montant (FM) ou le front descendant (FD) de l'impulsion d'horloge ? Ceci et le niveau actif de l'horloge sont contrôlés par la fonction SPI.setDataMode()
  • A quelle vitesse le bus SPI fonctionne-t-il ? Ceci est contrôlé par la fonction SPI.setClockDivider()

Le standard SPI est libre et chaque composant l'implémente de façon légèrement différente. Cela signifique que vous devrez donner une attention spéciale à la lecture de la fiche technique (datasheet) du composant utilisé quand vous écrirez votre code. De façon générale, il y a 3 modes de transmission. Ces modes définissent la façon dont les données sont envoyées en entrée et en sortie sur le front montant ou descendant du signal d'horloge (appelé également la phase d'horloge), et également définissent si le signal d'horloge est inactif sur le niveau HAUT ou BAS (appelé également la polarité d'horloge). Ces trois modes combinent la polarité et la phase d'horloge. La fonction SPI.setDataMode() vous laisse définir mode de fonctionnement en fonction de la polarité et de la phase de l'horloge, en accord avec ce tableau :

ModeClock Polarity (CPOL)Clock Phase (CPHA)
000
101
210
311

Une fois que vos paramètres SPI sont configurés correctement, il ne vous reste plus qu'à déterminer quels registres de votre composant contrôlent quelles fonctions, et vous alors opérationnel. Ceci sera expliqué dans la fiche technique (datasheet) de votre composant.

Connexions SPI de la carte Arduino

Sur la carte Arduino UNO, Duemilanove et autres cartes basées sur les ATmega 168 / 328, le bus SPI utilise les broches :

  • 10 : /SS
  • 11 : MOSI
  • 12 : MISO
  • et 13 : SCLK.

Sur l'Arduino Mega, ce sont les broches :

  • 50 : MISO
  • 51 : MOSI
  • 52 : SCLK
  • et 53 : /SS

Sur la carte UNO et la Mega, les broches 1, 3 et 4 du connecteur ICSP sont connectées aux broches MISO, MOSI et SCLK. Ceci permet notamment l'utilisation de modules Arduino indifféremment avec une carte UNO et Mega, la connexion SPI se faisant par les 3 broches du connecteur ICSP connectées au bus SPI.

Noter que même si vous n'utilisez pas la broche /SS, elle doit quand même être configurée en sortie; sinon, l'interface SPI sera mise en mode "esclave" et rendra la librairie inopérante.

Il est possible d'utiliser une autre broche que la broche 10 en tant que broche de sélection de périphérique ( /SS pour Slave Select - active sur niveau BAS). Par exemple, le module Arduino Ethernet utilise la broche 4 pour activer la connexion SPI avec la carte mémoire SD et la broche 10 pour activer la connexion SPI avec l'interface Ethernet.

Principe d'utilisation

Pour inclure la librairie SPI dans un programme, on ajoutera au début du programme la ligne suivante :

#include <SPI.h>

Pour ce faire, le plus simple est d'utiliser le menu du logiciel Arduino Programme > Importer Librairie > Nom_librairie

Voir également l'instruction #include

Exemples d'utilisation :

Sur ce site :

Sur le site Arduino Anglais :

Voir également :

  • L'instruction shiftOut(broche, BrocheHorloge, OrdreBit, valeur)

Page d'accueil de la référence Arduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées sur le Forum Arduino ou à l'adresse suivante : support_at_mon-club-elec_point_fr

Le texte original de la référence Arduino est sous licence Creative Commons Attribution-ShareAlike 3.0 . Les exemples de code dans la référence sont dans le domaine public.

La présente traduction française commentée a été réalisée par Xavier HINAULT (2010-2012) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.

Cette page est une traduction de la page originale : http://arduino.cc/en/Reference/SPI Voir également : librairie pour communication SPI (en anglais)