Cette bibliothèque permet de communiquer avec des périphériques SPI, avec l’Arduino comme le maître de l’appareil.
Pour utiliser cette bibliothèque
#include <SPI.h>
une brève Introduction à L’Interface périphérique série (SPI)
L’Interface périphérique série (SPI) est un protocole de données série synchrone utilisé par les microcontrôleurs pour communiquer rapidement avec un ou plusieurs périphériques sur de courtes distances. Il peut également être utilisé pour la communication entre deux microcontrôleurs.,
avec une connexion SPI, il y a toujours un périphérique maître (généralement un microcontrôleur) qui contrôle les périphériques., Typiquement, il y a trois lignes communes à tous les périphériques:
- MISO (Master In Slave Out) – la ligne esclave pour envoyer des données au Maître,
- MOSI (Master Out Slave In) – la ligne Maître pour envoyer des données aux périphériques,
- SCK (Serial Clock) – les impulsions d’horloge qui synchronisent la transmission de données générée par le maître
et) – le code PIN sur chaque périphérique que le maître peut utiliser pour activer et désactiver des périphériques spécifiques.,
lorsque la broche de sélection esclave d’un périphérique est faible, elle communique avec le maître. Quand il est haut, il ignore le maître. Cela vous permet d’avoir plusieurs périphériques SPI partageant les mêmes lignes MISO, MOSI et CLK.
pour écrire du code pour un nouveau périphérique SPI, vous devez noter quelques choses:
- Quelle est la vitesse maximale SPI que votre appareil peut utiliser? Ceci est contrôlé par le premier paramètre de SPISettings. Si vous utilisez une puce évaluée à 15 MHz, utilisez 15000000. Arduino utilisera automatiquement la meilleure vitesse qui est égale ou inférieure au nombre que vous utilisez avec SPISettings.,
- Les données sont-elles d’abord décalées en Bit le plus significatif (MSB) ou en Bit Le moins significatif (LSB)? Ceci est contrôlé par le deuxième paramètre SPISettings, soit MSBFIRST ou LSBFIRST. La plupart des puces SPI utilisent MSB premier ordre de données.
- l’horloge de données est-elle inactive lorsqu’elle est haute ou basse? Les échantillons sont-ils sur le bord montant ou descendant des impulsions d’horloge? Ces modes sont contrôlés par le troisième paramètre dans SPISettings.
la norme SPI est lâche et chaque appareil l’implémente un peu différemment. Cela signifie que vous devez porter une attention particulière à la fiche technique de l’appareil lors de l’écriture de votre code.,
d’une manière générale, il existe quatre modes de transmission. Ces modes contrôlent si les données sont décalées dans et Hors sur le bord montant ou descendant du signal d’horloge de données (appelé phase d’horloge), et si l’horloge est inactive lorsqu’elle est haute ou basse (appelée polarité d’horloge).,se according to this table:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) | Output Edge | Data Capture |
SPI_MODE0 | 0 | 0 | Falling | Rising |
SPI_MODE1 | 0 | 1 | Rising | Falling |
SPI_MODE2 | 1 | 0 | Rising | Falling |
SPI_MODE3 | 1 | 1 | Falling | Rising |
Once you have your SPI parameters, use SPI.,beginTransaction () pour commencer à utiliser le port SPI. Le port SPI sera configuré avec tous vos paramètres. Le moyen le plus simple et le plus efficace d’utiliser SPISettings est directement à L’intérieur de SPI.beginTransaction ().Par exemple:
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
Si d’autres bibliothèques de l’utilisation de SPI d’interruptions, ils seront dans l’impossibilité d’accéder SPI jusqu’à ce que vous appelez SPI.endTransaction()
. Les paramètres SPI sont appliqués au début de la transaction et SPI.endTransaction()
ne modifie pas les paramètres SPI., Sauf si vous, ou une bibliothèque, appelez beginTransaction une deuxième fois, le paramètre est maintenu. Vous devez essayer de minimiser le temps entre avant d’appeler SPI.endTransaction()
, pour une meilleure compatibilité si votre programme est utilisé avec d’autres bibliothèques qui utilisent SPI.
avec la plupart des périphériques SPI, aprèsSPI.beginTransaction()
, vous écrirez la broche de sélection esclave faible, appelezSPI.transfer()
n’importe quel nombre de fois pour transférer des données, puis écrivez la broche SS haute, et enfin appelezSPI.endTransaction()
.
pour en savoir plus sur SPI, voir la page Wikipedia sur SPI.,
connexions
le tableau suivant affiche sur quelles broches les lignes SPI sont réparties sur les différentes cartes Arduino:
notez que MISO, MOSI et SCK sont disponibles dans un emplacement physique cohérent sur l’en-tête ICSP; ceci est utile, par exemple, dans la conception d’un bouclier qui fonctionne sur chaque carte.
remarque sur la broche Slave Select (SS) sur les cartes AVR
toutes les cartes AVR ont une broche SS qui est utile lorsqu’elles agissent comme un esclave contrôlé par un maître externe., Étant donné que cette bibliothèque ne prend en charge que le mode maître, cette broche doit toujours être définie comme sortie, sinon l’interface SPI pourrait être mise automatiquement en mode esclave par le matériel, rendant la bibliothèque inopérante.
Il est cependant possible d’utiliser n’importe quel pin comme Slave Select (SS) pour les périphériques. Par exemple, le shield Ethernet Arduino utilise la broche 4 pour contrôler la connexion SPI à la carte SD intégrée et la broche 10 pour contrôler la connexion au contrôleur Ethernet.
exemples
- Capteur de pression barométrique: Lire la pression d’air et la température d’un capteur en utilisant le protocole SPI.,
- Digital Pot Control: Contrôlez un potentiomètre numérique AD5206 en utilisant le protocole SPI.
Dernière révision 2019/12/24 par SM