boot ROM下建立USB meta连接后,软 件断开USB手机进入睡眠后底电流偏高的解法
0赞[DESCRIPTION]
问题发生的背景是客户产线为测试方便,需要在meta测试完成的最后一步下发AT
command通过软件方式关闭USB测试target底电流
而因为50在boot rom下建立meta mode连接之后,USB PLL不会关闭,导致漏电0.5ma
这个时候不能通过SW方式去关PLL,这样会导致RF desense的issue
故最好的办法是下AT command的时候,target端实行快速reboot到normal mode,同
时不做枚举usb的动作,以达成测试normal bootup场景下底电流的目的
[SOLUTION]来自半导体社区
Usb_task.c (1132sp load)
#include “wdt_sw.h”
static kal_bool isAT_sleeptest;
usb_task_init(….)
{
….
isAT_sleeptest = WDT_Read_RETN_FLAG();
WDT_CLR_RETN_FLAG(0x40);
….
}
Custom_at_command.c
Custom_command_handle()
{
//add for flight mode test
kal_uint8 data[NVRAM_EF_SYS_CACHE_OCTET_SIZE];
//add for flight mode test
……
else if
(app_strnicmp(cmd_name,WT_ENTER_SLEEP_FILTER,sizeof(WT_ENTER_SLEEP_FILTER)
) == 0)
{
//const unsigned int Count = 100 * 48000;
//unsigned int delay;
sprintf(buffer, "OK");
rmmi_write_to_uart((kal_uint8*)buffer, strlen(buffer),
KAL_TRUE);
//for (delay=0; delay<Count; delay++);
//AtHandlerQuicklyEnterSleep();
//usb_device_power_off_forced();
//add for flight mode test
data[L4C_SETTING_FLIGHT_MODE] = is_flightmode; /* 0: normal mode; 1:
flightmode */
nvram_external_write_data(NVRAM_EF_SYS_CACHE_OCTET_LID,NVRAM_SYS_FLIGHTMOD
E_STATE,data, NVRAM_EF_SYS_CACHE_OCTET_SIZE);
//add for flight mode test
WDT_SET_RETN_FLAG(0x40);
handle = DclPW_Open(DCL_PW, FLAGS_NONE);
DclPW_Control(handle,PW_CMD_SET_SWITCH_TO_IDLE,NULL);
DclPW_Close(handle);
DRV_RESET();
return KAL_TRUE;
static void usb_task_main(….)
{
//add for flight mode test
kal_uint8 data[NVRAM_EF_SYS_CACHE_OCTET_SIZE];
//add for flight mode test
…..
Case MSG_ID_USB_B_PLUGIN_IND :
#ifdef __USB_COMPLIANCE_CHARGE__
ind =
(bmt_usb_ind_struct*)construct_local_para(sizeof(bmt_usb_ind_struct),
TD_CTRL);
ind->usb_ind =
PMU_CHARGE_CURRENT_0_00_MA;//(PMU_CHR_CURRENT_ENUM)get_chr_current_list.pC
urrentList[0];
USB_Send_Msg_Ext_Queue(ilm_charge, MOD_BMT,
MSG_ID_BMT_USB_IND, ind);
drv_trace0(TRACE_FUNC,
(kal_uint32)USB_TEST_LOAD);
// ind =
(bmt_usb_ind_struct*)construct_local_para(sizeof(bmt_usb_ind_struct),
TD_CTRL);
// ind->usb_ind =
PMU_CHARGE_CURRENT_0_00_MA;
//
USB_Send_Msg_Ext_Queue(ilm_char
ge,MOD_BMT, MSG_ID_BMT_USB_IND, ind);
#else
If(isAT_sleeptest & 0x40) //sleep test , disable charging.
{
ind =
(bmt_usb_ind_struct*)construct_local_para(sizeof(bmt_usb_ind_struct),
TD_CTRL);
ind->usb_ind = PMU_CHARGE_CURRENT_0_00_MA;
USB_Send_Msg_Ext_Queue(ilm_charge, MOD_BMT,
MSG_ID_BMT_USB_IND, ind);
//add for flight mode test
data[L4C_SETTING_FLIGHT_MODE] = 0; /* 0: normal mode; 1: flightmode */
nvram_external_write_data(NVRAM_EF_SYS_CACHE_OCTET_LID,NVRAM_SYS_FLIGHTMOD
E_STATE,data, NVRAM_EF_SYS_CACHE_OCTET_SIZE);
//add for flight mode test
}
移除USB pop up ~
static void usb_task_main(….)
{
…..
Case MSG_ID_USB_B_PLUGIN_IND :
#ifdef __USB_COMPLIANCE_CHARGE__
……..
#else
If(isAT_sleeptest & 0x40) //sleep test , disable charging.
{
ind =
(bmt_usb_ind_struct*)construct_local_para(sizeof(bmt_usb_ind_struct),
TD_CTRL);
ind->usb_ind = PMU_CHARGE_CURRENT_0_00_MA;
USB_Send_Msg_Ext_Queue(ilm_charge, MOD_BMT,
MSG_ID_BMT_USB_IND, ind);
//add for flight mode test
data[L4C_SETTING_FLIGHT_MODE] = 0; /* 0: normal mode; 1: flightmode */
nvram_external_write_data(NVRAM_EF_SYS_CACHE_OCTET_LID,NVRAM_SYS_FLIGHTMOD
E_STATE,data, NVRAM_EF_SYS_CACHE_OCTET_SIZE);
//add for flight mode test
Break; à 跳出switch case (確保不會執行到
usb_mode_selection())
}
