SPI - Quatre fils, un maître, et l'horloge qui change tout
SPI ajoute un fil d'horloge à l'équation série et gagne en vitesse de façon spectaculaire. Voici comment MOSI, MISO, SCK et CS fonctionnent ensemble, pourquoi les modes d'horloge comptent et comment connecter plusieurs appareils.
SPI. Quatre fils, un maître, et l'horloge qui change tout
Le problème fondamental d'UART, c'est qu'il est asynchrone. Les deux extrémités doivent compter le temps indépendamment au même rythme et espérer rester synchronisées. Ça fonctionne, mais ça fixe un plafond sur la vitesse et la fiabilité.
SPI résout cela complètement. Le maître fournit un fil d'horloge. L'esclave n'a jamais besoin de mesurer le temps. il regarde simplement l'horloge et capture un bit à chaque front. C'est pourquoi SPI à 40MHz est courant, tandis qu'UART à 4MHz est une limite.
Les quatre fils
| Signal | Direction | Rôle |
|---|---|---|
| SCK | Maître → Esclave | Horloge |
| MOSI | Maître → Esclave | Données vers l'esclave |
| MISO | Esclave → Maître | Données depuis l'esclave |
| CS | Maître → Esclave | Sélection de puce, actif LOW |
Rendering diagram...
SCK et MOSI sont partagés entre tous les esclaves. Seul l'appareil dont la pin CS est tirée à LOW répond. SPI est full-duplex. chaque cycle d'horloge, un bit va du maître à l'esclave (MOSI) et simultanément un bit revient (MISO). Pour les opérations de lecture seule, le maître envoie des octets factices pour générer les horloges.
Modes d'horloge. ce qui brûle tout le monde au moins une fois
SPI a deux paramètres : CPOL (état de repos de l'horloge) et CPHA (quel front échantillonner). Quatre modes :
Mode | CPOL | CPHA | Horloge au repos | Échantillonnage
-----|------|------|------------------|----------------
0 | 0 | 0 | LOW | front montant ← le plus courant
1 | 0 | 1 | LOW | front descendant
2 | 1 | 0 | HIGH | front descendant
3 | 1 | 1 | HIGH | front montant
Le Mode 0 fonctionne pour la majorité des puces. Mais certains accéléromètres et DAC nécessitent le Mode 3. Utiliser le mauvais mode signifie que chaque octet reçu ressemble à des données valides mais corrompues. les bits sont tous là, juste décalés d'un front.
Vérifiez la fiche technique. C'est généralement une ligne dans le tableau des caractéristiques électriques : "SPI Mode 0/3" ou "CPOL=0, CPHA=0". Si la fiche est ambiguë, un analyseur logique vous indiquera immédiatement quel mode l'appareil utilise réellement.
Connexion en guirlande. l'alternative aux multiples pins CS
L'approche habituelle pour plusieurs esclaves est une pin CS par appareil. Simple et direct, mais coûte un GPIO pour chaque nouvel appareil.
L'alternative est la connexion en guirlande : MISO de l'esclave 1 se connecte à MOSI de l'esclave 2, etc. Particulièrement utilisée avec les pilotes de LED et certains réseaux d'ADC.
Rendering diagram...
La guirlande est difficile à déboguer. si un appareil dans la chaîne se comporte mal, tout casse. Utilisez des CS indépendants quand vous pouvez vous le permettre.
Limites de vitesse pratiques
La vitesse SPI est contrainte par trois choses : la limite de vitesse du périphérique MCU, la fréquence SPI maximale de l'esclave, et la longueur des pistes PCB. Pour des pistes de moins de 10cm, 20–40MHz est généralement bon. Au-delà de 15cm, ajoutez une petite résistance série (22–33Ω) à la sortie du maître pour amortir les réflexions.
Les cartes SD sont notoirement difficiles au-delà de 25MHz en mode SPI. Si vous voyez des erreurs CRC occasionnelles. surtout quand la carte chauffe. la vitesse d'horloge est l'endroit où je regarderais en premier.