欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-28 07:59:13
...

项目场景:

在眺望电子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的相关操作接口。该目录下默认有如下文件。

[email protected]:~# 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。、

[email protected]:~# 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文件。

[email protected]:~# cd /sys/class/gpio/
[email protected]:/sys/class/gpio# echo 54 > export
[email protected]:/sys/class/gpio# ls
export  gpio54  gpiochip0  gpiochip128  gpiochip160  gpiochip192  gpiochip32  gpiochip64  gpiochip96  unexport

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

[email protected]:/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操作。例如:

[email protected]:/sys/class/gpio/gpio54#  echo out >direction 			#设置为输出模式
[email protected]:/sys/class/gpio/gpio54# echo 1 >value       				#输出高电平
[email protected]:/sys/class/gpio/gpio54# echo 1 >value       				#输出低电平

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

[email protected]:/sys/class/gpio/gpio54# echo in >direction   			#设置为输入模式

[email protected]:/sys/class/gpio/gpio54# cat value       			    	#读取引脚状态值
0

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

[email protected]:/sys/class/gpio#  echo 54 > unexport              #取消gpio54导出