參考文檔:
http://blog.csdn.net/zhandoushi1982/article/details/5804951
http://blog.csdn.net/ollins136/article/details/52230722?locationNum=1
http://blog.chinaunix.net/uid-9012903-id-2011559.html
在MTK中,Battery底層驅動主要涉及代碼在這兩個目錄下:
\kernel-3.18\drivers\misc\mediatek\power\mt6735
\kernel-3.18\drivers\power\mediatek
一、充電流程介紹:當充電器插入時,亦即爲PMIC充電模塊提供了Vcharge電壓,這時會產生一個充電中斷信號到CPU,通知CPU現在已經進入充電狀態。CPU開始啓動如下模塊:
1,ADC採樣,主要是採集Vchrg,Vbat及從MOSFET漏極輸出的電壓,可以算出充電電壓和充電電流;
2,發消息給MMI層,讓它顯示充電狀態及一些採樣數據;
3,檢測電池電壓有沒有超過保護電壓及電池連接是否連接正確,如果有問題即可通過CHRCTRL切斷充電電路;
4,平時顯示“充電器沒有連接”警告,是因爲PMIC的BATDET腳和MOSFET沒有打開,從而沒有充電電流引起的。
二、充電狀態轉換介紹:如果電池電壓較低,只是預充的時間稍長一些,最多一兩個小時應該可以完成預充電!一般電池都有自保護,不會把電放到0V的!
充電分三個過程:預充電、恆流充電(CC模式)、恆壓充電(CV模式)(有些人也會分爲四個階段預充電、恆流充電(CC模式)、恆壓充電(CV模式)、涓流充電)
1,當Vbat<3.3V 屬於預充階段,處於預充電狀態時,以150mA電流涓流充電。PMIC不能提供Vcore、Vdd等電壓,CPU處於關機狀態,這時CPU是不工作的!純粹是硬件電路充電
2,當3.3V<bat<4.2V PMIC的LDO開始輸出電壓,從而cpu開始工作,這是進入恆流充電階段,以大概600mA 電流快速充電。3.45V是開機電壓,按開機鍵的話就會開機。
3,Vbat>4.2V 進入恆壓充電階段(屬於TOPOFF的一個點,如下圖),這個階段電流逐漸變小,電壓維持不變!當電流減小到接近爲0(或者某個較小閥值)時,CPU發出控制信號這時停止充電!
圖一是充電過程的整個狀態圖:
圖一
下圖二是內核層充電的一個框架圖:
圖二
內核層充電的一個框架圖
從CC模式切換到CV模式在代碼中的alps/mediatek/kernel/drivers/power/linear_charging.c和alps/mediatek/kernel/drivers/power/ switch_charging.c。
MTK Battery系統驅動的大致流程主要是通過系統platform總線註冊device和driver,然後在probe函數裏面創建了一個線程,然後創建一個hrtimer定時器,定時器每10s運行一次,同時在probe函數裏面會創建一些設備節點,通過這些設備節點,系統將每10s更新的數據上傳給上層供上層調用顯示。