116 iomuxc节点:pinctrl子系统初窥

1、iomuxc节点

汇总所需引脚的配置信息
pinctrl子系统预存iomux节点信息
相当于一个寄存器配置器的集合。
所有pin的控制器都属于这一节点。

imx6ull.dtsi

/*节点标签:节点完整的名字*/
iomuxc: iomuxc@20e0000 {
	/*由此属性匹配pinctrl子系统驱动*/
	compatible = "fsl,imx6ul-iomuxc";
	reg = <0x20e0000 0x4000>;
};
  • compatible:用来与pinctrl子系统的平台驱动做匹配
  • reg:引脚配置寄存器的基地址是0x020e0000,地址范围是0x4000。后置mux reg、conf reg、input reg 都是相对于此基地址而言的。

imx6ull-alientek-emmc.dts
此为野火的设备树源码

/* &节点标签 追加属性 */
&iomuxc {
	/* 表示使用的引脚具有哪些状态 */
  	pinctrl-names = "default""init","sleep";
  	/* 引用了其它的节点,见下 */
  	pinctrl-0 = <&pinctrl_hog_1>; //当设置为default状态使用 pinctrl-0 引脚组
  	pinctrl-1 =<&xxx>; //代表init状态
  	pinctrl-2 =<&yyy>; //代表sleep状态
 	 ...
 	 /* 引脚组节点,包含若干个引脚的配置信息 */
  	pinctrl_uart1: uart1grp {
  		/* imx6ull的pinctrl子系统用此属性名(fsl,pins)来记录引脚的配置信息,其它开发板同类节点可能不叫 fsl,pins */
  		fsl,pins = <
  			MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
  			MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
  		>;
  	};
  ...
}

2、节点引脚配置方式

  • pinctrl-names:定义引脚状态
  • pinctrl-0:定义第0种状态需要使用到的引脚组,可引用其他节点标识
  • pinctrl-1:定义第1种状态需要使用到的引脚组,以此类推

3、节点配置信息记录

  • fsl,pins
    结合imx6ull的pinctrl子系统驱动使用
    以该属性来标识引脚的配置信息
    别的开发板可能使用别的名字

  • fsl,pins属性值
    一个宏+一个十六进制数

  MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1

宏定义原型
原子的宏定义在 imx6ull-pinfunc-snvs.h 和 imx6ull-pinfunc.h

  #define MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x0084 0x0310 0x0000 0 0
  • 宏值含义
mux_regconf_reginput_regmux_modeinput_val
复用寄存器的偏移地址属性寄存器偏移地址引脚输入设置寄存器偏移地址,此处没有设置为0复用寄存器的值输入设置寄存器的值
0x00840x0310000

16进制数用来设置引脚属性寄存器的具体值(变化太多,一一为其定义宏不现实)

mux_reg:引脚复用设置寄存器 的偏移地址
在这里插入图片描述
conf_reg:引脚属性设置寄存器 的偏移地址
在这里插入图片描述

  • input_reg:引脚输入设置寄存器 的偏移地址
    引脚需要输入功能时设置

  • mux_mode:复用寄存器设置值
    设置引脚复用

  • input_value:输入寄存器设置值
    设置引脚输入特性

  • 十六进制数
    属性寄存器设置值
    因为可取的值太多,独立设置
    如果把这个16进制数也做到宏里面,那么宏的数目太多了

引用\[1\]: pinctrl子系统是Linux内核中的一个框架,用于统一管理不同系统芯片的引脚控制和配置。在pinctrl子系统中,有一个主要的结构体struct pinctrl_dev,用于表示一个引脚控制器设备。一般系统只会有一个struct pinctrl_dev实例。通过调用pinctrl_register_pins函数,可以为每个引脚分配一个独立的struct pin_desc结构体,并进行相应的赋值。struct pin_desc是pinctrl子系统用来管理每个引脚的最小单元。 引用\[2\]: 在pinctrl子系统中,引脚控制器并不只有一个,而是可以有多个。在设备树中,含有pinctrl-names和pinctrl-0属性的节点会拥有一个struct pinctrl结构体。pinctrl-names和pinctrl-0属性中的内容指定了要控制的引脚。有时候会遇到多个pinctrl-names和pinctrl-0属性,可以通过这种方式来配置不同的引脚控制。 引用\[3\]: pinctrl子系统的目的是为了统一各种不同的系统芯片中的引脚管理。在ARM的各种SOC芯片中,一个引脚可以被复用为不同功能的引脚,例如GPIO、SPI、I2C、UART等。pinctrl子系统的引入正是为了解决这种复用问题,使得不同SOC厂商的引脚管理能够在Linux内核中得到统一。 #### 引用[.reference_title] - *1* *3* [Linux pinctrl子系统框架流程详解(基于Kernel 3.16,arm,设备树)](https://blog.csdn.net/ZHONGkunjia/article/details/89873417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [基于Linux的Pinctrl子系统框架源码分析](https://blog.csdn.net/qq_42017846/article/details/127795402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值