BQ25792: does not enter into ship mode........

Part Number: BQ25792

Tool/software:

I am trying to enter into ship mode when an exti button is pressed on my mcu , the charger should go into ship mode, but it goes and imeediately comes out of it automatically, why is this happening ?

 

 

 //***Define the setting register***//

unsigned char        REG00_Minimal_System_Voltage[2]={0x00,0x05};         //3750mV

unsigned char        REG01_Charge_Voltage_Limit[3]={0x01,0x01,0xA8};//0x01A5: 4210mV, 0x01A9:4250mV

unsigned char        REG03_Charge_Current_Limit[3]={0x03,0x00,0xCA};        

unsigned char        REG05_Input_Voltage_Limit[2]={0x05,0x24};                                //3600mV

unsigned char        REG06_Input_Current_Limit[3]={0x06,0x01,0x29};        //2970mA

unsigned char        REG08_Precharge_Control[2]={0x08,0x4C};                //62.2%*VBATREG, 480mA

unsigned char        REG09_Termination_Control[2]={0x09,0x04};        //160mA

unsigned char        REG0A_Re_charge_Control[2]={0x0A,0x23};                //1s cell

unsigned char        REG0B_VOTG_regulation[3]={0x0B,0x00,0xDC};                //USB OTG regulated voltage:5000mV

unsigned char        REG0D_IOTG_regulation[2]={0x0D,0x0D};                        //precharge timer:0.5hr, IOTG Limit:520mA

unsigned char        REG0E_Timer_Control[2]={0x0E,0xBC};                        //Topoff timer, En TRKLCHRG Timer, En PRECHRG Timer, En Charger Timer

unsigned char        REG0F_Charger_Control_0[2]={0x0F,0xA2};        //En BAT Discharge w/BATOVP, EN Charge, En Termination

unsigned char        REG10_Charger_Control_1[2]={0x10,0x30};        //VAC OVP:7V, diable watchdog timer

unsigned char        REG11_Charger_Control_2[2]={0x11,0x01};        //Disable 10s SDRV Delay, disable auto D+,D-detect

unsigned char        REG12_Charger_Control_3[2]={0x12,0x00};        //disable OTG mode, disable 15ms /QON wakeup delay

unsigned char        REG13_Charger_Control_4[2]={0x13,0x01};        //EN IBUS OCP, EN ACDRV1 or EN ACDRV2

unsigned char        REG14_Charger_Control_5[2]={0x14,0x86};        //Ship FET Present, IBAT Discharge Reg:3A, EN IINDPM Register, EN ILIM pin

//unsigned char        REG15        15        AA                        //reserved

unsigned char        REG16_Temperature_Control[2]={0x16,0xC0};        //TREG:120degress, T_SHUT_DOWN:150degrees

unsigned char        REG17_NTC_Control_0[2]={0x17,0x7A};                //not used NTC

unsigned char        REG18_NTC_Control_1[2]={0x18,0x54};                //not used NTC

unsigned char        REG19_ICO_Current_Limit[3]={0x19,0x01,0x29};        //Input current limit:2970mA

 

 //***Define the status register***//

unsigned char        REG1B_Charger_Status_0[1]={0x1B};                //7:Input current status, 6:input voltage status,5:1I2C WATCH DOG timer status, 4:Poor source detection, 3:Power Good status, 2:AC2 Present status, 1:AC1 Present status, 0:VBUS Present status

unsigned char        REG1C_Charger_Status_1[1]={0x1C};                //7-5:charger status, 4-1: VBUS status, 0: BC1.2 done status

unsigned char        REG1D_Charger_Status_2[1]={0x1D};                //bit 1: D+/D- detection status,bit 0:Battery present status

unsigned char        REG1E_Charger_Status_3[1]={0x1E};                //bit 7: ACFET2 present, bit 6: ACFET1 present, bit 5: ADC conversion status, bit 4: VSYS Regulation status, bit 3: CHR_TMR_STAT, bit 2: TRICHG_TMR_STAT, bit 1: PRECHG_TMR_STAT

unsigned char        REG1F_Charger_Status_4[1]={0x1F};                //VBAT high enough for OTG, TS cold status

unsigned char        REG20_FAULT_Status_0[1]={0x20};                        //bit 7: IBAT regulation status, bit 6: VBUS over-voltage status, bit 5:VBAT over-voltage, bit 4:IBUS over-current, bit 3: IBAT over-current, bit2:converter over current, bit1: VAC2 over voltage, bit0: VAC1 over voltage

unsigned char        REG21_FAULT_Status_1[1]={0x21};                        //bit 7: VSYS short-circuit, bit 6: VSYS over-voltage, bit 5:OTG over voltage, bit 4:OTG under voltage, bit 3: RESERVED, bit 2: IC temperature shutdown

unsigned char        REG22_Charger_flag_0[1]={0x22};                        

unsigned char        REG23_Charger_flag_1[1]={0x23};

unsigned char        REG24_Charger_flag_2[1]={0x24};

unsigned char        REG25_Charger_flag_3[1]={0x25};

unsigned char        REG26_Charger_flag_4[1]={0x26};

unsigned char        REG27_Charger_flag_5[1]={0x27};

//unsigned char        REG28        28        00

//unsigned char        REG29        29        00

//unsigned char        REG2A        2A        00

//unsigned char        REG2B        2B        00

//unsigned char        REG2C        2C        00

//unsigned char        REG2D        2D        00

 

 //***Define ADC reading registers***//

unsigned char        REG2E_ADC_Control[2]={0x2E,0xB8};                //bit7: ADC_EN, bit6: ADC_RATE, bit5-4:ADC resolution, bit3:ADC_AVG, ADC_AVG_INIT

