Преглед изворни кода

ML5238Power down process, MUST be careful: give the system max 2s to comsumer the cap voltage

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui пре 5 година
родитељ
комит
9384397064
1 измењених фајлова са 21 додато и 4 уклоњено
  1. 21 4
      Application/app/sox/state.c

+ 21 - 4
Application/app/sox/state.c

@@ -26,14 +26,14 @@ static shark_timer_t _balance_timer = {.handler = _balance_timer_handler};
 
 
 
 
 void bms_state_init(void){
 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;
 	_bms_state.cell_index_of_max_vol = 0xff;
 	measure_task_init(_current_notify, _voltage_notify, _temperature_notify);
 	measure_task_init(_current_notify, _voltage_notify, _temperature_notify);
 	io_state_init();
 	io_state_init();
 	health_init();
 	health_init();
 	soc_init();
 	soc_init();
 	shark_task_add(&_bms_main_task);
 	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){
 bms_state_t *bms_state_get(void){
@@ -116,16 +116,33 @@ static void _process_user_request(s32 health){
 static void _process_power_down(void){
 static void _process_power_down(void){
 #if (ALLOW_POWER_DOWN==1)	
 #if (ALLOW_POWER_DOWN==1)	
 	if (bms_health()->powerdown_lower_voltage){
 	if (bms_health()->powerdown_lower_voltage){
+		state_debug("BMS System PowerDown!!\n");
 		ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 1);
 		ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 1);
 		delay_us(2* 1000);
 		delay_us(2* 1000);
 		if (!ml5238_charger_is_disconnect(AUX_VOL_IS_OPEN())){//have charger, do'nt power down
 		if (!ml5238_charger_is_disconnect(AUX_VOL_IS_OPEN())){//have charger, do'nt power down
 			bms_health()->powerdown_lower_voltage = 0;
 			bms_health()->powerdown_lower_voltage = 0;
+			ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 0);
 			return;
 			return;
 		}
 		}
+		ml5238_enable_charger_detect(AUX_VOL_IS_OPEN(), 0);
 		AUX_VOL_OPEN(0);
 		AUX_VOL_OPEN(0);
-		CS1180_PWR_ENABLE(0);
 		discharger_open(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();
 		ml5238_power_down();
 	}
 	}
 #endif
 #endif