高通平台底電流調節心得


Q:底電流和待機電流的概念?
A:底電流即機器完全睡眠時的最低電流;待機電流即機器在一段時間內的待機平均電流,通常需要插入SIM卡測待機電流。

Q:底電流調試方法?
A:1.首先,需要進行射頻QCN文件下載並進行射頻校准,因為QCN文件不下載射頻不能正常工作,會引起漏電,繼而引起底電流偏大。
   2.射頻校准后如果仍然存在較大底電流,則需要進入飛行模式測試底電流,並排除GPIO、LCD、CAMERA、SENSOR等外設問題,可把外設拆除再進行測試。
   3.分析機器有無進入睡眠狀態,可通過串口信息查看linux kernel有無睡眠,kernel沒有進入睡眠則查看是哪個模塊引起的並有針對性分析相應模塊。如果kernel已經睡眠,還存在底電流偏大問題,則需要接上jtag線,並通過trace32分析,最主要的是分析系統各模塊的clock有無關閉,例如:lcd的MDP_VSYNC_CLK沒有關閉,則需要查看lcd模塊。
   4.可通過檢測TCXO引腳的狀態來確定modem端是否已經睡眠。
   5.在modem端tlmm_bsp.c文件下比對各個GPIO有無設置錯誤繼而引起漏電。另外,sleep_target.c文件也值得分析。    
   6.如果相同代碼上的其它項目底電流ok的話,應該重點排查新項目新添加的模塊或者GPIO口是否被更改。
   7.如果以上都ok的情況下仍然存在底電流過大問題,則需要硬件協助排查問題。

小結:引起底電流過大的問題就是睡眠狀態下有些資源沒有被完全關閉導致漏電,這對使用電池作為電源的手機來說影響很大,底電流的調節是一個綜合的過程,需要團隊每個人的配合。

================================================================

最近調試了幾個底電流偏高的項目,加深了對高通平台底電流的理解,記錄如下,備忘。

1.當底電流偏高時,先不要急着連上JTAG線(連JTAG線很是麻煩),應該先用示波器測量TXCO腳,看modem能否睡眠。如果TXCO引腳在睡眠時為低電平,不會輸出正弦波,則說明modem能睡眠,也就是說軟件層能睡眠,這時候即可斷定是硬件漏電引起的,應該測量各GPIO引腳看是否是正常狀態。必要時需要逐個拆元器件來判斷是哪個硬件引起的漏電。

2.當modem不能睡眠時則需要連接上JTAG,通過trace32工具來判斷哪個clk沒有關掉,定位到相應模塊再有針對性地解決問題。以下是一些使用trace32工具調試時需要執行的一些命令:

Msm_pm_collapse() in msm_sleep() in pm.c/pm2.c
Clk_regime_apc_rail_off() in modem switches off the power rail to the Apps.

BP side:
sleepmod_tcxo_shutdown() // Perform TCXO shutdown
sleepmod_ok_tcxo_shutdown() //Check votes and other misc reasons not to perform TCXO shutdown.
clk_regime_tcxo_shutdown_asm() //performs the TCXO shut-down

clkrgm_linux

 

do ../boot_debug.cmm         //執行高通給我們提供的腳本來加載modem端代碼以便使用trace32工具調試modem端

d.load.elf M8X25QDOSKOLYM3070.elf /nocode /noclear       //加載modem端編譯出來的鏡像文件,需要注意的事這個文件需要與下載到機器里的modem端軟件相匹配

b.s clk_regime_apc_rail_off /o          //設置斷點,可以通過這個斷點判斷app是否睡眠

b.s sleepmod_ok_tcxo_shutdown /o //當modem運行到這個函數,說明modem准備睡眠,但不一定能睡眠,這個時候可以查看clkrgm_linux變量,可得到哪個clk沒有關掉

 

Y.SPATH.SRD += ../../core\power\SLEEP\src\

symbol.sourcepath.setrecursedir  ../your path  //這個命令能將trace32中的匯編代碼與本地代碼相匹配

v.v gSleepInfo

v.v clkrgm_linux

 

 

================================

 高通7x27a平台目前遇到幾個底電流調試問題,發表以下見解

  1:首先個人在調試不睡眠中遇見2次由於串口睡眠模式配置不對導致系統無法睡眠的問題,要是串口連接其他模塊比如BT和modem,我們在sleep模式不可以配置成普通gpio功能,這樣很容易導致睡眠時無法與設備通訊導致無法睡眠,modem有radio lock 。

  2:在系統可以睡下,底電流在20mA以下但是大於2mA的情況下,很可能是設備漏電造成或者開了一些clk,特別是clk對底電流影響很大。我自己有遇見過wifi芯片gpio倒灌漏電,CTP漏電。只要發現是哪個設備漏電,解決起來應該不難。遇見過一次camera clk導致sleep底電流偏大,普通外設需要的CLK我們睡眠時應該關閉。

 3:只要系統可以睡下,我們在kenel config里使用小點的配置來逐一排查哪些設備漏電,逐一檢測,睡眠模式通常gpio配置成pull_in pull_down。只要發現問題就好辦了。

 4:關於系統不睡的調試,我們可以在kernel CMD中填入no_console_suspend來使睡眠時串口輸出log,還有可以打開PM_DEBUG。具體方法有篇文章有介紹。

目前認為做的最有成就感的2件事,一是將無法睡下的手機調到可以sleep底電流到5mA,再排查出漏電問題底電流降到1.幾mA,二是決解一款芯片漏電降低底電流致該方案成功上市。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM