当前位置:   article > 正文

修改设备树添加某外设需要使用的 IO_fsl,pins

fsl,pins

一、pinctrl子系统简述

PAD:应该是指焊盘
IOMUX控制器:mux:数据选择器,主要是用于信号的切换,实质与机械触点式电子开关一样是开关
WS:指software,软件。
CTL:指control,控制。
GRP:General Purpose Register通用目的寄存器

32位软件多路复用控制寄存器:
1)IOMUXC_SW_MUX_CTL_PAD_<某焊盘名字> 
2)IOMUXC_SW_MUX_CTL_GRP_<组名>

网上有人说:
IO 复用功能选择器(IOMUXC)的寄存器非常多,主要可以分为四组:
① IOMUXC_GPR 寄存器组,用于通用控制设置。
② IOMUXC_SNVS 组,主要用于GPIO5 的控制。
③ IOMUXC_SNVS_GPR 寄存器组,暂时没用到。
④ IOMUXC 组,用于指定IO 的复用功能选择和IO属性设置。

在IO 设置的时候,实际上我们只用到了②和④
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

1)pinctrl 子系统主要工作内容

①、获取设备树中 pin 信息。
②、根据获取到的 pin 信息来设置 pin 的复用功能
③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。
对于我们使用者来讲,只需要在设备树里面设置好某个 pin 的相关属性即可,其他的初始化工作均由 pinctrl 子系统来完成, pinctrl 子系统源码目录为 drivers/pinctrl。

2)属性fsl,pins

1)pinctrl 驱动程序是通过读取“fsl,pins”属性值来获取 PIN 的配置信息

pinctrl_test: testgrp {
       fsl,pins = <
            /* 设备所使用的PIN的两部分配置信息 */
              >;
};
  • 1
  • 2
  • 3
  • 4
  • 5

3)配置信息分两部分

两部分配置信息=设置的复用功能+设置的UART1_RTS_B的电气特性。
设置 UART1_RTS_B 这个 PIN 为 GPIO1_IO19和同时设置电气属性
为:fsl,pins = <MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059>;
即:fsl,pins = <0x0090 0x031C 0x0000 0x5 0x0 0x17059>;

4)将设置复用功能的宏给展开

#define      MX6UL_PAD_UART1_RTS_B__GPIO1_IO19     0x0090 0x031C 0x0000 0x5 0x0
//0x0090:mux控制寄存器偏移地址         
//0x031C:pad控制寄存器偏移地址
//0x0000:select_input控制寄存器偏移地址   
//0x5e:mux模式
//0x0:select_input寄存器值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5)ARM®Cortex®-A7 的硬件设计

看完了Linux 4.1.15设置复用功能的宏,看看ARM®Cortex®-A7 的硬件设计

IO复用去配置寄存器:IOMUXC_SW_MUX_CTL_PAD_xxx_xxx_xxx_xxx
IO电气属性配置寄存器:IOMUXC_SW_PAD_CTL_PAD_xxx_xxx_xxx_xxx

a、IO复用配置

(IOMUXC_SW_MUX_CTL_PAD_UART1_RTS_B)寄存器如图
下图描述了焊盘UART1_RTS_B的IO复用寄存器的各位功能说明和各位在芯片系统中的地址映射。
在这里插入图片描述

我们发现焊盘UART1_RTS_B有10种模式可以选择。

  • 还可以强制焊盘UART1_RTS_B就只能是UART1_RTS_B模式,不能是ENET1_TX_ER、UART5_RTS_B等模式。
  • UART1_RTS_B模式是做uart1

b、电气特性的查阅和设置

fsl,pins = <MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059>;
fsl,pins = <0x0090 0x031C 0x0000 0x5 0x0 0x17059>;
0x17059是用于给pad控制寄存器IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B的0到15位赋值:0x17059

电气属性去配置寄存器IOMUXC_SW_PAD_CTL_PAD_xxx_xxx_xxx,在《IMX6ULL参考手册》的第32章
IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B

下图描述了焊盘UART1_RTS_B的电气属性寄存器的各位功能说明和各位在芯片系统中的地址映射。
在这里插入图片描述
在这里插入图片描述

二、检查设备树各处外设所使用的 IO 是否共用

检查设备树,确保某外设所使用的 IO 没有被其他的外设使用
/FT5426 触摸芯片用到了4个IO,这里是其中的一个复位IO,还有一个中断IO、I2C2的SCL和SDA,使用pinctrl设置PIN的复用和电气属/
pinctrl_tsc: tscgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0xF080 /* TSC_INT */
>;
};
vscode中ctrl+f
搜索GPIO1_IO09和gpio1 9,看使用第一组GPIO中的第9号GPIO的节点数量是否为1

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

闽ICP备14008679号