GPIO全称: General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。在RK平台上,除了部分有专门用途的pin(比如DDR、MIPI等),其他的pin,如果不配置复用的话,默认复用状态都是GPIO。RK的GPIO驱动,对上提供的是标准的GPIO接口。android下有一组用户态操作GPIO的sysfs节点。应用层对GPIO编程主要就是通过操作这几个节点来实现。
下面以操作GPIO3_A5为例进行介绍。此GPIO位置如下
“/sys/class/gpio” 下面的节点需要root权限才能操作,使用命令行或者C语言编译出来的程序操作gpio都需要root权限。先执行如下命令获取root权限。
sudo su
在通用的Linux框架下面,所有GPIO都是用数字编号的。对于RK平台的芯片,其编号计算方式为
(gpio控制器号-0)*32+(端口号-‘A’)*8+索引序号
GPIO3_A5的控制器号为3,端口号为A,索引序号5,故编号为
(3-0)32+08+5=101
将GPIO 101设置为用户态操作
echo 101 > /sys/class/gpio/export
将GPIO 101设置为输出
echo out > /sys/class/gpio/gpio101/direction
在GPIO 101为输出的情形下,设置电平
高电平
echo 1 > /sys/class/gpio/gpio101/value
低电平
echo 0 > /sys/class/gpio/gpio101/value
将GPIO 101设置为输入
echo in > /sys/class/gpio/gpio101/direction
在GPIO 101为输入的情形下,读取其电平,1为高,0为低
cat /sys/class/gpio/gpio101/value
取消GPIO 101用户态操作
echo 101 > /sys/class/gpio/unexport
如图