MTK平台获取和修改GPIO状态

一、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,则确认相关的电源域是否打开或者是否被硬件拉死。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值