基础词语:GPIO —— CPU 引脚通用 I/O 口序号
本文以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
导出时需要切换到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对应的引脚。
这里我们把gpio1006设置为输出,这样用万用表测量起来比较方便。
进入到gpio1006文件夹,然后 echo out > direction,如下:
rk3399_rangotec:/sys/class/gpio # cd gpio1006/
rk3399_rangotec:/sys/class/gpio/gpio1006 # echo out > direction
使能与关闭只需向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电平)。