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.
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
Raspberry Pi: note di hardware - Versione 1.31 - Luglio
2019
Copyright 2013-2019, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione-Condividi allo stesso modo 3.0 Unported.