【Linux】Pinctrl子系统简介

前言:

我们工作开发中非常常用的就是GPIO,在Linux开发中,是有必要去熟悉并理解的。在Linux内核中也有提供相应的子系统pinctrl子系统,本文从大的面上去了解它

参考学习:Linux笔记老师课程(Pinctrl子系统)

https://live.csdn.net/v/219059?spm=1001.2014.3001.5501

https://xuesong.blog.csdn.net/article/details/109522945?spm=1001.2014.3001.5502

https://blog.csdn.net/qq_33487044/article/details/123468166

https://blog.csdn.net/qq_33487044/article/details/110010020

现阶段,先学到这里了,这一部分的内容后续会结合具体的例子实践,深入学习理解。

一、Pinctrl子系统概述 

gpio引脚除了作为普通输入输出端口之外化具有接入其他控制器的功能。但是引脚的功能分配和特性配置是个繁琐的工作。这个问题如何去解决呢?

Pinctrl子系统就是来解决上述问题的,它主体上有两类设置,其中一类是功能选择,即用作iic、uart还是作为普通gpio。另一类则是gpio的特性配置,即上拉、下拉、驱动能力和速率的配置。 

总述,Linux Pinctrl子系统提供的功能:

  • 管理系统中所有的可以控制的pin,在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin.
  • 管理这些pin的复用 (Multiplexing) 。对于SOC而言,其引脚除了配置成普通的GPI0之外,若干个引脚还可以组成一个pin group,特定的功能。pin controlsubsystem要管理所有的pin group。
  • 配置这些pin的特性。例如使能或关闭引脚上的pul-up、pull-down电阻,配置引脚的driver strength。

二、Pinctrl的具体框架

Pinctrl整个驱动模块可以分为4个部分:

  • pinctrl api:提供给上层用户调用的接口
  • pinctrl common framework:提供给上层用户调用的接口
  • pinctrl driver:平台需要实现的驱动
  • board configuration:设备pin配置信息。

  • 在Pinctrl core可以看到有三个状态,default、sleep以及idle。系统正常运行时,会先按默认的配置或者处于空闲的状态;系统进入休眠状态时,为节省功耗,需要对设备pin进行另一组配置。
  • Pinctrl framework 主要处理 pinstate、pinmux 和 pinconfig 三个功能,映射关系如上图所示。

三、Pinctrl dts配置例子

uart0_pins: uart0-pins {
	pins = "18", "19";
	function = "uart0";
};
uart0_sleep_pins: uart0-pins {
	pins = "18", "19";
	function = "gpio";
};
...
&uart0 {
	pinctrl-names = "default","sleep";
	pinctrl-0 = <&uart0_pins>;
	pinctrl-1 = <&uart0_sleep_pins>;
	status = "okay";
};

pinctrl-0对应上述uart0-pins,这里pin会配置为uart功能,对应18、19号引脚。pinctrl-1对应上述的uart0_sleep_pins,系统进入休眠时,这里pin会配置为gpio功能。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希希雾里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值