Włączenie SPI w Beaglebone Black

Beaglebone Black posiada wyprowadzone dwie szyny SPI (spi0 i spi1), obie domyślnie są wyłączone. W  przypadli spi1  jest konflikt z HDMI  i należy wyłączyć framebuffer HDMI.

Wyłączenie HDMI sprowadza się do edycji pliku uEnv.txt i dodania linii o następującej treści:

capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

W przypadki spi0 nie ma konieczności wyłączania HDMI.

Następnie instalujemy dtc-overlay (w Archlinux) co pozwoli na przekompilowanie pliku .dts (Device Tree Source) na format rozumiany przez kernel (dtbo). Device Tree jest plikiem o pewnej strukturze, opisujący konfigurację sprzętu i został wprowadzony od kernela 3.8. Podstawowa konfiguracja sprzętu jest wczytywana przed botowaniem jądra (am33x-boneblack.dtb). Dla potrzeb aktywacji SPI0 wykonujemy nakładkę na ten podstawowy. W ten sposób rozszerzamy konfigurację sprzętu (w miarę możliwości) bez konieczności rekompilacji jądra Linuksa.

Tworzymy plik spi0.dts (pobierz) i kompilujemy:

dtc -O dtb -o spi0-00A0.dtbo -b 0 -@ spi0.dts

Kopiujemy plik SPI0-00A0.dtbo do /lib/firmware:

cp spi0-00A0.dtbo /lib/firmware/

Aktywujemy szynę spi0:

echo spi0 > /sys/devices/bone_capemgr.*/slots

Aktywacja nie jest permanentna i należy ją wykonać po każdym uruchomieniu Beaglebone’a lub dodać do uEnv.txt jako osobną linię

capemgr.enable_partno=spi0

Opis wyprowadzeń dla SPI0:

P9-17 – CS
P9-18 – MOSI
P9-21 – MISO
P9-22 – SCK

UWAGA: W Beablebone wyprowadzenia posiadają logikę 3.3V, oznacza to że sterowanie odbiornikami zasilanymi z 5V wymaga zastosowania konwertera napięć 5V do 3.3V.

Interfejs:

[root@bbb ~]# ls -al /dev/spidev*
crw------- 1 root root 153, 0 Jul 14 16:57 /dev/spidev1.0

Log:

[ 26.337969] bone-capemgr bone_capemgr.8: part_number 'spi0', version 'N/A'
[ 26.338053] bone-capemgr bone_capemgr.8: slot #7: generic override
[ 26.338071] bone-capemgr bone_capemgr.8: bone: Using override eeprom data at slot 7
[ 26.338089] bone-capemgr bone_capemgr.8: slot #7: 'Override Board Name,00A0,Override Manuf,spi0'
[ 26.338188] bone-capemgr bone_capemgr.8: slot #7: Requesting part number/version based 'spi0-00A0.dtbo
[ 26.338206] bone-capemgr bone_capemgr.8: slot #7: Requesting firmware 'spi0-00A0.dtbo' for board-name 'Override Board Name', version '00A0'
[ 26.344203] bone-capemgr bone_capemgr.8: slot #7: dtbo 'spi0-00A0.dtbo' loaded; converting to live tree