高通平台gpio简单调试
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。?? ?https://blog.csdn.net/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已經(jīng)被占用,應(yīng)該在驅(qū)動(dòng)代碼或者.dts里注掉,否則下面的設(shè)置不生效。
1.使能gpio70
# cat /sys/kernel/debug/gpio //查看所有g(shù)pio狀態(tài)信息
# cd /sys/class/gpio
# echo 70 > export
# cd gpio70
# echo out > direction
# echo 1 > value
?
2.//設(shè)置GPIO pull up
gpio寄存器地址計(jì)算和芯片平臺(tái)有關(guān),計(jì)算方式不一樣.
***************************************************************************
msm8996 gpio寄存器地址: gpio基地址 + gpio號(hào) * 0x1000(即是gpio號(hào):70->0x46)
sdm845 gpio寄存器地址: gpio基地址 + 0x500000 + gpio號(hào)*0x1000(gpio號(hào):70->0x46)
?
1、SDM845平臺(tái)以GPIO46為例,十進(jìn)制46對(duì)應(yīng)的16進(jìn)制為2E,每個(gè)GPIO均有
? 這3個(gè)寄存器描述功能,包括輸入/輸出、驅(qū)動(dòng)電流上/下拉、中斷功能。
?
所以三個(gè)寄存器對(duì)應(yīng)的地址為:
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:禁掉中斷
對(duì)于讀出來數(shù)據(jù)的定義通過寄存器對(duì)每位數(shù)據(jù)的定義可以得出:
<1>.0x201:1000000001 ---->out and pull down
? ? ? ? ? 第9為=1 代表輸出;
? ? ? ? ? 6-8位為0,驅(qū)動(dòng)能力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: 輸出為高; 相當(dāng)于echo 1 > value
? ?0x0: 輸出為低; 相當(dāng)于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進(jìn)制,轉(zhuǎn)化為16進(jìn)制為: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
這時(shí)候可以用萬用表量gpio70管腳,已經(jīng)被拉高了,不是0V電壓了。
?
---------------------?
作者:慢慢的燃燒?
來源:CSDN?
原文:https://blog.csdn.net/u010164190/article/details/83860374?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的高通平台gpio简单调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git学习:关于origin和maste
- 下一篇: android gpio操作