Configurare SPI

Attenzione

Questa pagina l'ho scritta molto tempo fa e contiene materiale obsoleto

L'uso è sconsigliato e non posso più fornire alcun supporto

Raspberry possiede un bus SPI (Serial Peripheral Interface) accessibile all'utente. Questa interfaccia seriale permette di collegare numerosi circuiti integrati adatti ad interagire col mondo reale. Qui trovate qualche informazione su SPI.

In estrema sintesi, rispetto ad I2C, ha le seguenti caratteristiche:

I pin utilizzati dal bus SPI sono disponibili sul connettore GPIO.

Configurare Raspberry Pi

Innanzitutto occorre verificare che il kernel sia configurato per usare l'hardware SPI. Se usate una versione di Raspbian decentemente aggiornata i moduli relativi sono già presenti nell'installazione standard, anche se potrebbero non essere attivi.

Il modo più semplice per farlo è attraverso il programma di configurazione

vv@vvrpi ~ $ sudo raspi-config

Dopo il riavvio, dovrebbero essere presenti i due device corrispondenti, con i corretti permessi:

pi@raspberrypi:~ $ ls -hl /dev/spi*

crw-rw---- 1 root spi 153, 0 Sep 21 17:05 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1 Sep 21 17:05 /dev/spidev0.1

Il gruppo spi dovrebbe già contenere l'utente pi:

pi@raspberrypi:~ $ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

Altrimenti:

pi@raspberrypi:~ $ sudo addgroup spi
pi@raspberrypi:~ $ usermod -a -G spi pi

A questo punto la configurazione di SPI è completa.

Solo se ci sono problemi (tipicamente con sistemi non aggiornati) potrebbe essere utile fare alcune ulteriori verifiche:

Verificare che il file /etc/modprobe.d/raspi-blacklist.conf (file peraltro non sempre presente) non vieti l'uso dei moduli necessari. Per far ciò, come root occorre commentare o cancellare le linea seguenti, se esistenti:

#blacklist spi-bcm2708
#blacklist spi_bcm2835

Se avete fatto questa modifica occorre riavviare.

Per verificare il caricamento del modulo spi:

pi@raspberrypi:~ $ lsmod
Module      Size Used by
[...]
spi_bcm2835 8032 0

oppure

pi@raspberrypi:~ $ lsmod
Module         Size Used by
spidev         5224 0
spi_bcm2708    4816 0
[...]

Occorre inoltre abilitare i componenti del gruppo spi a leggere e scrivere. Per fare ciò esistono due strade:

La prima è da fare ri-percorrere ogni riavvio, cambiando manualmente i permessi al file /dev/spidev0.*:

root@vvrpi:/home/vv# chown :spi /dev/spidev0.*
root@vvrpi:/home/vv# chmod g+rw /dev/spidev0.*
root@vvrpi:/home/vv# ls -l /dev/spidev0.*
crw-rw---- 1 root spi 153, 0 Jan 1 1970 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1 Jan 1 1970 /dev/spidev0.1

Ovviamente è possibile automatizzare tale sequenza ed inserire i comandi per esempio in /etc/rc.local.

chown :spi /dev/spidev0.*
chmod g+rw /dev/spidev0.*

La strada alternativa è usare udev, creando un opportuno file (per esempio /lib/udev/rules.d/60-spi.rules) con contenuto:

KERNEL=="spidev0.*", GROUP="spi", MODE="0660"

Non è disponibile alcuno strumento per utilizzare SPI senza scrivere codice. In realtà è sufficiente scrivere o leggere i byte direttamente nei file /dev/spidev0.0, ma l'impossibilità di impostare il clock (predefinito ad oltre 100 MHz) rende questa possibilità un puro esercizio di stile (descritto in questa pagina)


Data di creazione di questa pagina: marzo 2018
Ultima modifica: 31 marzo 2018


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima