i.MX6 GPIO配置

原理图

假设有如下原理图,比如说我们要控制 USB_H1_EN 管脚,该管脚与 GPIO_0 的pad连接,因此后面所有的关于该引脚的配置都要围绕pad GPIO_0 展开

在这里,我们将GPIO_0做为一个普通的GPIO口使用。
这里写图片描述


i.MX6 的pad

在i.MX6上,pad是唯一存在的,一个pad可以通过复用为多个功能。

如下是i.MX6芯片上的管脚图,蓝色框框里面的就是pad的名称。

这里写图片描述


查看pad的复用

我们可以在“iMX6DQPRM.pdf”文档中的”External Signals and Pin Multiplexing ”章节都能够索引到GPIO_0可复用的情况如下:

这里写图片描述

<Kernel_Dir>/arch/arm/boot/dts/imx6q-pinfunc.h 中可以看到关于 GPIO_0 的如下宏定义:
这里写图片描述

i.MX6 Linux Kernel中pinfunc.h中宏定义的格式如下:

#define MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x220 0x5f0 0x000 0x5 0x0

名称意义
MX6QDL每个i.MX6的核命名不同
PAD固定为PAD
GPIO_0pad的名称,唯一
GPIO1_IO00该pad复用出来的功能,最多复用8个

关于后面的值的意思,可以参照i.MX6 pinctrl解析文章。


检查pad功能的唯一性

虽说pad可以复用多个功能,但是在实际使用中得根据情况只能使用其中的某一种功能。因为我们将pad GPIO_0 当成普通的GPIO使用,因此我们可以知道我们要将这个pad配置为 MX6QDL_PAD_GPIO_0__GPIO1_IO00,即使用第1组第0号的GPIO。

在使用该GPIO之前,我们需要在 <Kernel_Dir>/arch/arm/boot/dts/xxx.dts 中查找关键字 MX6QDL_PAD_GPIO_0 看GPIO_0 的pad是否有配置另做他用。如果有,需要将相关的配置屏蔽掉(在移植Kernel的过程中也许会将某些不必要的功能添加进去,此时做这一步很有必要)。


配置 GPIO1_IO00 功能

在dts中配置pad为普通的GPIO功能,只需在 pinctrl_hog 的节点进行添加。

这里写图片描述

这里写图片描述

因为这个GPIO是属于USB模块控制的,可以加入到USB的节点中去。

这里写图片描述

这里写图片描述


控制 GPIO1_IO00

在dts中配置完GPIO1_IO00 后,就可以在代码中控制该GPIO。

#define USB_H1_EN       IMX_GPIO_NR(1, 0)

gpio_request(USB_H1_EN, "USB_H1_EN");
gpio_direction_output(USB_H1_EN, 1);
gpio_export(USB_H1_EN, true);

GPIO的转换关系

这里写图片描述


参考资料

https://www.kosagi.com/w/index.php?title=Definitive_GPIO_guide#i.MX6Q_GPIO_bit.2Fbank_to_Pad_name_Table

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值