GPIO应用开发方法【ZT】

Linux的应用层程序中,可以使用系统中的GPIOLIB模块在用户空间提供的sysfs接口,实现应用层对GPIO的独立控制。本节介绍的GPIO的这种操作方式是在Linux 2.6.35内核之后引入的一种GPIOLIB的管理机制,GPIOLIB提供了很好的用户接口封装,为用户提供了一个动态导出的接口。

在实验箱中运行的Linux系统的/sys/class/gpio目录下,共有5个文件,其中有3个文件为符号链接(gpiochip0、gpiochip5、gpiochip244),指向管理对应设备的目录。这3个符号链接分别对应实验箱中能够分别控制对应GPIO的3个管理芯片。上一节中涉及的GPIO都是从与gpiochip244对应的芯片中引出的。因此,本节主要讨论gpiochip244对应芯片的GPIO管理,但是此处介绍的操作方法同样也适用于gpiochip0和gpiochip5。

在/sys/class/gpio/gpiochip244目录下,共有3个文件和3个文件夹,主要作用见表4-2。

表4-2  gphichip244目录下文件的作用


文 件 名 类    型 属    性 作    用
label 文件 只读 设备信息
base 文件 只读 设备所管理的GPIO初始编号
ngpio 文件 只读 设备所管理的GPIO总数
power 目录   设备供电方面的相关信息
subsystem 目录   符号链接,指向父目录
uevent 文件 读写 内核与udev(自动设备发现程序)之间的通信接口
 在这个目录下,base和ngpio这两个文件为开发人员提供了重要的信息。在gpiochip244目录下,base文件中的内容为“244”(字符串类型),ngpio文件中的内容为“12”。这两条信息说明,该外设管理了编号从244到255的12个GPIO接口。在实验箱中只有编号在248到255之间的8个GPIO被引出。

对其中某个GPIO接口的控制主要需要进行如下包含3个步骤的操作:

(1) 导出GPIO接口

在/sys/class/gpio目录中有两个只具有写属性的文件:export和unexport。通过对这两个文件进行操作可以实现对GPIO接口的导出。

下面举例说明,为了对255号GPIO接口进行导出,可以在终端中通过下面的操作来完成:
cd  /sys/class/gpio   //进入相应的目录
echo 255 > export   //将“255”(字符串类型)写入文件export

将“255”写入export文件后,系统会自动在/sys/class/gpio下创建gpio255目录。这说明对编号为255的GPIO接口导出成功。

(2) 设置GPIO属性

在gpio255目录下,系统会自动产生6个文件。其中,power、subsystem和uevent这3个文件的功能与表4-2中描述的功能相同。

其他的3个文件——value、direction和active_low都具有读写属性,用于完成对GPIO接口的控制。

value:具有读写属性,表示当前GPIO接口的电平状态。当GPIO的方向为输入时,可以通过value读出当前GPIO接口的电平状态高低(“1”/“0”,均以ASCII码表示);当GPIO方向为输出时,可以向该文件写入“1”/“0”,控制当前GPIO接口的高/低电平。

direction:具有读写属性,控制GPIO接口的输入输出方向。如果将“out”写入该文件,该GPIO接口为输出状态;如果将“in”写入该文件,该GPIO接口为输入状态;如果将“high”写入该文件,那么在将GPIO接口置为输出状态的同时,也将value的值置为“1”;如果将“low”写入value文件,那么在将GPIO接口置为输出状态的同时,将“0”写入value文件。通过对direction文件的读操作还可以判断当前GPIO接口的输入/输出状态(“in”/“out”)。

active_low:具有读写属性,值为“0”或“1”,用于决定value中的值是否进行翻转。当值为“0”时,value中的“0”表示低电平,“1”表示高电平;当值为“1”时,value中的“1”表示低电平,“0”表示高电平。

(3) GPIO接口导出的取消

将取消导出的GPIO编号写入文件unexport中,对应的GPIO接口将会被取消导出。相对的,在文件系统中创建的目录也会消失。

例如,取消255号GPIO接口的导出:
echo 255 > unexport   //将“255”(字符串类型)写入文件unexport

猜你喜欢

转载自blog.csdn.net/zjf30366/article/details/84665582
今日推荐