mt6735 mt8735硬體電量計執行流程

2021-08-20 04:40:26 字數 2243 閱讀 5913

mt6735/mt8735 目前預設使用硬體電量計(soc_by_hw_fg)採集電池電量,現在簡單描述一下這硬體電量計的工作過程。

1. 首先,系統在kernel-3.10/drivers/misc/mediatek/mach/mt6735/ap7350_tb_l1/power/cust_battery_meter.h 標頭檔案中預設定義了 #define soc_by_hw_fg,使用硬體電量計的演算法

檔案位置kernel-3.10/drivers/power/mediatek/battery_meter.c

2. 初始化電量計

函式 fgauge_initialization 和 fgauge_algo_run_init

3. 在fgauge_construct_battery_profile_init裡面根據cust_battery_meter_table.h裡面的資訊重構zcv**,分50個等級,每2%一級。

4. 讀取電池溫度,電池容量等資訊,並根據當前溫度重構電池內阻表和zcv表。

5. 讀取閉路電壓,並用函fgauge_compensate_battery_voltage_recursion計算出開路電壓,主要是做了乙個電壓補償,之後用開路電壓查詢zcv表計算電池剩餘容量。

6. 呼叫函式battery_meter_ctrl(battery_meter_cmd_get_hw_ocv,&gfg_voltage),直接從pmic讀取電池的開路電壓,並計算電池剩餘容量。

7. 讀取rtc裡面儲存的電量值和從4和5裡面計算出來的電量值做對比判斷,選擇合適的電量值作為電池的初始電量。

檔案位置kernel-3.10/drivers/power/mediatek/battery_common.c

(1)函式mt_battery_charger_detect_check完成充電器是否插入的判斷。

(2)函式mt_battery_getbatterydata主要完成電池資訊的獲取,獲取電池電壓,電流和溫度等資訊。過程中會呼叫函式fgauge_algo_run,此函式輸出的log資訊對除錯電池電量不准的問題有很大的幫助。

mt_battery_getbatterydata()讀取電池相關資訊:電壓、電流、充電器電壓、電池溫度,通過soc = battery_meter_get_battery_percentage();來獲取電池電量百分比。裡面會調fgauge_algo_run()這個函式來迴圈獲取電量值,原理上與dod0值的獲取類似。

當機器用的是硬體電量計的時候,zcv計算的電量實際上在這裡只是起到參考作用,並不會影響系統的電量顯示和使用。如果軟體zcv**是正確的,但這裡的zcv計算電量和電量計計算電量相差比較大,這時候就要考慮調節電池容量的大小,一般在放電過程中zcv計算電量比電量計計算電量大,就要適當的增加電池容量,反之則減少。電池容量設的太小,會出現電量顯示1%時還能用很久的現象,太大則會出現低電量時電量下降的很快,或還沒到0%就關機了。

(3)函式mt_battery_thermal_check則實現溫度的監控,當電池問題高於設定溫度,一般是60度時系統會強制關機。

(4)函式mt_battery_notify_check則實現溫度、電壓和電量等一些異常並通知android層,最終提示給使用者。

(5)當有充電器插入時,系統會執行mt_battery_checkbatterystatus檢查電池的一些狀態,從而決定充電與否,裡面包含了高低溫,充電器電壓,是否在通話狀態和充電時間等檢測。

(6)函式mt_battery_charging_algorithm完成充電演算法。這裡兩種充電方式,一是pmic充電的liner_charging和外部充電ic的switch_charging。一般來說switch_charging的充電電流要比liner_charging大。mt_battery_charging_algorithm()完成充電演算法:pmic充電的liner_charging和外部充電ic的switch_charging。兩種充電方式的主流程其實區別不大,基本都包含了預充電,恆流充電,滿電判斷和二次充電。有時候會出現充滿電時,電池電壓偏低的情況,這時候可以適當提高充電電壓或者減少充電截止電流。

(7)函式mt_battery_update_status主要實現將電池,充電等狀態更新到android層,如電量,充電器是否插入等等。當電量比較低的時候battery_update裡面會呼叫到mt_battery_0percent_tracking_check 電池電壓小於system_off_voltage時,bmt_status.ui_soc減少到0,這時android上層會接收到電量等於0的更新,並傳送命令關閉機器。

(8)mt_kpoc_power_off_check()實現關機充電時對charger的檢測

MT6735修改聽筒增益

檔案路徑如下 vendor mediatek proprietary custom common cgen cfgdefault audio ver1 volume custom default.h ifndef audio ver1 volume custom default h define a...

mt8735 andorid7 0 lcm除錯總結

這裡以除錯mt8735 7.0 中的lvds屏icn6202為例 icn6202是一款lvds 屏 它可以把cpu端傳出來的數碼訊號 譬如mipi訊號 轉換成lvds訊號,再轉換成lcd能接收的數碼訊號,再通過lcd顯示對應的影象 lvds訊號跟mipi訊號一樣,雖都可以做到低功耗高數率傳輸,但lv...

MT6735平台螢幕旋轉90度

lk 橫屏logo,順時針旋轉90度顯示修改 bootable bootloader lk project len6735 65u vo.mk boot logo wxganlmtk lcm physical rotation 90 framebuffer順時針旋轉90度的修改 device len...