一、MTK
1、节点位置
在MTK平台,我们可以通过cat节点(mt_gpio)来查看对应的状态。不同的平台,该管脚对应的位置也是不同的,建议直接进入手机目录查看:
adb shell
find -name "mt_gpio"
我这查看到对应的是:sys/devices/platform/1000b000.pinctrl/mt_gpio
然后直接cat这个节点会出现如下的信息:
PIN: [MODE] [DIR] [DOUT] [DIN] [PULL_EN] [PULL_SEL] [IES] [SMT] [DRIVE] ( [R1] [R0] )
0: 011110100 01
1: 000010100 01
2: 000111100 01
3: 000010100 01
4: 011100100 00
5: 000010100 01
6: 000100110
... ...
2、分解对应的项
PIN: [MODE] [DIR] [DOUT] [DIN] [PULL_EN] [PULL_SEL] [IES] [SMT] [DRIVE] ( [R1] [R0] )
PIN:即对应的GPIO管脚;
MODE:该管脚对应的模式,即该管脚作为什么来用的,如作为普通的GPIO,或者int等,通过mtk_pinmux_get(chip, i)方法获取;
DIR:输入还是输出,即该管脚对应的方向,通过mtk_gpio_get_direction方法获取;0:input pin, 1:output pin
DOUT:如果是输出模式对应的值是多少,通过mtk_gpio_get_out方法获取,默认为0;
DIN:如果是输入模式对应的值是多少,通过mtk_gpio_get_in方法获取,默认为0;
PULL_EN:是否支持输入上下拉,通过mtk_pullen_get方法获取,如果不支持默认为0;只对输入pin有效
PULL_SEL:如果支持上下拉,对应的值。通过pull_val的值来决定上拉还是下拉。如果不支持,默认为0;只对输入pin有效
IES: 输入使能,1:input信号有效 0:input信号无效
SMT: 使能施密特触发器
DRIVE: 驱动能力,一般可取值0~7
[R1] [R0] 当前GPIO pin的(上下拉)并联电阻的使能状态
1 0表示enable R1,disable R0
0 1表示disable R1,enable R0
1 1表示enable R1, enable R0
不打印出来,表示当前的GPIO pin不支持PUPD状况,即只有一个上拉电阻、一个下拉电阻
3、修改命令
写out: echo out 9 1 > /sys/devices/platform/soc/1000b000.pinctrl/mt_gpio
写in: echo in 9 1 > /sys/devices/platform/soc/1000b000.pinctrl/mt_gpio
写dir: echo dir 9 1 > /sys/devices/platform/soc/1000b000.pinctrl/mt_gpio
写mode: echo mode 9 1 > /sys/devices/platform/soc/1000b000.pinctrl/mt_gpio
4、特殊情况
软件配置了GPIO输出,并且置高,但实际未置高,首先确认配置是否生效,通过debug命令“cat mt_pgio"看DIN 位是否为1。(就算GPIO设置成输出DIN位也能读出当前状态,不是只在输入时才有用)。 确认配置没有问题,但DIN还是0,则确认相关的电源域是否打开或者是否被硬件拉死。