高通 qualcomm pmic read write adb 讀寫

from: https://hk.saowen.com/a/65a4c9b0913357341f3a9bd1abcaed828025ce5f0e5e3392ba12ade1076303ed

無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因

Platform

Qualcomm MSM8917 + PM8937 + PMI8940

起因

同事問我 PM8937 的 VREG_L17 如何設置成 3.3V,
從 PM8937 hardware register description 文檔 查找到有一個 bit VREG_OK 位於 PM8937 的 0x00015008,
於是想先試着讀取這個 bit 來開始 debug,
沒想到在 adb shell 下運行 system/bin/r 0x00015008 後造成 手機 異常,

原因

1。msm8917,PM8937,PMI8940 的 hardware register description 文檔的的描述 都是從 memory 0 開始,
所以不能將 這三個 device 的 memory 看成是一個大的連續 momory,
這三個 device 有各自獨立的 memory area。
2。0x00015008 在 msm8917 hardware register description 文檔中是位於 Unused/reserved area。
3。0x00015008 在 pm8937 hardware register description 文檔中是描述 LDO17。
4。system/bin/r 是用來讀取 msm memory address,不是用來讀取 pmic memory address,
所以

adb root
adb shell "system/bin/r 0x00015008"

是讀取到 msm invalid memory address。
那寫呢?

adb root
adb shell "system/bin/r 0x00015008 0x3"

嘿嘿,
您沒看錯,
寫入是用 r 指令,
沒有 w 指令,

如何讀取 PMIC memory address

第一種

只要填入不同的 slave id address 即可。

PM8937

PM8937 slave ID 0 or 1 要看訪問的 address。

adb root 
adb shell mount -t debugfs none /sys/kernel/debug 
adb shell "echo 0xc100 > /sys/kernel/debug/spmi/spmi-0/address" 
adb shell "echo 0x100 > /sys/kernel/debug/spmi/spmi-0/count" 
adb shell "cat /sys/kernel/debug/spmi/spmi-0/data"

PMI8940

PMI8940 slave ID 是 2 or 3 要看訪問的 address。

adb root 
adb shell mount -t debugfs none /sys/kernel/debug 
adb shell "echo 0x2c100 > /sys/kernel/debug/spmi/spmi-0/address" 
adb shell "echo 0x100 > /sys/kernel/debug/spmi/spmi-0/count" 
adb shell "cat /sys/kernel/debug/spmi/spmi-0/data"

第二種

read data

adb root
adb shell 
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # cat data

write data

adb root
adb shell 
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 #  echo 0x39 > data

pm8937 及 pmi8940 的 register address 在 hardware register spec 有描述,
但是在實際讀寫 register 時,address 會有些許差異如下,
讀寫 pm8937 的 address 要加 0x0 slave id offset
讀寫 pmi8940 的 address 要加 0x10000 slave id offset

單獨讀寫一個 byte
read data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # cat data

write data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # echo 0x39 > data

讀取某個範圍的 register
read data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # echo 0x30 > count
msm8937_64:/d/spmi/spmi-0 # cata data

假如數據太多,
可以 export data
C:\catch_log>adb root
C:\catch_log>adb shell "echo 0x14000 > /d/spmi/spmi-0/address"
C:\catch_log>adb shell "echo 0x166b > /d/spmi/spmi-0/count"
C:\catch_log>adb shell "cat /d/spmi/spmi-0/data" > data.log

關鍵詞:spmi adb address shell msm data echo pm root debug

相關推薦:

搭建EOS主網節點

ADB 操作命令詳解及用法大全

高通LCD的pwm背光驅動

Sailfish OS 移植中(1)- hybris-hal

轉帖: 一份超全超詳細的 ADB 用法大全

ADB命令詳解及大全( 聲明:此文是參考大佬博客所做的筆記!)

高通Audio中ASOC的codec驅動

adb push init.rc /

adb 轉自github https://github.com/mzlogin/awesome-adb

最全的ADB命令行大全(轉)

未經允許不得轉載:GoMCU » 高通 qualcomm pmic read write adb 讀寫