飞凌干货丨细说GPIO复用-基于IMX6X平台
本文简单介绍一下GPIO的复用,配置GPIO的方式多种多样,本文只介绍通过IOMUX的方式配置GPIO,主要适用于飞凌OKMX6Q-CV1.3平台Linux4.1.15操作系统,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。
一、使用IOMUX方式配置GPIO
1. 以底板上UART2_TX引脚为例,可以看到该引脚目前的功能是串口功能,将该引脚复用为GPIO使用,在飞凌提供的硬件手册中可以查看到该引脚对应的padname为EIM_D26。
2.在内核源码linux4.1.15/arch/arm/boot/dts/imx6q-pinfunc.h中搜索EIM_D26可以看到如下宏定义:
其中
#define |
0x0bc 0x3d0 0x000 |
MX6QDL_PAD_EIM_D26__GPIO3_IO26 |
0x5 0x0 |
为该引脚作为GPIO的定义
3. 在linux4.1.15/arch/arm/boot/dts/imx6qdl-sabresd.dtsi设备树中重新配置该引脚,首先搜EIM_D26找到相关的引脚配置,可以看到原有功能是被配置成为串口功能:
pinctrl_uart2:uart2grp {
fsl,pins= <
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
>;
};
&uart2{
pinctrl-names= "default";
pinctrl-0= <&pinctrl_uart2>;
status= "okay";
};
将status= "okay"修改为:status= "disabled"
&uart2{
pinctrl-names= "default";
pinctrl-0= <&pinctrl_uart2>;
status= "disabled";
};
以上修改是关闭串口功能的调用,然后接着添加该引脚GPIO功能的配置:
以上修改完成后,重新编译,并将新生成的镜像烧写到开发板上即可。
引脚复用的原则是:在设备树中添加想要实现的该引脚的功能,并把以前的复用功能去掉,无复用功能直接添加即可。
二、文件系统的操作
以上操作完成了内核中的引脚复用的配置,下面我们看一下应用中怎么操作;开发板启动后可以在文件系统中执行以下操作。
❶ 计算对应 sys/class/gpio 的值 GPIOn_IOx = (n-1)*32 + x
那么GPIO3_IO26=(3-1)*32+26=90
❷ 将 GPIO3_IO26 设置为输出。
echo 90 > /sys/class/gpio/export 用于通知系统需要导出控制的GPIO 引脚编号
❸ 将该引脚设置为输出
echo out > /sys/class/gpio/gpio90/direction 将GPIO设置为输出
❹ 设置输出引脚的电平
echo 1 >/sys/class/gpio/gpio90/value 输出为高电平
echo 0> /sys/class/gpio/gpio90/value 输出为低电平
设置高电平或者是低电平后,可使用万用表测量一下该引脚的具体电平值。
❺ 取消该引脚的导出
echo 90 > /sys/class/gpio/unexport 通知系统取消导出
❻ 将 该引脚设置为输入
echo 90 > /sys/class/gpio/export 用于通知系统需要导出控制的GPIO 引脚编号
echo in> /sys/class/gpio/gpio90/direction 将GPIO设置为输入这时给该引脚接高电平,输入即为高电平,反之为低电平
设置为输入模式可以通过cat /sys/class/gpio/gpio90/value 命令查看当前值
以上是一个引脚功能复用的整个过程,下面简单介绍一下一些参数的配置。
三、对一些参数的解读
在imx6q-pinfunc.h中
#define |
0x0bc0x3d0 0x000 0x5 0x0 |
MX6QDL_PAD_EIM_D26__GPIO3_IO26 |
|
这5个值得含义,已经做了解释
/* The pin function ID is a tuple of
* <mux_reg conf_reg input_reg mux_mode input_val>*/
在imx6qdl-sabresd.dtsi中也有一个值得设置:
MX6QDL_PAD_EIM_D26__GPIO3_IO26 0x30b0
以上这6个参数有以下对应关系:
0x0bc |
0x3d0 |
0x000 |
0x5 |
0x0 |
0x30b0 |
mux_reg_ofs |
conf_reg_ofs |
input_reg_ofs |
mux_mode |
input_val |
pad_ctrl |
这些参数的具体值是根据CPU手册的IOMUX章节查找配置的。
1. 确定mux_reg_ofs的值
在CPU手册中搜索padname, EIM_D26引脚在CPU手册中是EIM_DATA26,如下图红色方框圈出的偏移地址就是mux_reg_ofs的值。
2. 确定conf_reg_ofs的值
搜索EIM_DATA26,下图红色方框圈出的偏移地址即为该值。
3. 确定input_reg_ofs的值
iMX6Q CPU手册中没有该引脚作为gpio时对应的input配置,所以是0x000,那么对应的input_val,该值也为0x0。
4.确定mux_mode的值
搜索IOMUXC_SW_MUX_CTL_PAD_EIM_DATA26,可以看到该值是0x5。
5. 确定pad_ctrl的值
搜索IOMUXC_SW_PAD_CTL_PAD_EIM_DATA26,可以看到该寄存器的各个位的含义,根据自己的实际情况来确定该值,该寄存器位数较多没有截全,请自行查看CPU手册。
以上是小编对GPIO复用的一些浅显的理解,希望对您有所帮助。小编水平有限可能会存在一些纰漏,敬请谅解。对于更深入的知识,如果您想了解可以结合CPU手册以及源代码自行研究,有什么好的见解也可以给我们一块分享,非常感谢您的阅读。
---- END ----
长按识别二维码加关注 专注于智能设 备核心平台研发与制造
|
■ 关注“飞凌 嵌入式”公众号,不定期分享行业干货及产品一线资料。 ■ 直接微信回 复产品平台,如“LS1043A”,即可快速获取对应产品信息。 ■ 想要了解飞 凌更多信息,欢迎与我们联系: 销售工程师: 400-699-6866 国际业务部: 0312-3102650-854 技术服务部: 0312-3119192 方案定制类: 17713286015 (杜工),18633238067(王工)
■ 实时技术支 持: AM 9:00 —11:30,PM 13:30—17:00(周一至周五) |
相关产品 >
-
FETMX6Q-C核心板
i.MX6Q核心板板层出不穷,要如何选择?飞凌解读i.mx6Q芯片强性能为您推荐四核A9架构的i.MX6Q产品精选,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工业级核心板,欢迎采购。 i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架构的i.MX6Q四核处理器设计,核心板小尺寸核心板搭配独特的薄款连接器,让设计随心所欲!
了解详情 -
OKMX6Q-C开发板
双千兆飞凌嵌入式iMX6Q开发板,板对板连接器,纤薄之际,次底板支持iMX6Q和iMX6DL核心板。i.MX6Q开发板与i.MX6DL开发板资源丰富,原理图、PCB、软件资源、硬件资源下载,技术支持等。欢迎选购
了解详情 -
FETMX6Q-S核心板
NXP iMX6Quad系列具有四个内核,运行频率达1.2 GHz,带有1 MB L2缓存和64位DDR3或2通道、32位LPDDR2支持。飞凌提供商业级iMX6Q核心板,工业级iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干扰,更快速升级产品等优势。保定飞凌嵌入式专注imx6,imx6开发板,飞思卡尔imx6等ARM嵌入式核心控制系统研发、设计和生产,是imx6,imx6开发板,飞思卡尔imx6提供者,imx6系列产品现已畅销全国,欢迎咨询!
了解详情 -
OKMX6Q-S3开发板
飞凌嵌入式提供iMX6Q开发板,iMX6解决方案,iMX6Q核心板,i.MX6Q开发板解决方案。iMX6Q稳定、快速、性价比高,欢迎选购 NXP iMX6系列芯片全支持,升级简配无忧替换。 了解详情