|
|
@@ -26,14 +26,14 @@ static shark_timer_t _balance_timer = {.handler = _balance_timer_handler};
|
|
|
|
|
|
|
|
|
void bms_state_init(void){
|
|
|
+ set_log_level(MOD_STATE, L_debug);
|
|
|
+ state_debug("BMS System Starting......\n");
|
|
|
_bms_state.cell_index_of_max_vol = 0xff;
|
|
|
measure_task_init(_current_notify, _voltage_notify, _temperature_notify);
|
|
|
io_state_init();
|
|
|
health_init();
|
|
|
soc_init();
|
|
|
shark_task_add(&_bms_main_task);
|
|
|
- set_log_level(MOD_STATE, L_debug);
|
|
|
- state_debug("BMS System Starting......\n");
|
|
|
}
|
|
|
|
|
|
bms_state_t *bms_state_get(void){
|
|
|
@@ -116,16 +116,33 @@ static void _process_user_request(s32 health){
|
|
|
static void _process_power_down(void){
|
|
|
#if (ALLOW_POWER_DOWN==1)
|
|
|
if (bms_health()->powerdown_lower_voltage){
|
|
|
+ state_debug("BMS System PowerDown!!\n");
|
|
|
ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 1);
|
|
|
delay_us(2* 1000);
|
|
|
if (!ml5238_charger_is_disconnect(AUX_VOL_IS_OPEN())){//have charger, do'nt power down
|
|
|
bms_health()->powerdown_lower_voltage = 0;
|
|
|
+ ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 0);
|
|
|
return;
|
|
|
}
|
|
|
+ ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 0);
|
|
|
AUX_VOL_OPEN(0);
|
|
|
- CS1180_PWR_ENABLE(0);
|
|
|
discharger_open(0);
|
|
|
- charger_open(0);
|
|
|
+ charger_open(0);
|
|
|
+
|
|
|
+ /*需要等待B-和P-之间的电容放电掉后,才能设置5238 power down,
|
|
|
+ 否则5238会触发充电器插入检测,导致重新开机,进入powerdown <->开机的无限循环*/
|
|
|
+ ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 1);
|
|
|
+ delay_us(2* 1000);
|
|
|
+ u64 wait_start = shark_get_mseconds();
|
|
|
+ while(!ml5238_charger_is_disconnect(AUX_VOL_IS_OPEN())){
|
|
|
+ if (shark_get_mseconds() - wait_start >= 2000){
|
|
|
+ bms_health()->powerdown_lower_voltage = 0;
|
|
|
+ ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CS1180_PWR_ENABLE(0);
|
|
|
+ DCDC_VOL_OPEN(0);
|
|
|
ml5238_power_down();
|
|
|
}
|
|
|
#endif
|