最近遇到一個需求.就是修改不同的專案中在SBL下充電的電流.專案平臺是高通msm8953+pmi8952.剛拿到需求就是看了下SBL的代碼.SBL的代碼還是比較容易梳理的.
首先是找下SBL充電相關pm_sbl_chg_init(),在這個函式中做了
err_flag |= pm_sbl_config_chg_parameters(device_index);
//Configure FG parameters to SRAM
err_flag |= pm_sbl_config_fg_sram(device_index); //Needs to be called before DBC check
err_flag |= pm_sbl_chg_check_weak_battery_status(device_index);
pm_sbl_config_chg_parameters這個是配置充電的引數,在本平臺是有這么一個table來配置相關引數的
smbchg_specific_data[1] = {
{
//Configuration Value, Enable config
{PM_SMBCHG_BAT_IF_LOW_BATTERY_THRESH_3P25, PM_DISABLE_CONFIG }, //Vlowbatt Threshold
{PM_SMBCHG_USBCHGPTH_INPUT_PRIORITY_USBIN, PM_DISABLE_CONFIG }, //Charger Path Input Priority
{PM_SMBCHG_BAT_IF_BAT_MISS_DETECT_SRC_BMD_PIN, PM_DISABLE_CONFIG }, //Battery Missing Detection Source
{PM_SMBCHG_MISC_WD_TMOUT_18S, PM_DISABLE_CONFIG }, //WDOG Timeout
{FALSE, PM_DISABLE_CONFIG }, //Enable WDOG
{1000, PM_DISABLE_CONFIG }, //FAST Charging Current
{250, PM_DISABLE_CONFIG }, //PRE Charge Current
{3000, PM_DISABLE_CONFIG }, //PRE to Fast Charge Current
{4350, PM_ENABLE_CONFIG }, //Float Voltage
{2100, PM_DISABLE_CONFIG }, //USBIN Input Current Limit
// {1000, PM_DISABLE_CONFIG }, //DCIN Input Current Limit
{200, PM_ENABLE_CONFIG }, //apsd_reset_theshold_mv
BOOTUP_VOLTAGE, //bootup_battery_theshold_mv
3800, //wipowr bootup battery thesholdmv
FALSE, //Enable/Disable JEITA Hard Temp Limit Check in SBL
FALSE, // dbc_high_current_mode
}
};
pm_sbl_chg_check_weak_battery_status這個是主要的函式.首先充電時候pre-charge,fast-charge.平臺定義的話在pre-charge將type手動設定了USB(限流)所以不論怎么樣都最大使用500ma的電流.
boot_log_message("Manually set to USB500 mode");
CHG_VERIFY(pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USB51_MODE, TRUE));
CHG_VERIFY(pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, FALSE));
根據這些我們首先需要去掉這個限制,
err_flag |= pm_smbchg_usb_chgpth_en_hvdcp(device_index, FALSE); //Disable HVDCP
err_flag |= pm_smbchg_usb_chgpth_config_aicl(device_index, PM_SMBCHG_USB_CHGPTH_AICL_CFG__AICL_EN, FALSE); //Disable AICL
err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__USBIN_MODE_CHG, TRUE); //set HC mode
err_flag |= pm_smbchg_usb_chgpth_set_cmd_il(device_index, PM_SMBCHG_USBCHGPTH_CMD_IL__ICL_OVERRIDE, TRUE); //Set ICL_OVERRIDE
然后在設定暫存器將pre-charge current設定到550ma.這樣的話預充電階段能做的只有這么多.然后在設定pre_to_fast的值.將pre_to_fastcharge的值降低.在提高fastcharge的電流.具體設定可以再上面的smbchg_specific_data[1]陣列中 enable 配置然后設定大小.也可以在pm_sbl_config_chg_parameters()函式中去設定.
最后就是根據不同專案GPIO口的狀態做匹配.首先我是想用tlmm模塊中的介面來獲取gpio的狀態,但是發現tlmm初始化在我們充電的后面.所以直接來讀取暫存器.
#define GPIO_CFG (*(uint32 *)0x1083000) //TLMM_GPIO_CFG1
#define GPIO_IN_OUT (*(uint32 *)0x1083004) //TLMM_GPIO_IN_OUT
指標大法好!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/229941.html
標籤:其他
上一篇:風向風速圖將Series中的風向風速資料data和xAxis中的時間data一一對應
下一篇:網路連接與增大
