一. 简介
前一篇文章在设备树文件中创建了SPI的 IO 的 pinctrl节点,SPI节点及ICM20608设备子节点,文章如下:
Linux下SPI设备驱动实验:创建SPI节点及SPI设备子节点-CSDN博客
本文对设备树文件进行加载测试,确定SPI节点及ICM20608设备子节点是否创建好。
二. Linux下SPI设备驱动实验:验证SPI节点及ICM20608设备子节点
1. 拷贝设备树文件到 tftp服务相关目录下
注意:这里开发板是通过 tftp服务加载的方式,从 ubuntu系统下加载内核镜像zImage与 imx6ull-alientek-nand .dtb 设备树文件。
将 imx6ull-alientek-nand.dtb 拷贝到 /home/wangtian/linux/tftp_file/目录下(即ubuntu系统tftp服务所设置的):
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ sudo cp ./arch/arm/boot/dts/imx6ull-alientek-nand.dtb /home/wangtian/linux/tftp_file/ -f
2. 开发板上电
开发板上电后进入文件系统下,进入 " /sys/bus/spi/devices/" 目录下:
可以看到,在 /sys/bus/spi/devices/目录下存在一个 spi2.0的节点。
开发板的文件系统中,spi设备节点是从0开始的,而 imx6ull芯片的数据手册中SPI也是从1开始的,或者正点原子的硬件原理图上的 spi也是从1开始的。
所以,这里的 spi2.0就是 设备树文件中的 spi3节点,也就是前面创建的SPI3节点。
进入 spi2.0目录下:
spi2.0目录下有一个 of_node。
进入 spi2.0/目录下的 of_node目录下:
/sys/devices/platform/soc/2000000.aips-bus/2000000.spba-bus/2010000.ecspi/spi_master/spi2/spi2.0 # cd of_node/
/sys/firmware/devicetree/base/soc/aips-bus@02000000/spba-bus@02000000/ecspi@02010000/icm20608@0 # ls
compatible name reg spi-max-frequency
of_node目录下有 compatible,name,reg,spi-max-frequency等等的属性。
查看 compatilbe属性值:
可以看出, compatible属性值为 alientek,icm20608,是所创建的ICM20608设备的 compatible的值。
另外可以看到目录中有 "/ecspi@02010000"这个地址,可以在 imx6ull.dtsi设备树文件查看 ecspi3节点的地址进行比较,确认是否一致。imx6ull.dtsi设备树文件查看 ecspi3节点如下:
ecspi3: ecspi@02010000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi";
reg = <0x02010000 0x4000>;
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_ECSPI3>,
<&clks IMX6UL_CLK_ECSPI3>;
clock-names = "ipg", "per";
dmas = <&sdma 7 7 1>, <&sdma 8 7 2>;
dma-names = "rx", "tx";
status = "disabled";
};
可以看到 开发板系统下的SPI2.0设备的寄存器地址,与设备树中所创建的 SPI3设备节点的地址都是 2010000,说明SPI2.0就是我创建的 SPI3节点。
查看 name的值:
可以看出,name的值为 icm20608,是所创建的ICM20608设备的名字。
接下来开始实现 SPI设备驱动代码。