NXP i.MX6 ARM-Linux GPIO应用层操作

项目场景:

在眺望电子TW-IMX6DL-EVM开发板上复用为GPIO引脚后,应用层操作方法。

编译环境及开发包: 主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
开发板:TW-IMX6DL-EVM
Linux:Linux-4.1.15

注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6 ARM嵌入式平台,这是一个基于NXP iMX6 ARM处理器,支持单核/双核Cortex-A9的核心板。


解决方案:

GPIO的全部操作可通过/sys/class/gpio目录下的文件来完成。该目录下提供了GPIO的相关操作接口。该目录下默认有如下文件。

root@imx6dlsabresd:~# ls /sys/class/gpio/
export  gpiochip0  gpiochip128  gpiochip160  gpiochip192  gpiochip32  gpiochip64  gpiochip96  unexport

TW-AC6DL-EVM系统将芯片全部的IO按照处理器的分组分成7个gpiochip,gpiochip后的序号是所在GPIO组的基数,例如gpiochip0表示该组的IO基数为0,gpiochip32表示该组的IO基数为32,与下文提到的BANK概念不同,gpiochip序号是从0开始,BANK则表示GPIO引脚所在的BANK,序号从1开始。
  进入每个gpiochip目录,里面有如下文件,可用来查询,如gpiochip0。、

root@imx6dlsabresd:~# ls /sys/class/gpio/gpiochip0
base  device  label  ngpio  power  subsystem  uevent

base表示该组的基数,与序号对应,label表示GPIO的标签,通常是gpio,ngpio则表示该组的GPIO数量,最大为32。
  /sys/class/gpio目录下还有两个重要文件export和unexport。export用于导出某个GPIO的操作接口,unexport用于撤销接口的导出。在使用任何一个GPIO之前,都需要将GPIO的序号写入export文件,完成接口导出。排列序号的计算公式如下所示。

𝑮𝑷𝑰𝑶排列序号 = (𝑩𝑨𝑵𝑲 − 𝟏) × 𝟑𝟐 + 𝑵

在公式中BANK为GPIO引脚所在的BANK,N则为引脚在这个BANK中的序号,BANK最小值为1,以GPIO2_IO22为例,其BANK值为2,N值为22,因此排列序号为(2-1)*32+22=54。
  写入排列序号的操作命令如下所示(注意“>”两边各有一个空格)。

# echo N > export

例如,若准备操作GPIO2_IO22,即gpio54,则需先将54写入到export文件。

root@imx6dlsabresd:~# cd /sys/class/gpio/
root@imx6dlsabresd:/sys/class/gpio# echo 54 > export
root@imx6dlsabresd:/sys/class/gpio# ls
export  gpio54  gpiochip0  gpiochip128  gpiochip160  gpiochip192  gpiochip32  gpiochip64  gpiochip96  unexport

导出成功后会在/sys/class/gpio目录下生产gpio54这个链接目录文件,该目录下提供了GPIO54的全部操作接口。

root@imx6dlsabresd:/sys/class/gpio/gpio54# ls
active_low  device  direction  edge  power  subsystem  uevent  value

direction用于设置或查询GPIO的方向,可能值为“in”或者“out”,分别表示输入或者输出;value表示GPIO的电平值,在输入模式下表示该引脚的电平(0或者1),在输出模式下表示写入该引脚的值(0或者1)。
  操作I/O需要先设置方向,然后进行I/O操作。例如:

root@imx6dlsabresd:/sys/class/gpio/gpio54#  echo out >direction 			#设置为输出模式
root@imx6dlsabresd:/sys/class/gpio/gpio54# echo 1 >value       				#输出高电平
root@imx6dlsabresd:/sys/class/gpio/gpio54# echo 1 >value       				#输出低电平

如果作为输入引脚使用,则:

root@imx6dlsabresd:/sys/class/gpio/gpio54# echo in >direction   			#设置为输入模式

root@imx6dlsabresd:/sys/class/gpio/gpio54# cat value       			    	#读取引脚状态值
0

I/O操作完毕,如果不再需要这些操作接口,可将该GPIO序号写入unexport,取消接口导出。

root@imx6dlsabresd:/sys/class/gpio#  echo 54 > unexport              #取消gpio54导出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

眺望电子-ARM嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值