Power-- 1.charge Fuel gauge
點(diǎn)擊打開(kāi)鏈接
1.電池曲線數(shù)據(jù)
??? 高通平臺(tái):
????FG電量計(jì)來(lái)計(jì)算電池電量
??? 電池?cái)?shù)據(jù)是電量計(jì)不可或缺的一部分
??? 一個(gè)型號(hào)的電池?cái)?shù)據(jù)是一份dts文件
2.電池?cái)?shù)據(jù)分析
????文件命名一般包含項(xiàng)目、廠商、電壓、電容,如:xxx_xxx_xxmAh_xxx.dtsi???
????得到dtsi后可以根據(jù)情況做一些調(diào)整:電池電壓,顯示容量,電池ID電阻,熱溫度系數(shù)
??? Beta值,電池型號(hào)名稱等內(nèi)容需要修改/確認(rèn),如:黃色背景處數(shù)據(jù)
??? 充電電流值和一些FG參數(shù)也需要關(guān)注,如藍(lán)色標(biāo)注
????
下面介紹一下這些節(jié)點(diǎn):
qcom,max-voltage-uv:最大額定電壓
qcom,nom-batt-capacity-mah:電池名義上的容量,單位mah,最新的好像不用這個(gè)節(jié)點(diǎn)了
qcom,batt-id-kohm:電池的電阻id
qcom,battery-beta:熱溫度系數(shù)Beta值,不太確定是做什么用的
qcom,battery-type:指出電池類型的字符串
qcom,fastchg-current-ma:指定最大的快速充電電流
qcom,fg-cc-cv-threshold-mv:從恒定電荷過(guò)度到恒定電壓的一個(gè)電壓閾值
qcom,fg-profile-data:一組十六進(jìn)制的數(shù)據(jù)用來(lái)配置更加復(fù)雜的fuel gauge外設(shè)。有大量的參數(shù)用來(lái)配置硬件狀態(tài)然后在軟件中讀取。
合入項(xiàng)目中: 項(xiàng)目一般是定義dts,然后通過(guò)#include dtsi 文件的方式擴(kuò)展添加電池曲線。 如:某個(gè)項(xiàng)目中,是這樣擴(kuò)展電池曲線:位置:kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8909-mtp.dtsi代碼如下:?/ {
?mtp_batterydata: qcom,battery-data {
??qcom,rpull-up-kohm = <100>;
??qcom,vref-batt-therm = <1800000>;#include "batterydata-palladium.dtsi"
?};
};
qcom,rpull-up-kohm : The vadc pullup resistor's resistance value in kOhms.? vadc上拉電阻的阻值,單位是kohmsqcom,vref-batt-therm-uv : The vadc voltage used to make readings. vadc的電壓,
正確識(shí)別出電池id是調(diào)試的基礎(chǔ):cat sys/class/power_supply/bms/battery_type能夠正確識(shí)別出電池廠商型號(hào),對(duì)應(yīng)正確的電池?cái)?shù)據(jù)為檢查通過(guò)。
3.充電模塊配置充電的大部分?jǐn)?shù)據(jù)都需要在dts/dtsi里面配置
3.1電池最大充電電流(這部分有點(diǎn)不懂)Qcom,fastchg-current-ma??:Specifies the maximum fastcharge current.Msm8952平臺(tái) 是在電池?cái)?shù)據(jù)中配置的,默認(rèn)的代碼邏輯是,PMI在pmi8950_charger:qcom,qpnp-smbcharger模塊中不配置數(shù)據(jù)。compatible:??Must be "qcom,qpnp-smbcharger"??
檢查方法:用adb方式檢查?? adb shell
?? echo 0x210F2 > sys/kernel/debug/spmi/spmi-0/address?? cat data
??? 數(shù)據(jù)表格如下:
3.2 AC充電器、usb充電電流
???? 充電器的最大值來(lái)自于usb模塊的設(shè)置;usb-pc的充電電流值同樣來(lái)自于usb模塊的設(shè)置,默認(rèn)是500mA。
????AC充電器與DC充電器的區(qū)別在于前者應(yīng)用于交流電,而DC充電器應(yīng)用直流電,AC充電器即交流電充電器,DC充電器則是直流充電器。
??? 問(wèn)題:usb模塊的設(shè)置在哪里?
??? 檢查方式:使用電流檢測(cè)儀器,接在usb線上可以直接讀到電流數(shù)據(jù)。
3.3標(biāo)準(zhǔn)參數(shù)設(shè)置
??? 充電ic的配置和電量計(jì)ic的配置dts,下面高亮的數(shù)據(jù)都是需要特定配置的。???
qcom,qpnp-smbcharger {
?????? spmi-dev-container;????//默認(rèn) Must be included in the parent node to set up the spmi sub node devices.
?????? compatible= "qcom,qpnp-smbcharger";??//模塊名
?????? #address-cells= <1>;
?????? #size-cells= <1>;
?????? qcom,iterm-ma= <100>;???//停止充電截止電流,有FG后不再使用,默認(rèn)配置
???????qcom,float-voltage-mv = <4400>;???//充電電壓(電池最大電壓),會(huì)被電池?cái)?shù)據(jù)覆蓋,支持范圍是3600mv到4500mv
?????? qcom,resume-delta-mv= <100>;???//回充電壓,有FG后不再使用
?????? qcom,bmd-pin-src= "bpd_thm_id";??//電池移除檢測(cè)引腳配置,有四個(gè)值,但是不知道是干什么用的
?????? //qcom,dc-psy-type= "Mains";????//DC_IN路充電,目前不使用
?????? //qcom,dc-psy-ma= <1500>;??????//DC_IN路充電,目前不使用
???????qcom,bms-psy-name = "bms";?????//必須定義,指向電量計(jì)名,用于報(bào)告電池容量的名稱
?????? qcom,battery-psy-name= "battery";???//需要,驅(qū)動(dòng)代碼有默認(rèn)值,電池驅(qū)動(dòng)注冊(cè)的電池充電名字
?????? qcom,thermal-mitigation= <1500 700 600 325>;???//thermal_enginer的控制,不同thermal系統(tǒng)的電流極限值
?????? qcom,vchg_sns-vadc= <&pmi8950_vadc>;???//讀取VCHG電壓所需,可選,vadc節(jié)點(diǎn)的指針
?????? qcom,vchg-adc-channel-id= <3>;???????????//VCHG的通道,可選
?????? qcom,pmic-revid= <&pmi8950_revid>;??????//PMI版本號(hào)。必須。pmic revid 模塊的指針,需要特別指出,定義pmic 子類型
?????? qcom,force-aicl-rerun;????????????????????//AICL自動(dòng)控制電流,需要,不懂
?????? qcom,aicl-rerun-period-s= <180>;??????????//AICL自動(dòng)控制電流,時(shí)間間隔,需要
????????qcom,chg-inhibit-fg;????????????????????//使用FG控制二次充電
????????qcom,autoadjust-vfloat;?????????????????//檢測(cè)充電時(shí)電池電壓,需要
??……
}
pmi8950_fg: qcom,fg {
???????????? spmi-dev-container;
???????????? compatible= "qcom,qpnp-fg";? //"qcom,qpnp-fg" for the FG driver.
???????????? #address-cells= <1>;
???????????? #size-cells= <1>;
?????????????qcom,resume-soc = <99>;?????????????//回充電量,啟動(dòng)二次充電的門(mén)限 soc to resume charging in percentage.
???????????? status= "okay";
???????????? qcom,bcl-lm-threshold-ma= <127>;?????//默認(rèn)LPM-〉MPM LPM,MPM,HPM這三種模式的切換電流門(mén)限,不懂這三種模式
???????????? qcom,bcl-mh-threshold-ma= <405>;????//默認(rèn)?MPM-〉HPM
???????????? qcom,fg-iterm-ma= <150>;????????????//顯示100%電量的充電電流
???????????? qcom,fg-chg-iterm-ma= <100>;????????//硬件完全停止充電的電流
???????????? qcom,pmic-revid= <&pmi8950_revid>;??//FG版本號(hào),pmic revid模塊的指針,用來(lái)定義pmic子類型
?????????????qcom,fg-cutoff-voltage-mv = <3400>;????//關(guān)機(jī)電壓,對(duì)應(yīng)0%電壓值;
??????????? //The voltage where the fuel gauge will steer the SOC to be zero.
?????????????qcom,fg-cc-cv-threshold-mv = <4390>;???//CCàCV的電壓值,影響100%電量顯示
??????????? //This value should be 10 mV less than the float voltage configured in the charger.
??????????? //"qcom,autoadjust-vfloat"需要定義在charger driver中
???????????? qcom,cycle-counter-en;???? ???????? ??
???????????? qcom,capacity-learning-on;? ??????? ??
?????????????qcom,vbat-estimate-diff-mv= <100>;???//重啟時(shí)OCV檢測(cè)變化門(mén)限值
??????????? //qcom,fg-vbat-estimate-diff-mv 如果soc和電池的電流電阻的估計(jì)值不同于真實(shí)的電壓值,則fuel gauge將重新做一個(gè)soc的估計(jì)當(dāng)driver probes到時(shí)候
????????????qcom,cl-max-increment-deciperc = <1>;? //默認(rèn)
????????????qcom,cl-max-decrement-deciperc = <1>;? //默認(rèn)
????????????qcom,fg-delta-soc =<1>;???????????????//電量觸發(fā)中斷百分比,就是電量改變多少后要上報(bào)
????????????qcom,bad-battery-detection-enable;
????????????qcom,hold-soc-while-full;???????????????//100%持滿電鎖,建議設(shè)置,電池充滿就顯示100%
????????????qcom,thermal-coefficients= [B7 85 B2 49 71 35];?//NTC熱溫度系數(shù)用來(lái)讀取電池?zé)崦綦娮?#xff0c;不知道做什么用的。重要。
????????????qcom,cold-bat-decidegc= <(0)>;???????????????????????//HW-cold
????????????qcom,cool-bat-decidegc= <(100)>;?? ??????????????????//SW-cool
????????????qcom,hot-bat-decidegc =<550>;???? ?????????????//HW-hot
????????????qcom,warm-bat-decidegc= <450>;?????????????????//Soft-warm
qcom,warm-bat-decidegc:?? ??? ?Warm battery temperature in decidegC.
qcom,cool-bat-decidegc:?? ??? ?Cool battery temperature in decidegC.
qcom,hot-bat-decidegc:?? ??? ?Hot battery temperature in decidegC.
qcom,cold-bat-decidegc:?? ??? ?Cold battery temperature in decidegC.
????????????qcom,battery-data =?<&qrd_batterydata>;??????//電池曲線加載,指向節(jié)點(diǎn)的指針,它包含電池曲線,用來(lái)支持charger/Fg
……
}
qcom,battery-data can also include any number of children nodes. These children nodes will be treated as battery profile data nodes.? 自動(dòng)輸入限流器技術(shù)(AICL)
??? 自動(dòng)輸入電流限制的功能是能夠根據(jù)輸入電源的提供,來(lái)選擇最大電流選擇的充電電流,能夠?qū)sb/ac/dc充電器相容。
根據(jù)充電芯片設(shè)定一個(gè)充電輸入門(mén)限電壓值,比如4.75v,當(dāng)充電芯片的輸入電壓大于該門(mén)限電壓值的時(shí)候,設(shè)置電流;
當(dāng)輸入電壓沒(méi)有下降或者是稍有下降但高于該門(mén)限電壓時(shí)候,每次以100ma逐級(jí)提高充電器的輸出電流,檢測(cè)充電芯片的輸入電壓是否小于門(mén)限電壓值,每次時(shí)間間隔為5~10ms,直到充電芯片的輸入電壓小于門(mén)限電壓值,設(shè)定充電電流為前面一級(jí)或者前面兩級(jí)較小電流充電,輸入電壓沒(méi)有下降到該門(mén)限電壓值,就以設(shè)定好的充電電流進(jìn)行充電。保證以最大的充電電流,最小的時(shí)間完成充電,提高用戶體驗(yàn)。
?充電的控制過(guò)程中有這樣一種情況:比如你要設(shè)置一個(gè)輸入電流限制的值,這個(gè)值跟溫度有關(guān)系(溫度高了你希望這個(gè)值小一點(diǎn)),跟充電器類型有關(guān)系,跟用戶設(shè)置有關(guān)系,跟你是否用HVDCP有關(guān)系-->那么多決定因素,可是我們只可能設(shè)置一個(gè)值,有效的辦法是這幾種情況下都對(duì)應(yīng)一個(gè)值,然后我們最終設(shè)置一個(gè)最小值,我們把每一個(gè)因素看成是一個(gè)clients,即選民,然后由選民進(jìn)行vote,就像在這幾個(gè)值中選擇一個(gè)最合適的值。
completion機(jī)制
內(nèi)核編程中常見(jiàn)的一種模式是,在當(dāng)前線程之外需要初始化某個(gè)活動(dòng),然后等待該活動(dòng)的結(jié)束。這個(gè)活動(dòng)可以是:創(chuàng)建一個(gè)新的內(nèi)核線程或者新的用戶空間進(jìn)程,對(duì)一個(gè)已有進(jìn)程的某個(gè)請(qǐng)求,或者某種類型的硬件動(dòng)作。我們可以用信號(hào)量來(lái)同步兩個(gè)任務(wù),內(nèi)核有completion機(jī)制,他允許一個(gè)線程告訴另一個(gè)線程某個(gè)工作已經(jīng)完成了。completion---基于等待隊(duì)列
同步函數(shù)一般都是成對(duì)出現(xiàn),complete 和 wait_for_completion
read the followingregister to get nominal capacity of battery
Example reading register address 0
$ adb shell "echo 0 >/sys/kernel/debug/fg/sram/address"
$ adb shell "echo 4 >/sys/kernel/debug/fg/sram/count"
$ adb shell "cat/sys/kernel/debug/fg/sram/data"?
未完待續(xù)
總結(jié)
以上是生活随笔為你收集整理的Power-- 1.charge Fuel gauge的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux驱动由浅入深系列:高通sens
- 下一篇: 修改adb shell在pc端显示的名称