Arduino – SPI (Italiano)

Questa libreria consente di comunicare con i dispositivi SPI, con Arduino come dispositivo master.
Per utilizzare questa libreria
#include <SPI.h>

Una breve introduzione alla Serial Peripheral Interface (SPI)

Serial Peripheral Interface (SPI) è un protocollo di dati seriale sincrono utilizzato dai microcontrollori per comunicare rapidamente con uno o più dispositivi periferici su brevi distanze. Può anche essere utilizzato per la comunicazione tra due microcontrollori.,

Con una connessione SPI c’è sempre un dispositivo master (di solito un microcontrollore) che controlla le periferiche., In genere ci sono tre linee comuni a tutti i dispositivi:

  • MISO (Master In Slave Out) – Slave line per l’invio dei dati al master,
  • MOSI (Master Out Slave) – Master line per l’invio dei dati alle periferiche,
  • SCK (Serial Clock) – Gli impulsi di clock che sincronizza la trasmissione di dati generato dal master

e una linea specifica per ogni dispositivo:

  • SS (Slave Select) – il perno su ogni dispositivo che il master può utilizzare per attivare e disattivare i dispositivi specifici.,

Quando il pin di selezione Slave di un dispositivo è basso, comunica con il master. Quando è alto, ignora il maestro. Ciò consente di avere più dispositivi SPI che condividono le stesse linee MISO, MOSI e CLK.

Per scrivere codice per un nuovo dispositivo SPI è necessario notare alcune cose:

  • Qual è la velocità massima SPI che il dispositivo può utilizzare? Questo è controllato dal primo parametro in SPISettings. Se si utilizza un chip valutato a 15 MHz, utilizzare 15000000. Arduino utilizzerà automaticamente la migliore velocità che è uguale o inferiore al numero che si utilizza con SPISettings.,
  • I dati vengono spostati prima nel bit più significativo (MSB) o nel bit meno significativo (LSB)? Questo è controllato dal secondo parametro SPISettings, MSBFIRST o LSBFIRST. La maggior parte dei chip SPI utilizza MSB first data order.
  • L’orologio dati è inattivo quando è alto o basso? I campioni sono sul bordo di salita o discesa degli impulsi di clock? Queste modalità sono controllate dal terzo parametro in SPISettings.

Lo standard SPI è allentato e ogni dispositivo lo implementa in modo leggermente diverso. Ciò significa che devi prestare particolare attenzione alla scheda tecnica del dispositivo durante la scrittura del codice.,

In generale, ci sono quattro modalità di trasmissione. Queste modalità controllano se i dati vengono spostati in entrata e in uscita sul bordo di salita o discesa del segnale di clock dei dati (chiamato fase di clock) e se l’orologio è inattivo quando è alto o basso (chiamato polarità dell’orologio).,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 () per iniziare a utilizzare la porta SPI. La porta SPI verrà configurata con tutte le impostazioni. Il modo più semplice ed efficiente per utilizzare SPISettings è direttamente all’interno di SPI.beginTransaction ().Ad esempio:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

Se altre librerie utilizzano SPI da interrupt, sarà impedito loro di accedere a SPI fino a quando non si chiama SPI.endTransaction(). Le impostazioni SPI vengono applicate all’inizio della transazione e SPI.endTransaction() non modifica le impostazioni SPI., A meno che tu, o qualche libreria, chiami beginTransaction una seconda volta, le impostazioni vengono mantenute. Dovresti tentare di ridurre al minimo il tempo tra prima di chiamare SPI.endTransaction(), per la migliore compatibilità se il tuo programma è usato insieme ad altre librerie che usano SPI.

Con la maggior parte dei dispositivi SPI, dopo SPI.beginTransaction(), si scriverà lo slave selezionare pin BASSO, chiamata SPI.transfer()qualsiasi numero di volte per trasferire i dati, quindi scrivere il SS pin alto, e, infine, chiamata SPI.endTransaction().

Per ulteriori informazioni su SPI, vedere la pagina di Wikipedia su SPI.,

Connessioni

La seguente tabella mostra su quali pin sono suddivise le linee SPI sulle diverse schede Arduino:

Si noti che MISO, MOSI e SCK sono disponibili in una posizione fisica coerente sull’intestazione ICSP; ciò è utile, ad esempio, nella progettazione di uno scudo che funzioni su ogni scheda.

Nota sul pin di selezione slave (SS) sulle schede basate su AVR

Tutte le schede basate su AVR hanno un pin SS utile quando agiscono come slave controllato da un master esterno., Poiché questa libreria supporta solo la modalità master, questo pin dovrebbe essere impostato sempre come OUTPUT altrimenti l’interfaccia SPI potrebbe essere messa automaticamente in modalità slave dall’hardware, rendendo la libreria non operativa.

È, tuttavia, possibile utilizzare qualsiasi pin come Slave Select (SS) per i dispositivi. Ad esempio, Arduino Ethernet shield utilizza il pin 4 per controllare la connessione SPI alla scheda SD di bordo e il pin 10 per controllare la connessione al controller Ethernet.

Esempi

  • Sensore di pressione barometrica: leggere la pressione dell’aria e la temperatura da un sensore utilizzando il protocollo SPI.,
  • Controllo Pot digitale: controllare un potenziometro digitale AD5206 utilizzando il protocollo SPI.

Ultima revisione 2019/12/24 di SM

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *