La liaison série synchrone SPI

 

Le protocole SPI est une des liaisons série les plus répandue (avec l'I²C) sur des périphériques de types mémoires, horloges temps réelles, potentiomètre numériques,... Le 68HC11 possède une liaison série synchrone repondant à ce protocole. Il est implanté sur le PORTD.

Cliquer sur le registre qui vous interesse pour accéder à l'aide de programmation.

Une transmission SPI est un échange de données entre le maître (MASTER) et l'esclave (SLAVE).

  • Le MASTER est appelé ainsi car lui seul est apte à gérer une transmission. Lui seul génère le signal d'horloge.
  • Le SLAVE est appelé ainsi car il "subit" les commandes du MASTER.

Une fois le registre de contrôle SPCR configuré, il faut initialiser les flags du registre de status SPSR. Pour ce, il faut lire SPSR puis SPDR à la suite, ce qui reset les flags dans leurs valeurs d'initialisations.

Le SPI est alors prêt à échanger des données avec son ou ses périphériques(s) SPI.

Une transmission s'effectue de la manière suivante :

  • Le MASTER doit positionner à 0 le CS (Chip Select) du circuit avec lequel il veut dialoguer.
  • Selon l'opération :
    • Ecriture :
      • Le MASTER écrit la valeur à transmettre (adresse ou donnée selon le périphérique avec lequel il dialogue) dans le registre SPDR. Cette valeur est automatiquement transmise et le MASTER peut effectuer une autre tâche durant la transmission. Lorsque la transmission est terminée, le flag SPIF est mis à 1 et une interruption est génerée si le bit SPIE est à 1. Le MASTER doit réinitialiser la transmission en effectuant les mêmes opérations que pour l'initialisation : lire SPSR puis SPDR. Une autre donnée peut être envoyée ou receptionnée.
    • Lecture :
      • Le MASTER écrit une valeur quelconque dans le registre SPDR. Le contenu du registre de transmission du SLAVE est alors intervertie avec cette valeur. Lorsque la transmission est terminée, le flag SPIF est mis à 1 et une interruption est génerée si le bit SPIE est à 1. Le MASTER doit réinitialiser la transmission en effectuant les mêmes opérations que pour l'initialisation : lire SPSR puis SPDR. Une autre donnée peut être envoyée ou receptionnée.

 

 

Le Registre de contrôle SPCR (SPI Control Register) :

 


Composer votre phrase puis valider sur le bouton se situant à la fin du formulaire. L'ordinateur calculera pour vous la valeur à mettre dans le registre SPCR.

Je utiliser le SPI. l'interruption SPI. Les bits d'I/O du PORTD seront des .Mon 68HC11 sera en mode . En ce qui concerne le signal d'horloge CLOCK, il sera à l'état au repos. Son front actif sera . La fréquence du signal CLOCK sera de celle du quartz divisée par .


Le bit SPIE (SPI Interrupt Enable)

Ce bit valide ou non l'interruption émanante du SPI. Si ce bit est à 1 et que le bit SPIF du registre SPSR passe à 1 (lorsqu'une transmission est complète (en mode MASTER) ou qu'un octet est reçu (mode SLAVE)), une interruption à lieu. Autrement, lorsque SPIE = 0, le passage du bit SPIF à 1 n'occasionne pas d'interruption : il faut donc venir scruter le bit SPIF pour détecter un octet émis ou reçu.

  • SPIE = 0 => Interruption SPI inhibée,
  • SPIE = 1 => Interruption SPI validée.

Le bit SPE (SPI Enable)

Ce bit valide le périphérique SPI. Si il est à 0, le SPI n'est pas valide et le PORTD sert de port générique d'Input / Output (I/O). Si il est à 1, les entrées dédiées au SPI (PD0 - PD5) sont occupées par le SPI.

  • SPE = 0 => SPI inhibé,
  • SPE = 1 => SPI validé.

Le bit DOWM (PortD Wire Or Mode option)

Le bit DOWM permet de déterminer le type de sortie du PORTD :

  • DOWM = 0 => Les sorties du PORTD sont des sorties de type CMOS (normal),
  • DOWM = 1 => Les sorties du PORTD sont des collecteurs ouverts.

Le bit MSTR (Master Mode Select)

Le bit MSTR permet de configurer le 68HC11 de deux façons :

  • MSTR = 0 => SPI en mode Esclave (SLAVE),
  • MSTR = 1 => SPI en mode Maitre (MASTER).

Le bit CPOL (Clock POLarity)

Ce bit configure la polarité du signal d'horloge au repos (hors transmission) :

  • CPOL = 0 => Le signal CLK est à 0 au repos,
  • CPOL = 1 => Le signal CLK est à 1 au repos.

Le bit CPHA (Clock PHAse)

Ce bit configure le front de validation du signal d'horloge :

  • CPHA = 0 => Le signal CLK valide la donnée sur front descendant,
  • CPHA = 1 => Le signal CLK valide la donnée sur front montant.

Les bits SPR0 et SPR1 (SPI clock Rate)

Ces bits configurent la vitesse de transmission (aucun effet en mode SLAVE) :

SPR1 SPR0
Division de la
fréquence du quartz
0
0
8
0
1
16
1
0
64
1
1
128

 

 

 

Le Registre de Status SPSR (SPI Status Register) :

 


Le flag SPIF (SPI Interrupt Flag)

Ce flag (drapeau) indique la reception (mode SLAVE) ou la fin d'une transmission (mode MASTER) du SPI :

  • SPIF = 0 => Aucun transfert terminé,
  • SPIF = 1 => Transfert terminé -> interruption si SPIE est positionné.

Le flag WCOL (WriteCOLlision)

Ce flag est positionné lorsqu'on essaie d'envoyer une nouvelle donnée alors que la transmission précédente n'est pas terminée.

  • WCOL = 0 => Aucune collision détectée,
  • WCOL = 1 => Collision détectée.

Le flag MODF (MODe Fault)

Ce flag n'est utilisé que dans les systèmes comportant plusieurs circuits qui peuvent être MASTER. Lorsqu'un circuit essaie de transmettre alors qu'une transmission est en cours, MODF est positionné et le SPI est inhibé (MSTR = 0, SPE = 0, DDRD = 0).

  • MODF = 0 => Aucune erreur détectée,
  • MODF = 1 => Erreur détectée,

 

 

Le Registre de données SPDR (SPI Data Register) :

Ce registre est celui où s'effectue tout les transferts : on vient y écrire ou y lire les données à lire ou à écrire...
Comme indiqué sur l'image ci-dessus, on peut y écrire qu'une seule valeur alors que le buffer peut contenir deux valeurs en réception.