当前位置:   article > 正文

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

icm20608 id = 0x0

一、问题描述

        最近在使用飞思卡尔的imx6ull的时候,要用spi协议实现和icm20608六轴传感器的通讯时,发现读取出来的数据都是0(即使读取的是ID寄存器)。

二、解决方法

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

  1. pinctrl_ecspi3:icm20608{
  2. fsl,pins=<
  3. /* MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0*/
  4. MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x10b0
  5. MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x10b1
  6. MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x10b1
  7. MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x10b1
  8. >;

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

  1. pinctrl_flexcan2: flexcan2grp{
  2. fsl,pins = <
  3. /* MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX 0x1b020*/
  4. /* MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX 0x1b020*/
  5. >;
  6. };
  7. pinctrl_uart2: uart2grp {
  8. fsl,pins = <
  9. /* MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1
  10. MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1*/
  11. MX6UL_PAD_UART3_RX_DATA__UART2_DCE_RTS 0x1b0b1
  12. MX6UL_PAD_UART3_TX_DATA__UART2_DCE_CTS 0x1b0b1
  13. >;
  14. };
  15. pinctrl_uart2dte: uart2dtegrp {
  16. fsl,pins = <
  17. /* MX6UL_PAD_UART2_TX_DATA__UART2_DTE_RX 0x1b0b1
  18. // MX6UL_PAD_UART2_RX_DATA__UART2_DTE_TX 0x1b0b1
  19. // MX6UL_PAD_UART3_RX_DATA__UART2_DTE_CTS 0x1b0b1
  20. // MX6UL_PAD_UART3_TX_DATA__UART2_DTE_RTS 0x1b0b1*/
  21. >;
  22. };

2、发现问题还没有解决,输出依然是0

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

  1. pinctrl_ecspi3:icm20608{
  2. fsl,pins=<
  3. /* MX6UL_PAD_UART2_TX_DATA__ECSPI3_SS0*/
  4. MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0x10b0
  5. MX6UL_PAD_UART2_RX_DATA__ECSPI3_SCLK 0x10b1
  6. MX6UL_PAD_UART2_CTS_B__ECSPI3_MOSI 0x10b1
  7. MX6UL_PAD_UART2_RTS_B__ECSPI3_MISO 0x10b1
  8. >;
  9. };

改正之后就可以正常读取了。

三、复习

        关于这里 fsl,pin的作用:

对于 I.MX 系列 SOC 而言,pinctrl 驱动程序是通过读取“fsl,pins”属性值来获取 PIN 的配置信息,所以这个属性名称必须完全遵循规则,否则pinctrl系统无法找到引脚信息,无法完成配置。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/205769
推荐阅读
相关标签
  

闽ICP备14008679号