基础词语: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 gpiochip1000 gpiochip1064 gpiochip1128
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电平)。
文章评论