openSUSE:SPI
配置
加载spidev内核模块
为了能够从用户空间访问SPI,您需要在每次启动时加载spidev内核模块。
modprobe spidev
要使其在每次启动时自动加载,请创建/etc/modules-load.d/10-spi.conf文件,内容如下
# Load spidev.ko spidev
树莓派
对于任何树莓派,您需要通过将以下行添加到/boot/efi/extraconfig.txt来启用SPI访问
dtparam=spi=on
此外,有必要手动将spidev驱动程序绑定到/sys/bus/spi/devices/spi*下列出的spi设备,例如这样
echo spidev > /sys/bus/spi/devices/spi0.0/driver_override echo spi0.0 > /sys/bus/spi/drivers/spidev/bind
Raspbian内核上的此问题和spidev模块的内核文档包含更多关于为什么有必要的信息。
spi-tools
spi-tools包含一组从命令行访问SPI的工具。
安装
要安装spi-tools,您需要为您的openSUSE版本添加hardware仓库。例如,对于Factory ARM:https://download.opensuse.org/repositories/hardware/openSUSE_Factory_ARM/hardware.repo
也提供一键安装:https://software.opensuse.net.cn/package/spi-tools
列出已注册的SPI设备
ls /dev/spidev*.*将列出在SPI总线上注册的SPI设备。例如,/dev/spidev0.1是SPI总线0上的设备1。
检查SPI配置
spi-config -d /dev/spidev0.1 -q将返回SPI总线0上设备1的SPI配置。对于RPi3,它将返回
/dev/spidev0.1: mode=0, lsb=0, bits=8, speed=125000000
同时读/写
将数据从command_1发送到SPI链路,并将数据从SPI链路接收到command_2。
command_1 | spi-pipe -d /dev/spidev0.1 | command_2
将0x010F值发送到SPI总线0上的设备1,频率为10 MHz,并将读取值显示为原始十六进制值的示例
echo -n -e "\x01\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000 | hexdump
只读
将数据0发送到SPI链路,并将数据从SPI链路接收到command-2。
spi-pipe -d /dev/spidev0.1 < /dev/zero | command_2
以原始十六进制值从SPI总线0上的设备1读取值的示例,频率为10 MHz
spi-pipe -d /dev/spidev0.1 -s 10000000 < /dev/zero | hexdump
只写
将数据从command-1发送到SPI链路
command_1 | spi-pipe -d /dev/spidev0.1
将0x010F值发送到SPI总线0上的设备1,频率为10 MHz的示例
echo -n -e "\x01\x0F" | spi-pipe -d /dev/spidev0.1 -s 10000000
Python spidev
python3-spidev包含一组从python3访问SPI的工具。
安装
要安装python3-spidev,只需从主OSS仓库安装即可。对于Leap 15.1,您需要从devel:languages:python仓库安装它。也提供一键安装:https://software.opensuse.net.cn/package/python3-spidev
示例
配置spidev0.1为10 MHz并在SPI总线上写入0x0F01值的脚本示例
#!/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