Vous êtes sur la page 1sur 14

LIAISON SPI 

: Serial Peripheral Interface.


Il s’agit d’un bus série synchrone bidirectionnel introduit par National Semiconductor et
Motorola, c’est-à-dire les données sont émises et lues en série et interprétées sur des fronts
d’horloges.

En l’absence de données à émettre ou lire, il n’y pas de signaux d’horloges. L’émission de


données est accompagnée par l’émission de signaux d’horloges. Un élément connecté au
bus est appelé un nœud. Le nœud qui génère l’horloge est appelé le maitre (master), les
autres nœuds sont les esclaves (slave ou servant).

Lors des échanges entre le maitre et un esclave, le maitre génère les signaux d’horloges,
émet (broche SDO ou MOSI : Master Out Slave In) et reçoit des données (broche SDI ou
MISO : Master In Slave Out). Celles-ci sont insérées dans un registre à décalage qui peut
être lu en interne sous la forme d’un registre parallèle. Il est possible de lire et d’écrire en
même tems : on parle de full duplex.
L’esclave possède lui aussi des broches (SDI ou MOSI : Master Out Slave In et SDO ou
MISO : Master In Slave Out). Les broches MOSI du maitre et des esclaves sont reliées entre
elles, il en est de même pour les broches MISO.
Le bus SPI peut avoir plusieurs nœuds esclaves, mais normalement, au plus un seul est actif à
un instant donné ; la sélection de l’esclave est réalisée à partir de signaux CS (Chip Select) ou
SS (Slave Select).

1
Notez que pour n esclaves, il faut (3+n) lignes, ce qui devient un inconvénient pour un bus série si le
nombre d’esclaves augmente.

En général le maitre peut être programmé pour :

 définir le nombre de bits de données à émettre ou lire,


 choisir la fréquence d’horloge,
 de choisir le mode de transmission (précisé ci-dessous). On parle de polarité (valeur au
repos) et de phase (si la phase est à 0, le premier front de SCK est actif, si phase est à 1, c’est
le deuxième front de SCK qui est actif.).

2
1. La bibliothèque SPI de MyRIO.

Lancer myRIO, puis MyRIO project >Next. Donnez un nom à votre projet >FINISH.

Ouvrir le fichier main dans l’arborescence du projet. Supprimer le contenu de la boucle


principale. Clic droit pour ouvrir la palette dans le diagramme puis, ouvrir la palette myRIO.

On obtient le résultat suivant :

Vous notez la présence de l’icône SPI. Ouvrez là, pour obtenir la configuration du bus SPI :

3
Il est possible de choisir :

 Le connecteur A ou B par l’onglet Channel.


 Les modes : lecture, écriture et lecture +Ecriture.
 La fréquence d’horloge (cliquer sur learn more pour avoir des précisions).
 La longueur de la trame (de 4 bits de données à 16 bits).
 Clock Phase (leading or trailing),
 Clock Polarity (low or High),
 Data Direction (MSB or LSB first).

2. Tests des modes et fréquences possibles.

Connecter la Breadbooard Adapter for Ni myRIO sur le port MXPA de myRIO. Pour rappel, on
a :

4
Pour le port MXPA :

 la broche MOSI est associée à DIO7,


 la broche MISO est associé à DIO6,
 La broche SCK est associée à DIO5.

Notez qu’il n’y a pas de broche SS ou CS, il faudra prendre une broche DIO non utilisée.

Nous allons faire des tests pour vérifier les configurations possibles de l’interface SPI de
MyRIO. La carte breadboard est présentée à la suite,

5
CAS 1 : Trames émises par myRIO sans récepteur.

myRIO est toujours maitre et il n’y a pas d’esclave (cas inutile en pratique). Seuls les signaux
émis par MOSI et SCK sont disponibles ; Câbler la sortie DIO7 (MOSI) sur la voie CH1 de
l’oscilloscope et la sortie DIO5 (SCK) sur la voie CH2. Ne pas oublier de relier la broche GNd à
la masse de l’oscilloscope.

