四核、A9 NanoPi 2 GPIO
的使用
嵌入式设备GPIO
介绍
在嵌入式设备中对
GPIO
的操作,一般的做法是写一个单独驱动程序。其实
linux
下面有一个通用的
GPIO
操作接口,那就是
“/sys/class/gpio”
方式。使用这种方法,你不需要写驱动,便可直接使用
GPIO
引脚,更方便开发,内核更小。
下面是以友善之臂的
NanoPi2
为例,简单的写一下
GPIO
的使用方法。
首先,进入根文件系统,查看系统中有没有
“/sys/class/gpio”
这个文件夹。如果没有请在编译内核的时候通过
make menuconfig
加入
Device Drivers —>
GPIO Support —> /sys/class/gpio/… (sysfs interface)
。
1
:
gpio_operation
通过
/sys/
文件接口操作
IO
端口
GPIO
到文件系统的映射;
2
:控制
GPIO
的目录位于
/sys/class/gpio
中;
3
:
/sys/class/gpio/export
文件用于通知系统需要导出控制的
GPIO
引脚编号;
4
:
/sys/class/gpio/unexport
用于通知系统取消导出;
5
:
/sys/class/gpio/gpiochipX
目录保存系统中
GPIO
寄存器的信息,包括每个寄存器控制引脚的起始编号
base
,寄存器名称,引脚总数
导出一个引脚的操作步骤;(
X
表示数字)
6
:首先计算此引脚编号,引脚编号
=
控制引脚的寄存器基数
+
控制引脚寄存器位数;
7
:
向
/sys/class/gpio/export
写入此编号,比如
12
号引脚,在
shell
中可以通过以下命令实现,命令成功后生成
/sys/class/gpio/gpio12
目录,如果没有出现相应的目录,说明此引脚不可导出;
8
:
echo 12>/sys/class/gpio/export
;
9
:
direction
文件,定义输入输出方向,可以通过下面命令定义为输出;
10
:
echo out>direction
;
11
:
direction
接受的参数:
in, out, high, low
。
high/low
同时设置方向为输出,并将
value
设置为相应的
1/0
;
12
:
value
文件是端口的数值,为
1
或
0
;
13
:
echo 1 & > value
。
/sys/class/gpio
的使用说明:
测试:
由于我们需要通过
sysfs
的方式来操作
GPIO,
因此,我们还需要找到这组引脚在内核中所对应的编号(每一个
GPIO
引脚,内核都会赋于它一个编号)
,
查询内核编号的方法如下
:
1
)
NanoPi 2
开机后,进入根文件系统;
2
)在超级终端中输入以下命令(因命令比较长,建议直接复制运行):
# cd /sys/class/gpio
# for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done
nxp-gpio.0:0
nxp-gpio.4:128
nxp-gpio.5:160
nxp-gpio.1:32
nxp-gpio.2:64
nxp-gpio.3:96
其实这里的
gpio.0
表示的是
GPIOA
,
gpio.1
表示
GPIOB
,其他是也是这样计算。
假如,我们需要使用
NanoPi 2
的
GPIOB30
引脚,想在应用程序使用,我们可以表示为:
64+30=94
也就是说我们使用的是第
94
根
GPIO
。