Partie 9 Communication série SPI Serial communication with SPI

Cours/TD d’informatique embarquée
Utilisation d’un microcontrôleur MBED
Partie 9
Communication série SPI
Serial communication with SPI
Plan du cours
9.1. Introduction
9.2. Etude de la communication SPI
9.3. Utilisation de SPI avec mbed
9.4. Etude du circuit MCP3201
9.5. Etude du circuit MCP4141
CV
C/TD INFO2 - Partie 9
page 1
9.1. Introduction
SPI est l’abréviation de __________________________________.
__________________________________
SPI est un protocole _____________________________________.
_____________________________________
Ce protocole utilise une relation maître/esclave entre les composants.
comp
Lorsque le maître initie la communication en sélectionnant un esclave, les données peuvent être
transférées ______________________________ : communication _____________________
Il existe de nombreux composants compatibles SPI.
SPI
Le protocole SPI utilise 4 signaux de communication (+ la masse) :
• __________ : _______________________ (horloge)
• __________ : _______________________ (transmission du maître vers l’esclave)
• __________: _______________________ (transmission de l’esclave vers le maître)
• ____ : ___________________ (sélectionne l’esclave actif, un fil CS par esclave)
9.2 Etude de la communication SPI
SPI est adapté _______________________________________,
_______________________________________, par exemple des données de
communication entre 2 microprocesseurs ou le transfert de données
données à partir d'un convertisseur
analogique-numérique
numérique nécessitant _____________________________________________.
_____________________________________________
Le transfert de données est plus _________________________________,, car la fréquence de
l’horloge ________________________,
________________________ il n’y a pas besoin de transmettre ______________________
______________________.
La communication SPI est bien adapté pour _______________________________________.
_______________________________________
Procédure de transfert de données :
1. Le maître __________________ (SCLK) qui doit être supportée par l’esclave (jusqu’à 70MHz)
2. Le maître _____________________en
_____________________ activant ___________________(Souvent
(Souvent actif à 0V)
3. Le maître active _______________________ et ___________________________________
4. L’esclave renvoie les données de la même manière sur le fil MISO
Rq :
Le nombre de bits de chaque trame peut être configuré (généralement compris entre 4 et 16 bits)
CV
C/TD INFO2 - Partie 9
page 2
Le maître configure également la polarité de l’horloge (CPOL) et la phase (CPHA) :
Il y a donc 4 modes possibles du bus SPI :
En général, les composants
nts SPI sont configurés pour fonctionner dans l’un de ces 4 modes (voir dans
la datasheet de chaque composant).
Exercice 1 :
Rechercher 3 composants fonctionnant sur le bus SPI (capteur de
température, LCD...)
-
9.3 Utilisation de SPI avec mbed
Les méthodes associées au type SPI sont dans le tableau ci-dessous :
SPI
SPI
format
frequency
write
Utilisation
Définit un maître SPI connecté à des broches spécifiques
_______________________________________________________________________
______________________________________
Permet ______________________ d’une donnée ou d’une commande et ___________
________________________ l’esclave
________________________de
Rq : pour faire une lecture il faudra « paradoxalement » utiliser la méthode write()
Remarque :
Cee tableau regroupe les méthodes d’un maître SPI. Il existe également une liste de méthode pour
créer un esclave SPI sur mbed : SPISlave. Nous n’en parlerons pas dans le cadre de ce cours.
CV
C/TD INFO2 - Partie 9
page 3
Le LPC1768 possède 2 interfaces SPI sur les broches p5/p6/p7
p
et
p11/p12/p13.
En plus de ces broches il faudra utiliser ________________________
____________________________________________.
Par défaut les réglages de l’interface mbed SPI sont :
• Fréquence = 1MHz
• Longueur des données : 8 bits
• Mode de transmission : 0
Exercice 2 :
Ecrire les lignes de code permettant de définir un port SPI sur les
broches p11, p12 et p13 du LPC1768, de régler la fréquence de
transmission à 500 kHz, le format de données sur 8 bits, et le mode
à 1.
9.4 Etude du composant MCP3201
nalogique-numérique 2,7V/12bits
MCP3201 est un convertisseur analogique
Il sera utilisé en lecture, donc seule la broche MISO du mbed sera connectée
Montage à réaliser :
CV
C/TD INFO2 - Partie 9
page 4
Après la mise à ‘0’ de CS les données sont lues par le maître à partir du 4ème front montant
• 4ème front : B11
• …
• 14ème front : B1
• 15ème front : B0
• 16ème front : de nouveau B1 (il faudra ne pas en tenir compte)
Extrait de la datasheet illustrant la transmission des 12 bits de mesure :
Code permettant de lire la valeur du convertisseur :
#include "mbed.h"
SPI spi(p5, p6, p7); // mosi, miso, sclk
DigitalOut cs(p8);
int main() {
cs = 1;
//initialisation de CS à ‘1’
spi.format(16,0);
//communication sur 16 bits / mode 0
spi.frequency(1000000); //fréquence de 1MHz
while(1){
cs = 0;
//CS à ‘0’ <-> activation du circuit
unsigned int valeur = spi.write(0x00); //Lecture de la valeur en
//écrivant n’importe
//quoi...
valeur = (valeur>>1)&0x0FFF;
//Mise en forme des deux
//bits lus et décalage de
//1bits pour ne pas tenir
//compte du deuxième B1
printf("valeur lue = %d\n\r", valeur); //Affichage sur la
//console
cs = 1;
}
//CS à ‘1’ <-> désactivation
}
CV
C/TD INFO2 - Partie 9
page 5
Exercice 3 : (si vous n'avez pas assez de composant MCP3201
passez à la partie 9.4)
a) Dessiner le schéma électrique d'un potentiomètre connecté entre
le 0V et le 3,3V et dont la tension du point milieu évolue entre 0
et 3,3V.
b) Réaliser et tester le montage et le programme ci-dessus (vous
utiliserez un potentiomètre pour générer la tension mesurée par le
convertisseur). Vérifier que la mesure est correcte.
c) Relever à l'oscilloscope la trame transmise entre le MCP3201 et
le mbed.
chronogramme de MISO et SCLK
d) Générer un signal triangulaire avec la sortie AnalogOut, de
fréquence 5HZ et mesurer la avec le MCP3201, afficher la mesure sur
la console.
9.4 Etude du composant MCP4141
MCP4141 est un potentiomètre ajustable SPI.
Il possède une mémoire permettant de le régler.
• Il est possible de fixer la position du point milieu en envoyant une valeur à l’adresse 0x00 de
sa mémoire (valeur comprise entre 0 et 127).
• Il est possible d’incrémenter la position du point milieu en envoyant la commande 0x04.
• Il est possible d’incrémenter la position du point milieu en envoyant la commande 0x08.
Il sera utilisé en écriture, donc seule la broche MOSI du mbed sera connectée.
La résistance entre 5 et 6 (et entre 6 et 7) sera variable.
CV
C/TD INFO2 - Partie 9
page 6
Le programme suivant permet de fixer la
l valeur du potentiomètre :
#include "mbed.h"
SPI spi(p5, p6, p7);
void ecriture(int n);
//prototype de la fonction ecriture
int main() {
cs=1;
spi.format(8,0); // 8 bits , mode 0
spi.frequency(1000000);
while (1) {
ecriture(63);// Fixe le potentiomètre au milieu de sa course
wait(1);
}
}
void ecriture(int n) { //n est compris entre 0 et 127
cs=1;
cs=0;
spi.write(0x00);
spi.write(n);
cs=1;
}
Exercice 4 :
a) Réaliser et tester le montage et le programme ci-dessus.
ci dessus. Mesurer
à l'aide d'un multimètre la résistance entre les broches 5 et 7,
puis entre les broches 5 et 6.
Résistances mesurées :
b)
) Réaliser un pont diviseur de tension avec une résistance de 10kW
et la résistance variable du MCP4141. Mesurer la tension de ce pont
diviseur avec une entrée AnalogIn,
AnalogIn, afficher la valeur lue sur la
console
c) Calculer la valeur de la résistance
afficher sa valeur sur la console.
SPI
informatiquement
informatiquement
et
d) Modifier le programme pour que la résistance s'incrémente toutes
les 500 ms (utiliser la fonction incrément présentée sur la vidéo).
CV
C/TD INFO2 - Partie 9
page 7
Questions de cours :
Q1) Que signifie SPI ?
Q2) Combien faut-il de signaux pour utiliser une composant SPI ?
Q3) Combien faut-il de signaux pour utiliser 5 composants SPI ?
Q4) En utilisant un seul port SPI, combien de composants SPI pouvons
nous connecter sur le LPC1768 ?
Q5) Quel est l'avantage du bus SPI par rapport à un bus I²C ?
Q6) Quel est l'inconvénient du bus SPI par rapport au bus I²C ?
Q7) Qu'est-ce qu'une communication full-duplex ?
Q8) En mode 1, le transfert des données se fait sur quel front ?
Q9) Avec le MCP3201 pourquoi ne connecte-t-on que le fil MISO ?
Q10) Quelle ligne d'instruction en langage C permet de supprimer le
bit de poids faible et de forcer à 0 les 4 bits de poids forts sur
une donnée de 16 bits ?
CV
C/TD INFO2 - Partie 9
page 8