赞
踩
最近在使用飞思卡尔的imx6ull的时候,要用spi协议实现和icm20608六轴传感器的通讯时,发现读取出来的数据都是0(即使读取的是ID寄存器)。
- 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*/
- >;
- };
移植正点原子出厂的设备树文件,发现是可以正常读取的,于是将官方的设备树文件和自己的进行对比,发现描述引脚的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系统无法找到引脚信息,无法完成配置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。