SPI回环测试
我们需要使用回环测试来测试SPI控制器是否能正常工作以及管脚是否配置正确。
配置dts:
spi4: spi@fdf06000 {
compatible = "arm,pl022", "arm,primecell";
reg = <0x0 0xfdf06000 0x0 0x1000>;
#address-cells = <1>;
#size-cells = <0>;
interrupts = <0 313 4>;
clocks = <&crg_ctrl HI3660_CLK_GATE_SPI4>;
clock-names = "apb_pclk";
pinctrl-names = "default";
pinctrl-0 = <&spi4_pmx_func &spi4_cfg_func>;
num-cs = <1>;
cs-gpios = <&gpio27 2 0>; /*cs : 218*/
//status = "disabled";
status = "ok";
+spidev@0 {
+ compatible = "dcb,spidev";
+ reg = <0 0>;
+ spi-max-frequency = <9600000>;
+};
};
给spidev.c 驱动文件中添加:
#ifdef CONFIG_OF
static const struct of_device_id spidev_dt_ids[] = {
{ .compatible = "rohm,dh2228fv" },
{ .compatible = "lineartechnology,ltc2488" },
+{ .compatible = "dcb,spidev" },
{},
};
这样就在spi bus上挂载了 匹配的驱动与设备,在/dev 下生成了SPI设备节点,如下图:
SPI回环测试硬件连接:将SPI2_DI 与 SPI2_DO连接,即又发又收。
我们需要操作这个节点来实现回环测试,在android kernel代码中附带spi的测试程序,代码路径在/Documentation/spi/, 我们需要编译它,我们需要在/Documentation/spi/下增加Android.mk,如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES += spidev_test.c
LOCAL_MODULE:= spidev_test
include $(BUILD_EXECUTABLE)
在/Documentation/spi/路径下执行mm,在out/target/product/hikey960/system/bin/下生成
spidev_test。
运行spidev_test,如下图:
运行结果:RX接收的数据与TX发送的数据是一样的。
结论:SPI管脚配置正确;SPI控制器也OK.
备注:./spidev_test -D /dev/spidev32766.0 -s (SPI速率)
Working