RK3399 Android7.1系统,GPIO控制详解
基础词语:GPIO —— CPU 引脚通用 I/O 口序号

1. 查看GPIO与物理引脚的对应关系

本文以GPIO0_A6为例,即电路板上的CPU引出的零号第六个引脚,查看硬件线路与系统gpio路径的对应关系。

其中rk3399 P2引出的GPIO0_A6 原理图与实物,如下:

首先需要计算对应的gpio number的值,可以通过/sys/kernel/debug/gpio查询信息:

rk3399_rangotec:/ $ cat /sys/kernel/debug/gpio
GPIOs 1000-1031, platform/pinctrl, gpio0:
gpio-1002 ( |3G_power ) out lo
gpio-1004 ( |bt_default_wake_host) in lo
gpio-1005 ( |power ) in hi
gpio-1009 ( |bt_default_reset ) out lo
gpio-1010 ( |reset ) out hi
gpio-1011 ( |pwd_en_3G ) out hi


GPIOs 1032-1063, platform/pinctrl, gpio1:
gpio-1033 ( |led_Test ) in lo
gpio-1034 ( |int-n ) in hi
gpio-1035 ( |vbus-5v ) out hi
gpio-1045 ( |enable ) out lo
gpio-1046 ( |vsel ) out hi
gpio-1049 ( |vsel ) out lo


GPIOs 1064-1095, platform/pinctrl, gpio2:
gpio-1076 ( |camsys_gpio ) out lo
gpio-1083 ( |bt_default_rts ) in hi
gpio-1090 ( |bt_default_wake ) in lo
gpio-1091 ( |camsys_gpio ) out lo

通过上面的返回结果可以看到,GPIO0是以nubmer为1000开始, 那么GPIO0_A6就是 1000 +  6 = 1006。

然后查看/sys/class/gpio目录下存在的gpio,这时候并没有gpioxxxx_1006,需要我们导出一个。

rk3399_rangotec:/ $ ls /sys/class/gpio                               
export     gpiochip1032 gpiochip1096 unexport 

2. Android系统导出GPIO

导出时需要切换到root执行export命令,否则权限阻止,导出命令如下:

rk3399_rangotec:/sys/class/gpio $ su 
rk3399_rangotec:/sys/class/gpio # echo 1006 > export                       
rk3399_rangotec:/sys/class/gpio # ls
export  gpiochip1000 gpiochip1064 gpiochip1128 
gpio1006 gpiochip1032 gpiochip1096 unexport

此时就会发现多了一个 gpio1006的文件夹,  这个文件对应着GPIO0_A6引脚对应的功能。

注意:由于rk3399 kernel自带了通用GPIO驱动,所以这里可以直接export对应的引脚。

3. Android系统在用户空间使用系统命令控制GPIO

这里我们把gpio1006设置为输出,这样用万用表测量起来比较方便。

进入到gpio1006文件夹,然后 echo out > direction,如下:

rk3399_rangotec:/sys/class/gpio # cd gpio1006/     
rk3399_rangotec:/sys/class/gpio/gpio1006 # echo out > direction

4. GPIO功能测试

使能与关闭只需向value里传1和0即可,如下:

# 使能
rk3399_rangotec:/sys/class/gpio/gpio1006 # echo 1 > value                   
rk3399_rangotec:/sys/class/gpio/gpio1006 # cat value                       
1
# 关闭
rk3399_rangotec:/sys/class/gpio/gpio1006 # echo 0 > value 
rk3399_rangotec:/sys/class/gpio/gpio1006 # cat value 
0

使能gpio1006引脚,用万用表测量下对应的针脚是否为1.8V(FET3399-C 核心板引出的 GPIO,除了 RGMII 和 MDC,MDIO 是 3.3V 的,其余 GPIO 全部是 1.8V电平)。

Android 系统编译相关文章

 

评论列表: