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  |