Linux通用SPI作为Master——回环测试
一、本文以RK3506平台为例进行演示
(1)配置设备树支持使用通用SPI
&spi0 {status = "okay";pinctrl-0 = <&rm_io31_spi0_clk &rm_io30_spi0_mosi &rm_io29_spi0_miso &rm_io26_spi0_csn0>;my_spidev: my-spidev@0 {compatible = "rockchip,spidev";reg = <0>;spi-max-frequency = <1000000>;status = "okay";};
};
(2)使能Linux配置支持SPI
Master配置支持:
用户层SPI模式支持:
配置完后重新编译内核镜像进行测试
/dev/spidev0.0 表示一个 SPI 总线上的具体设备。0.0 是一个标识符,用于区分系统中的不同 SPI 控制器和设备。这个标识符由两部分组成:
第一个数字 0:表示SPI总线的编号。一个系统中可能有多个SPI控制器,每个控制器对应一个总线编号,从0开始。
第二个数字0:表示连接在该SPI总线上的具体设备编号。一个SPI总线上可以连接多个设备,每个设备通过片选信号(Chip Select, CS)进行区分,设备编号从0开始。
(3)使用Linux自带的SPI应用程序进行回环测试
编译spi工具应用程序
执行以下命令进行编译
make CC=/home/fae/work/czx-fae/3506-v1/rk3506_linux6.1_rkr4_v1/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc LD=/home/fae/work/czx-fae/3506-v1/rk3506_linux6.1_rkr4_v1/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-ld
(4)测试验证
使用杜邦线将MISO和MOSI短接进行回环测试
./spidev_test -D /dev/spidev0.0 -s 1000000 -v -p 'okay'
关键参数说明:
-D /dev/spidevX.Y
:指定 SPI 设备节点(必选),如/dev/spidev0.0
(X 为主控制器编号,Y 为从机编号)。-l
:启用回环模式(核心参数,必须添加)。-s <速率>
:设置 SPI 通信的最大速率(Hz),如-s 1000000
表示 1MHz(需与设备支持的速率匹配)。-b <位宽>
:设置每字的位数(bits per word),通常为 8(即 1 字节),如-b 8
。-H <0或1>
:设置时钟相位(CPHA),0 表示数据在时钟第一个边沿采样,1 表示第二个边沿采样(需与从机一致)。-O <0或1>
:设置时钟极性(CPOL),0 表示空闲时时钟为低电平,1 表示空闲时为高电平(需与从机一致)。