资讯详情

linux使用spi读取传感器数值一直显示0

一、问题描述

最近使用飞思卡尔imx6ull用的时候spi协议实现和icm通信20608六轴传感器时,发现读取的数据是0(即使读取了)ID寄存器)。

二、解决方案

1、在论坛上发现问题,首先忘记屏蔽设备树冲突的引脚配置

pinctrl_ecspi3:icm20608{    fsl,pins=<    /* MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0*/     MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20   0x10b0     MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK  0x10b1     MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI   0x10b1     MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO   0x10b1    >;

可以看到,icm20608配置了uart2在设备树文件中搜索和使用四个相关引脚uart配置2引脚,然后屏蔽。

pinctrl_flexcan2: flexcan2grp{    fsl,pins = <     /* MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX 0x1b020*/     /* MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX 0x1b020*/    >;   };   pinctrl_uart2: uart2grp {    fsl,pins = <     /* MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1        MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1*/        MX6UL_PAD_UART3_RX_DATA__UART2_DCE_RTS 0x1b0b1       MX6UL_PAD_UART3_TX_DATA__UART2_DCE_CTS 0x1b0b1    >;   };    pinctrl_uart2dte: uart2dtegrp {    fsl,pins = <     /* MX6UL_PAD_UART2_TX_DATA__UART2_DTE_RX 0x1b0b1     // MX6UL_PAD_UART2_RX_DATA__UART2_DTE_TX 0x1b0b1     // MX6UL_PAD_UART3_RX_DATA__UART2_DTE_CTS 0x1b0b1     // MX6UL_PAD_UART3_TX_DATA__UART2_DTE_RTS 0x1b0b1*/    >;   };

2.发现问题还没有解决,输出还是0

移植正点原子出厂的设备树文件,发现可以正常读取,官方设备树文件与自己进行比较,发现引脚的描述fsl被我误写成fls

pinctrl_ecspi3:icm20608{    fsl,pins=<    /* MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0*/     MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20   0x10b0     MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK  0x10b1     MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI   0x10b1     MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO   0x10b1    >;   };

改正后可正常读取。

三、复习

关于这里 fsl,pin的作用:

对于 I.MX 系列 SOC 而言,pinctrl 通过读取驱动程序fsl,pins获得属性值 PIN 因此,该属性名称必须完全遵循规则pinctrl系统找不到引脚信息,配置也无法完成。

标签: ss系列传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台