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........