TQIMX8MM设备树IO引脚复用配置方法

少_游

关注

阅读 111

2023-05-04

TQIMX8MM设备树IO引脚复用配置方法

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法



例程开发板:TQIMX8MM

开发板系统:Ubuntu 20.04

内核版本:5.4.24


前言

随着嵌入式系统的不断发展,设备树作为一种重要的硬件描述语言,已经成为了嵌入式系统开发中不可或缺的一部分。

在设备树中,配置IO引脚和复用功能是非常常见的需求

这时候,pinctrl就会发挥重要的作用。

它可以帮助开发者在不同的设备上配置GPIO引脚和复用功能,从而方便地实现硬件资源的管理和控制。

在本文中,我们将详细介绍如何在设备树中借助pinctrl来配置GPIO引脚和复用功能,以及如何在Linux内核中使用这些配置来控制硬件资源。

由于篇幅有限,本文只涉及IO引脚复用配置,如需完全掌握IO引脚配置并使用,还需进一步了解IO引脚电气特性配置方法以及GPIO子系统相关知识。

pinctrl子系统简介

大多数芯片的引脚都是支持复用的,如某些引脚既可以设置为GPIO,也可设置为I2C,此外,与单片机一样,引脚还需要设置各种电气特性,如上拉下拉、速度、驱动能力等。

在如今芯片上百个引脚的情况下,传统寄存器配置引脚的方法显得非常吃力,其中容易造成引脚功能冲突等问题显得尤为突出,pinctrl就是为解决此类问题而诞生的。

pinctrl 子系统主要工作内容如下:

①、获取设备树中 pin 信息。

②、根据获取到的 pin 信息来设置 pin 的复用功能

③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。

对于我们使用者,一般只需在设备树中修改引脚相关属性既可,引脚初始化等工作均由pinctrl完成。以下将介绍基于pinctrl的引脚复用配置思路方法。

引脚复用基本思路

1.根据需要复用的功能,查找空闲可用引脚

2.如无空闲引脚,可先关掉原先占用这些引脚的设备

3.在对应的外设的设备树修改或添加复用功能引脚


1、确认功能引脚

比如,需要使用PWM1,在《IMX8MMRM.pdf》芯片参考手册(以下简称芯片手册)第八章,IO复用表,找到PWM1:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_02


可以看到此功能可以在这三个引脚中选择一个作为复用。

若选择“I2C4_SDA”引脚作为PWM1,需要在设备树中关闭引脚原来的功能,再进行修改复用。

2、查找并关闭引脚占用

在“imx8mm-tqv1.dts”设备树中搜索“I2C4_SDA”,可以发现引脚有两处引用:

此处作为I2C4输出:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_03


此处作为GPIO:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_04


搜索这两个节点的名称,查看是否被调用:

在“imx8mm-tqv1-lvds.dts”文件中,找到“pinctrl_i2c4”节点的引用,但并未在此设备树文件或其他设备树文件中找到“pinctrl_gpio_wlf”的引用,说明只有“pinctrl_i2c4”配置生效,现在引脚被复用为I2C4的SDA功能:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_05


将此节点注释:

vscode中选中代码块,键盘Ctrl+/进行注释

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_06


3、重新配置设备引脚

搜索找到pwm1的pinctrl节点:

在“imx8mm-tqv1.dts”找到:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_07


找到相关复用宏定义:

在“imx8mm-pinfunc.h”中可以找到“PWM1_OUT”的相关的宏定义,可以搜索到三条,找到“I2C4_SDA”引脚的此条定义:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_08


替换复用宏定义:

将“pinctrl_pwm1”节点下的宏定义替换为刚刚找到的宏定义:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_09


修改完成:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_10


至此,“I2C4_SDA”引脚被复用成“PWM1_OUT”功能。


下面列举I2C的引脚配置。

I2C引脚复用配置

由于不同外设的复用方式各有不同,需要具体情况具体分析。

本例以I2C4引脚复用配置举例,在IMX8MM上,通过查看芯片手册得知,每一路硬件I2C只能用唯一的特定的引脚,无法复用成其他引脚,但当其引脚被其他功能占用时,就需要先关闭占用引脚的功能。

1.在芯片手册中查找功能对应的引脚

可以看到,要使用“I2C4_SCL”和“I2C4_SDA”:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_11


2.在设备树中查找引脚是否被占用,有占用就关闭:

“I2C4_SDA”被PWM1占用,注释此节点,或将此节点功能引脚改复用成其他引脚:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_12


这个节点也用到了此引脚,但节点未被调用,可以不用管:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_13


这个同上,未被调用,不用管:

TQIMX8MM设备树IO引脚复用配置方法_IO引脚配置方法_14


3.将“pinctrl_i2c4”节点的引脚设置为“I2C4_SCL”和“I2C4_SDA”:

至此,在设备树中I2C4引脚复用配置完成。



精彩评论(0)

0 0 举报