1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高通平台gpio简单调试

高通平台gpio简单调试

时间:2021-02-22 16:34:31

相关推荐

高通平台gpio简单调试

版权声明:本文为博主原创文章,未经博主允许。 /u010164190/article/details/83860374

0.编译读写gpio寄存器地址工具:/system/bin/r

Android9.0源码地址:

system/core/toolbox/r.c

system/core/toolbox/Android.bp

cc_binary {

name: "r",

defaults: ["toolbox_defaults"],

srcs: ["r.c"],

}

# cd system/core/toolbox

# mm

# push r /system/bin

特别注意:如果gpio70已经被占用,应该在驱动代码或者.dts里注掉,否则下面的设置不生效。

1.使能gpio70

# cat /sys/kernel/debug/gpio //查看所有gpio状态信息

# cd /sys/class/gpio

# echo 70 > export

# cd gpio70

# echo out > direction

# echo 1 > value

2.//设置GPIO pull up

gpio寄存器地址计算和芯片平台有关,计算方式不一样.

***************************************************************************

msm8996 gpio寄存器地址: gpio基地址 + gpio号 * 0x1000(即是gpio号:70->0x46)

sdm845 gpio寄存器地址: gpio基地址 + 0x500000 + gpio号*0x1000(gpio号:70->0x46)

1、SDM845平台以GPIO46为例,十进制46对应的16进制为2E,每个GPIO均有

这3个寄存器描述功能,包括输入/输出、驱动电流上/下拉、中断功能。

所以三个寄存器对应的地址为:

0x3400000 + 0x500000 + 0x1000*2E = 0x392E000

0x3400000 + 0x500000 + 0x1000*2E = 0x392E004

0x3400000 + 0x500000 + 0x1000*2E = 0x392E008

读取方法:

/system/bin/r 0x392E000--》0x392E000: 00000201 //0x201:out

/system/bin/r 0x392E004--》0x392E004: 00000003 //0x03:high; 0x00;low

/system/bin/r 0x392E008--》0x392E008: 000000e2 //0xe2:禁掉中断

对于读出来数据的定义通过寄存器对每位数据的定义可以得出:

<1>.0x201:1000000001 ---->out and pull down

第9为=1 代表输出;

6-8位为0,驱动能力2mA;

2-5位0,普通GPIO功能;

0-1=1:pull down; 2:keeper; 3:pull up; 4:no pull

0x202: out and keeper

0x203: out and pull up

0x204: out and no pull

<2>0x3: 输出为高; 相当于echo 1 > value

0x0: 输出为低; 相当于echo 0 > value

<3>.e2:11100010

最低位为0,代表disable中断功能

***************************************************************************

//获取gpio基地址: 0x1010000,最上边的一行

# cat /sys/kernel/debug/gpio"

GPIOs 0-149, platform/1010000.pinctrl, 1010000.pinctrl

70为10进制,转化为16进制为:0x46

gpio地址为:0x46 * 0x1000 + 0x1010000 = 0x1056000

3.//读gpio70的寄存器地址:

# /system/bin/r 0x1056000

01056000: 000002c6 //gpio70地址: 值

注意:

0x000002c5: pull down

0x000002c6: keeper

0x000002c5: pull up

4.//写gpio70寄存器值为0x000002c7,使之pull up

# /system/bin/r 0x1056000 0x000002c7

# 再读下0x1056000

# /system/bin/r 0x1056000

01056000: 000002c7

这时候可以用万用表量gpio70管脚,已经被拉高了,不是0V电压了。

---------------------

作者:慢慢的燃烧

来源:CSDN

原文:/u010164190/article/details/83860374

版权声明:本文为博主原创文章,转载请附上博文链接!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。