Load spidev kernel module
To be able to access SPI from userspace, you need to load spidev kernel module, at each boot.
To load it automatically at each boot, create /etc/modules-load.d/10-spi.conf file with the following content:
# Load spidev.ko spidev
For any Raspberry Pi, you need to enable SPI access by adding the following line to /boot/efi/extraconfig.txt:
Additionally, it is necessary to manually bind the spidev driver to the spi devices listed under /sys/bus/spi/devices/spi*, e.g. like this:
echo spidev > /sys/bus/spi/devices/spi0.0/driver_override echo spi0.0 > /sys/bus/spi/drivers/spidev/bind
This issue on the Raspbian kernel and the Kernel documentation on the spidev module contain more information on why this is necessary.
spi-tools contains a set of tools to access SPI from command line.
To install spi-tools, you need to add hardware repo for your openSUSE flavor. For example, for Factory ARM: https://download.opensuse.org/repositories/hardware/openSUSE_Factory_ARM/hardware.repo
One click installation is also available : https://software.opensuse.org/package/spi-tools
List registered SPI devices
ls /dev/spidev*.* will list SPI devices registered on SPI buses. For example, /dev/spidev0.1 is device 1 on SPI bus 0.
Check SPI config
spi-config -d /dev/spidev0.1 -q will return the SPI config for device 1 on SPI bus 0. For RPi3, it will return:
/dev/spidev0.1: mode=0, lsb=0, bits=8, speed=125000000
Sending data from command_1 to SPI link and receiving data from SPI link to command_2.
command_1 | spi-pipe -d /dev/spidev0.1 | command_2
Example to send 0x010F value, to device 1 on SPI bus 0, at 10 MHz and display read value as raw hexadecimal value:
echo -n -e "\x01\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000 | hexdump
Sending data 0 to SPI link and receiving data from SPI link to command-2.
spi-pipe -d /dev/spidev0.1 < /dev/zero | command_2
Example to read value as raw hexadecimal value from device 1 on SPI bus 0, at 10 MHz:
spi-pipe -d /dev/spidev0.1 -s 10000000 < /dev/zero | hexdump
Sending data from command-1 to SPI link:
command_1 | spi-pipe -d /dev/spidev0.1
Example to send 0x010F value, to device 1 on SPI bus 0, at 10 MHz:
echo -n -e "\x01\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000
python3-spidev contains a set of tools to access SPI from python3.
To install python3-spidev, just install it from main OSS repo. For Leap 15.1, you need to install it from devel:languages:python repo. One click installation is also available : https://software.opensuse.org/package/python3-spidev
Example of a script which configure spidev0.1 at 10 MHz and write 0x0F01 value on SPI bus:
#!/usr/bin/python3 import spidev # Define which bus/device to access spi = spidev.SpiDev() bus = 0 device = 1 spi.open(bus, device) # Settings spi.max_speed_hz = 10000000 # 10 MHz #spi.mode = 0b01 to_send = [0x0F, 0x01] spi.xfer(to_send) # Release SPI spi.close