Réaliser le vi suivant accompagné de la configuration du vi express SPI, la donnée à émettre


est en U8, hexadécimal et base affichée :

6
Compiler le projet et le télécharger dans myRIO, régler l’oscilloscope et observer les trames
obtenues. Les relever et les interpréter : front actifs, durée d’un bit, fréquence d’horloge,
nombre de bits émis, polarité et phases, mode ….

En restant dans ce mode, changer Data Direction en LSB first…Observations ? Changer


Frame length en 4 bits, qu’observez-vous et LSB first a- t- il une influence sur 4 bits ? Et sur
16 bits ?

En restant sur une longueur de 16 bits, changer la donnée à émettre (la changer en
U16) :0x34E9, vérifier le résultat obtenu : une trame de 16 bits est émise.

Est-ce le même résultat qu’avec l’émission de deux octets non signés ? Pour le savoir réaliser
le vi suivant (données en U8) et faire le test à l’oscilloscope.

7
Vous notez que dans ce cas, 8 tops d’horloges seulement sont émis, donc on a l’impression
qu’un seul octet est émis. Changer la base de temps de l’oscilloscope pour observer deux
trames sur le même écran (mode single seq) puis dilater la base de temps pour observer les
contenus ! Conclure.

Modifier la configuration du vi express SPI (8bits) pour obtenir les modes 1, puis 2 puis 3.

Compléter le tableau suivant établissant la correspondance entre les chronogrammes de la


page 2 et l’interface de configuration de la page 6 :

MODE Clock Phase Clock polarity


Mode 0 Leading Low
Mode 1
Mode 2
Mode 3

CAS 2 : Trames émises par myRIO avec récepteur myRIO sur le même port.

Relier les broches DO6 à DO7 puis réaliser le vi suivant et sa configuration associée.

8
Notez que le vi express SPI est configuré pour faire des écritures et des lectures.

Exécuter le vi est vérifier sur la face avant que ce qui est émis est bien reçu…

On peut changer les mots émis de constante à commandes pour comparer les codes émis et ceux
reçus…

9
3. Communication avec le module POLULU LSM 303D en mode SPI.

Il s’agit d’un module magnétomètre /accéléromètre pilotable en I2C et SPI.

Le schéma structurel du module Polulu est présenté ci-dessous :

10
La notice constructeur indique :

Relier les broches comme suit :

 MOSI myRIO à SDA Polulu.


 MIS0 myRIO à SDO Polulu.
 SCK myRIO à SCL Polulu.
 Vin Polulu à +3,3V de la breadboard.
 CS Polulu à 0 V.

A l’aide d’un voltmètre, vérifier vos tensions sur le module Polulu.

Connecter un oscilloscope à la carte Polulu : CH1 sur SCL et CH2 sur SDA.

Le constructeur de l’accéléromètre indique, dans sa notice, le format des trames émises et


reçues dans le cas de la lecture d’un registre. Elles sont indiquées à la suite. Nous cherchons à
lire un registre interne du Polulu.

11
La table partielle des registres est la suivante :

Nous souhaitons lire le contenu du registre WHO-AM-I , dont la valeur par défaut est 0x49 .

Justifier que la trame à émettre de myRIO vers Polulu est 0x8F pour pouvoir lire le registre
WHO-AM-I. En réalité, myRIO est le maitre, et d’après les chronogrammes, on doit générer
16 coups d’horloges (8+8) pour récupérer le contenu du registre. On décide arbitrairement
de compléter la valeur par 0x8FAA, où AA est arbitraire et n’importe quel autre octet fera
l’affaire.

Réaliser le vi suivant, puis l’exécuter. Attention, les types de données doivent être en U16 !!!

Relever les signaux SCL, SDA et SDO à l’oscilloscope et interpréter.

12
L’interface de paramétrage de la liaison SPI est la suivante :

Le résultat obtenu est le suivant sur la face avant :

13
Le vi express a généré le code suivant basé sur des vi de bas niveaux (clic vi express puis view code).
Expliquer.

14

Vous aimerez peut-être aussi