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 datawrite data
adb root adb shell msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address msm8937_64:/d/spmi/spmi-0 # echo 0x39 > datapm8937 及 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 datawrite 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
相關推薦:
Sailfish OS 移植中(1)- hybris-hal
ADB命令詳解及大全( 聲明:此文是參考大佬博客所做的筆記!)