8X25Q充电部分软件梳理(CP侧)
分享鏈接:http://note.youdao.com/share/?id=4f6665eee6bad5ea27eee47f74bcfa4b&type=note
8X25Q充電部分軟件梳理(CP側)
作者:韋啟發
目錄
1、過放電池的充電階段介紹...?2
2、Autonomous充電介紹...?5
3、USB充電器檢測...?6
4、在AMSS中的Autonomous充電...?7
5、修改充電時上報的電池電壓電池溫度的時間頻率...?10
6、不插入電池連接USB線手機循環開關機,類似小米一樣...?11
?
?
?
?
?
?
?
?
?
?
?
?
?
1、過放電池的充電階段介紹
?
If the battery voltage (VBAT) is:
VBAT < 3.2 V→Dead battery
3.2 V < VBAT < 3.4 V→Weak battery
VBAT > 3.4 V→Good battery
All the thresholds above are configurable
涓流充電:
????涓流充電在電池電壓低于3.2V時就會使能。
快速充電:
??????當電池電壓在VWEAK 3.2V和VDD_MAX4.2V之間時就會啟動快速充電。
???????首先電池先充電到3.4V達到開機狀態后然后手機會開機。
在涓流充電階段和快速充電階段都有一個定時器來管理,這樣避免如果有壞電池的時候會戀永遠充電下去造成錯誤。
代碼位置:\modem_proc\core\wiredconnectivity\hsusb\ driver\src\chg\
使能過放電池充電:一定要打開這兩個宏FEATURE_OEMSBL_USB_ BATT_CHG?和?FEATURE_HS_USB_FAST_CHARGE_VIA_HID
?
過放電池充電:這個充電階段存在是因為電池電壓低于3.4V的時候,并且USB線提供的電池不足以讓手機開機,就會啟動過放電池充電。
過放電池充電截止點:當電池電壓達到3.4V就會停止過放電池充電階段,讓手機開機。
軟件配置注意:
1.如果你想使能電池過放充電,那么請打開宏:FEATURE_HS_USB_CHG_BOOT_DCP_ CHARGING
2.為了支持無效的充電器(D+和D-懸空的充電器),你可以打開宏:
FEATURE_HS_USB_CHG_BOOT_ SUPPORT_INVALCHGR
3.電池電壓門限值設置,
CHG_BOOT_UCHG_VBATT_THRESH_TRICKLE 3.2V
FEATURE_HS_USB_CHG_BOOT_ SUPPORT_INVALCHGR 3.4V
4.補嘗值 這個值根據需要設置,我理解是一個區間范圍值:
HSU_CHG_BOOT_VBATT_WEAK_FAST_CHG_BOOST_OFFSET
軟件代碼流程:
?
Oemsbl_usb_chg_init()函數作用介紹:
Hsu_chg_boot()函數作用介紹:
Hsu_chg_boot_loop()函數作用介紹:
?
?
?
?
?
?
?
?
?
2、Autonomous充電介紹
從上面的圖中可以看出來,啟動充電的前2個階段(涓流充電和恒流充電)是一樣的,之后會做一次選擇,選擇恒壓充電還是脈沖充電,現在我們的項目最后那個階段是脈沖充電。
可里也可以從我們的代碼上可以看出來:
chg_autocharging_pulse_topoff.cpp?編譯這個文件走的是脈沖充電分支。
chg_autocharging_cv_topoff.cpp?編譯這個文件走的是恒壓充電分支。
很明顯我們走的是脈沖充電,恒流階段進入脈沖充電也是由我們決定了,這里有一個設置的門限值,我們后面會再講。
?
?
?
3、USB充電器檢測
系統會判斷兩個充電的流程,一個是usb wall charger?和?usb host charger,看下面的圖片。墻充電后的中斷是CHG_CMD__IRQ_TRIGGERED,另一個是CHG_CMD__SYSTEM_STATUS_CHANGED。
墻充檢測(實際上這個流程我們代碼中并沒有做判斷這個分支):
USB HOST檢測:
4、在AMSS中的Autonomous充電
下面講的都是在中斷CHG_CMD__SYSTEM_STATUS_CHANGED進行解析的事件,在chg_config.h頭文件中集合了一些參數的設置。
CHG_BATTERY_V_MAX:看名字說的是電池電壓的最大值,通過這個值來判斷電池是否已經滿電,在開始充電的時候用pm_chg_vmaxsel_set(CHG_BATTERY_V_MAX);函數去設置他的值(以最后一次調用這個函數為有效值)。
CHG_VBATDET_V:電池檢測的電壓值,這個電壓值的設置會產生一個中斷,用這個中斷來再設置進入脈沖充電方式,pm_chg_vbatdet_set(),這個函數去設置他的值(以最后一次調用這個函數為最終有效值),如果達到這個設置值之后,就會產生PM_VBAT_DET_IRQ_HDL中斷,在這個中斷里面再去startPulseCharging(pulseConfig);啟動脈沖充電,在startPulseCharging(pulseConfig);函數里設置脈沖充電的停止電壓值,
CHG_PULSE_V_MAX:脈沖充電的最大電壓值,startPulseCharging(pulseConfig)里面會設置這個值(以最后一次調用這個函數為有效值)。
CHG_PULSE_VBATDET_V:停止脈沖充電電壓值,startPulseCharging(pulseConfig)里面會設置這個值(以最后一次調用這個函數為有效值)。
CHG_CHARGER_I_MAX:墻充充電電流值.
CHG_UNKNOWN_I_MAX:未知充電方式的充電電流大小,一般設置為450MA,后面在軟件上做了DPM(檢測充電端的電壓大小,動大的調整充電電流大小)檢測,充電電流最大可以達到1000MA。
CHG_HOST_I_MAX:電腦充電的時候的充電電流大小,這個充電電流大小不要修改。
?
err |= pm_chg_vbatdet_set(CHG_VBATDET_V);?這個設置的CHG_VBATDET_V電壓值,當電池電壓大于CHG_VBATDET_V電壓時,會一直產生PM_VBAT_DET_IRQ_HDL中斷,當電池電壓小于CHG_VBATDET_V時,會產生PM_VBATT_DET_LOW_IRQ_HDL中斷。當脈沖充電結束時,會產生的是PM_PULSE_CHG_DONE_IRQ_HDL中斷。?
PM_VBATT_DET_LOW_IRQ_HDL這個中斷在我們的代碼中是沒有的,需要自己去先監聽這個中斷,在Chg_isr.cpp文件中加上的代碼如下:
//owen.wei add start?
pm_err_flag_type IrqEventGenerator::AddListenerForVbatdetLowIrq(ChargingEventListener *listener)?
{?
/* Listen to VBATDET IRQ */?
addListener(listener, PM_VBATT_DET_LOW_IRQ_HDL);?
pm_err_flag_type err = PM_ERR_FLAG__SUCCESS;?
INTLOCK();?
/* Disable the IRQ */?
err = pm_clear_irq_multi_handle(PM_VBATT_DET_LOW_IRQ_HDL, isr);?
/* Clear the IRQ. */?
err = pm_clear_irq(PM_VBATT_DET_LOW_IRQ_HDL);?
/* Enable the IRQ, pass the IRQ ID as data */?
err = pm_set_irq_multi_handle(PM_VBATT_DET_LOW_IRQ_HDL,?
isr,?
(void*)PM_VBATT_DET_LOW_IRQ_HDL);?
/* Find out if there was an PMIC API error */?
if (err != PM_ERR_FLAG__SUCCESS)?
{?
MSG_ERROR("PMIC API ERROR(0x%x) DETECTED",err,0,0);?
}?
INTFREE();?
return err;?
}?
void IrqEventGenerator::RemoveListenerForVbatdetLowIrq(ChargingEventListener *listener)?
{?
/* Remove listener */?
removeListener(listener, PM_VBAT_DET_IRQ_HDL);?
}?
//owen.wei add end?
解決問題:
我們的代碼中有一個定時器函數ListenerForBatteryAlarm(),這個函數用來監聽電池電壓的變化,一般情況下我們電池只能在脈沖充電結束后才會是滿電狀態,才會達到100%,通過這個函數監聽,可以讓用戶感覺充電時間會有縮短的假象。這個函數是國速那邊增加的。
二次充電時修改的文件:
?
?
?
?
?
?
?
?
?
?
5、修改充電時上報的電池電壓電池溫度的時間頻率
在vbatt_update_adc_battery_params函數里,有一個計數的變量pollimg_timer
在這個位置會有返回的結果,所以如果想讓上報的頻率增大一些,可以在這里把這段代碼注解掉。
如果不修改這個位置的話,就會1分鐘進行上報一次電池電壓和電池溫度,這樣的話會比較慢。興飛測試那邊實現溫度是45度了,但是我們的手機顯示還只是43度,最好能夠做成時實上報溫度。
6、不插入電池連接USB線手機循環開關機,類似小米一樣
#define FEATURE_SUPPORT_ONLY_USB_POWER_ON??//Owen.wei modify
#define FEATURE_HS_USB_BASIC //Owen.wei modify
打開這兩個宏就可以了。
總結
以上是生活随笔為你收集整理的8X25Q充电部分软件梳理(CP侧)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu start
- 下一篇: HTML/CSS 常见面试题汇总