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的相关操作接口。该目录下默认有如下文件。
[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导出
上一篇: 用js实现的生肖查询的代码
下一篇: 引入css样式的三种方式