unsigned char        REG2F_ADC_Function_Disable_0[2]={0x2F,0x00};        //0x00: nothing disable at this moent.

unsigned char        REG30_ADC_Function_Disable_1[2]={0x30,0x00};

unsigned char        REG31_IBUS_ADC[1]={0x31};                                                //0-5000mA, ADC reading of IBUS current in mA

unsigned char        REG33_IBAT_ADC[1]={0x33};                                                //0-8000mA, ADC reading of battery current: positive is charging, negative is discharging

unsigned char        REG35_VBUS_ADC[1]={0x35};                                                //0-3000mV, ADC reading of VBUS        

unsigned char        REG37_VAC1_ADC[1]={0x37};                                                //0-3000mV, ADC reading of VAC1

unsigned char        REG39_VAC2_ADC[1]={0x39};                                                //0-3000mV, ADC reading of VAC2

unsigned char        REG3B_VBAT_ADC[1]={0x3B};                                                //0x105E, battery remote sensing voltage reading.

unsigned char        REG3D_VSYS_ADC[1]={0x3D};                                                //0x10C2, VSYS ADC reading

unsigned char        REG3F_TS_ADC[1]={0x3F};                                                        //TS ADC reading, 0%-99.9023%

unsigned char        REG41_TDIE_ADC[1]={0x41};                                                //value x 0.5 degree, ADC Die temperature

unsigned char        REG43_D_PLUS_ADC[1]={0x43};                                        //D+ ADC reading

unsigned char        REG45_D_MINUS_ADC[1]={0x45};                                //D- ADC reading

unsigned char        REG47_D_DAC[2]={0x47,0x00};                                        //D+ HiZ, D- Hiz

unsigned char        REG48_Device[1]={0x48};                                                        //5-3bit:Device Part number, 0x08 means BQ25792

 

Charger_Typedef Battery_Charger;

 

 

void Single_Write_Charger(unsigned char *Send_Array)

{

unsigned int Charger_address;

 

Charger_address = BQ25792_I2C_ADDR;

HAL_I2C_Master_Transmit(&hi2c2,Charger_address,Send_Array,2,1000);

 

HAL_Delay(4);

}

 

void Init_Charger_Device(void)

{

 

Single_Write_Charger(REG00_Minimal_System_Voltage);                        //Set the system voltage to 3750mV

Write_Charger_16bit(REG01_Charge_Voltage_Limit);                                //set charging voltage to 4210mV

Write_Charger_16bit(REG03_Charge_Current_Limit);                                //charing current limit:2000mA

Single_Write_Charger(REG05_Input_Voltage_Limit);                                //Input minimum voltage 3600mV

Write_Charger_16bit(REG06_Input_Current_Limit);                                        //2970mA

Single_Write_Charger(REG08_Precharge_Control);                                        //62.2%*VBATREG, 480mA

Single_Write_Charger(REG09_Termination_Control);                                //160mA

Single_Write_Charger(REG0A_Re_charge_Control);                                        //1cell, 200mV recharge

Write_Charger_16bit(REG0B_VOTG_regulation);

Single_Write_Charger(REG0D_IOTG_regulation);

Single_Write_Charger(REG0E_Timer_Control);                                                        //Topoff timer:30min, En TRKLCHRG Timer, En PRECHRG Timer, En Charger Timer

Single_Write_Charger(REG0F_Charger_Control_0);

Single_Write_Charger(REG10_Charger_Control_1);

Single_Write_Charger(REG11_Charger_Control_2);

Single_Write_Charger(REG12_Charger_Control_3);

Single_Write_Charger(REG14_Charger_Control_5);

Single_Write_Charger(REG16_Temperature_Control);

Write_Charger_16bit(REG19_ICO_Current_Limit);                                                //Input current limit:2970mA

 

Single_Write_Charger(REG2E_ADC_Control);

 

}

 

void enter_ship_mode()

{

 

unsigned char ship_mode_command[2] = {0x11, 0x05}; // Set SDRV_CTRL to 0b10,SDRV_CTRL[1:0] = 10 to enter ship mode

    Single_Write_Charger(ship_mode_command);

    HAL_Delay(10);

}

 

please guide........       

  • Hi Sungaya,

    Is Vbus present when ship mode is enabled? There are four events that could cause ship mode to exit:

    The 2nd and 3rd aren't relevant since you have disabled watchdog and wrote 01 to SDRV_CTRL[1:0]. What is the value of    pin?

    Best Regards,

    Jibin

  • Hi Jibin, 

    the vbus is not present, and i configured the   pin as follows : 

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(GPIOJ, Charge_CE_Pin|Charge_QON_Pin, GPIO_PIN_SET);

    /*Configure GPIO pin : PtPin */
    GPIO_InitStruct.Pin = Charge_QON_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(Charge_QON_GPIO_Port, &GPIO_InitStruct);

  • Hi Sungaya,

    Can you provide comments on the code? What I understand so far from the pin configuration is that it is an open-drain mode with a pull up. Do you have register values when the Ship mode is enabled then disabled. 

    Best Regards,

    Jibin

  • yes, the pin configuration what you say is correct, this is the register value when entering into ship mode :unsigned char ship_mode_command[2] = {0x11, 0x05}; // Set SDRV_CTRL to 0b10,SDRV_CTRL[1:0] = 10 to enter ship mode . Also 
    i saw in our schematics that the charger Qon pin is connected to the reset pin of our MCU, may be this is stopping the charger to enter the ship mode ?

  • Hi Sungaya,

    It could be the reason since a logical low for tSM_EXIT (based on your REG12 value it is 1s) on the QON pin will cause exit out of ship mode. 

    Best Regards,

    Jibin