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

一、问题描述

        最近在使用飞思卡尔的imx6ull的时候,要用spi协议实现和icm20608六轴传感器的通讯时,发现读取出来的数据都是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相关的四个引脚,在设备树文件中搜索使用uart2引脚的配置,然后屏蔽掉。

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系统无法找到引脚信息,无法完成配置。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值