OrangPi开启spi-dev
我想在OrangePi Zero中打开Spidev,编写一些应用层的驱动。
配置armbian-config
我首先打开armbian-config
,进入hardware使能spidev
以及spidev-add-cs1
并重启。
发现问题
接着我发现在/dev/目录下没有spidev生成。我查看了许多。
发现他们的系统在armbian-config
中使能了,就会去加载对应的dtbo。
我做如下查看:
root@pi:~# vi /boot/dtb-4.17.11-sunxi64/allwinner/overlay/sun50i-h5-spi-spidev.dtbo |
这里发现这里spidev跟着的状态是disable的。然后我又查看了他的源码:
/linux-4.17.y/arch/arm64/boot/dts/allwinner/overlay/sun50i-h5-spi-spidev.dts
/dts-v1/;
/plugin/;
/ {
compatible = "allwinner,sun50i-h5";
fragment@0 {
target-path = "/aliases";
__overlay__ {
spi0 = "/soc/spi@1c68000";
spi1 = "/soc/spi@1c69000";
};
};
fragment@1 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
spidev {
compatible = "spidev";
status = "disabled";
reg = <0>;
spi-max-frequency = <1000000>;
};
};
};
fragment@2 {
target = <&spi1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
spidev {
compatible = "spidev";
status = "disabled";
reg = <0>;
spi-max-frequency = <1000000>;
};
};
};
};
我就开始认为没有打开使能才会没有产生spidev
。但是在我又询问了论坛的人后才知道。
修改armbianEnv.txt
他们的手册中写到:
param_* - overlay parameters
需要添加参数。。
我看了一会知道了他们的启动运行流程:
启动->读取armbianEnv.txt-
>加载overlay
参数对应的dtbo->继续读取armbianEnv.txt
的参数项->根据参数来运行sun50i-h5-fixup.scr
->将对应的外设使能
所以现在需要添加:这个两个参数使能spidev。
param_spidev_spi_bus=1 param_spidev_spi_cs=1
完成
最终可以看到: root@pi:~# ls /dev/s
shm/ snd/ spidev1.1 stderr stdin stdout
测试spi
我们使用linux中自带的spidev_test.c
进行测试。
进入/linux-4.17.y/tools/spi
中交叉编译:
➜ ~ cd /home/zqh/sources/linux-mainline/linux-4.17.y/tools/spi |
将spidev_test
拷贝入开发板中,并且短接MISO
和MOSI
。运行测试程序(记得加-v选项)。
root@pi:~# ./spidev_test -D /dev/spidev1.0 -v |