Pinctrl子系统_01_Pinctrl子系统介绍

本节介绍在Pinctrl子系统中,将会学习哪些内容。

Pinctrl作用

Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的。

一个芯片有成百上千个引脚,这些引用要怎么配置,配置成什么功能,都是通Pinctrl子系统来实现的。

如下图所示,对于一个芯片,有很多个控制器,比如GPIO控制器,I2C控制器,UART控制器,这些控制器都需要操作到引脚。但是不同的控制器,他们需要的引脚配置通常也不同

要如何实现不同引脚的配置的,就可以使用Pinctrl子系统来配置。

Pinctrl子系统_01_Pinctrl子系统介绍_第1张图片

 Pinctrl有三大功能:

  1. 引脚的枚举与命名(Enumerating and naming)
    枚举:列出芯片有哪些引脚
    命名:各个引脚的名字叫什么
  2. 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能
  3. 引脚配置(Configuration):比如上拉、下拉、open drain、驱动强度等

实际上,在芯片内部并没有一个硬件Pinctrl——引脚控制器,但引脚控制器也并不完全是一个软件上的东西,他的背后是有硬件支持的。

首先,引脚控制器是有对应驱动的,芯片引脚控制器的驱动代码,通常是由芯片原厂提供的,是由原厂的BSP工程师编写的,一般的驱动工程师只需要使用就可以了。

通常是在设备树中使用:

  1. 指明使用哪些引脚
  2. 指明复用为哪些功能
  3. 配置为哪些状态

在一般的设备驱动程序中,甚至可以没有Pinctrl的代码。

后续内容

简单的说,后续需要掌握的内容如下:

  1. Pinctrl驱动程序如何编写,里面的重要结构体是怎么样的
  2. 分析如何在设备树中使用Pinctrl
  3. 驱动程序和设备树中的配置是如何联系到一起的,设备树中的配置是如何生效的,很明显内核会帮忙我们调用对应Pinctrl子系统中的代码,我们需要知道是如何实现的,要去分析这个过程

那么,要如何学习这些内容:

  1. 基于使用的角度驱动工程师要掌握的Pinctrl重要概念
  2. Pinctrl子系统使用示例
  3. 主要数据结构与调试方法

  4. pincontroller的数据结构构造过程情景分析(会拆分为很多节)

    1. 根据开发板的设备树信息动态地演示

  5. client端的数据结构构造过程情景分析(会拆分为很多节)

    • 根据开发板的设备树信息动态地演示

  6. 编写一个虚拟的pincontroller驱动程序

其中,1-2主要是说明如何使用(use)Pinctrl子系统;

3-4主要是说明Pinctrl子系统的实现,先说明主要的数据结构,然后根据实际的开发板来动态的演示,跟踪数据结构的构造过程,我们理解这了些数据结构怎么构成,对这个部分的实现也就基本了解了;

5主要是看看设备树中的信息,怎么和Pinctrl子系统产生联系,我们需要来分析这个过程,这个过程同样会设涉及一些数据结构,类似的,我们理解这了些数据结构怎么构成,对这个部分的实现也就基本了解了;

6主要是编写一个虚拟的pincontroller驱动程序,用来加深我们的理解。

你可能感兴趣的:(嵌入式硬件,linux,Pinctrl)