Просмотр исходного кода

fix iap update

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 5 лет назад
Родитель
Сommit
ec6348a7e7
2 измененных файлов с 7 добавлено и 1 удалено
  1. 5 0
      Application/app/iap.c
  2. 2 1
      Application/bsp/fmc_flash.c

+ 5 - 0
Application/app/iap.c

@@ -18,6 +18,7 @@ void process_iap_message(can_frame_t *frame, int len){
 	switch(frame->key) {
 	switch(frame->key) {
 		case CAN_KEY_IAP_ENTER:
 		case CAN_KEY_IAP_ENTER:
 			if (gd32_flash_size() < 128 * 1024){
 			if (gd32_flash_size() < 128 * 1024){
+				wdog_reload();
 				fmc_iap_write_magic(0xFFFFFFFF);
 				fmc_iap_write_magic(0xFFFFFFFF);
 				NVIC_SystemReset();
 				NVIC_SystemReset();
 				while(1);
 				while(1);
@@ -25,6 +26,10 @@ void process_iap_message(can_frame_t *frame, int len){
 			protocol_send_ack(frame->head.can_addr, frame->key, 0);
 			protocol_send_ack(frame->head.can_addr, frame->key, 0);
 			break;
 			break;
 		case CAN_KEY_IAP_BEGIN:
 		case CAN_KEY_IAP_BEGIN:
+			if (gd32_flash_size() < 128 * 1024){
+				protocol_send_ack(frame->head.can_addr, frame->key, 1);
+				break;
+			}
 			fmc_erase_image();
 			fmc_erase_image();
 			_write_position = 0;
 			_write_position = 0;
 			_write_success = 0;
 			_write_success = 0;

+ 2 - 1
Application/bsp/fmc_flash.c

@@ -147,13 +147,14 @@ static void _fmc_read_data(uint32_t addr, uint8_t *data, int len){
 		data[i] = REG8(addr + i);
 		data[i] = REG8(addr + i);
 	}
 	}
 }
 }
-
+extern void wdog_reload(void);
 static void _fmc_erase_addr(uint32_t addr, int len){
 static void _fmc_erase_addr(uint32_t addr, int len){
 	fmc_unlock();
 	fmc_unlock();
 	uint32_t pages = len/one_page_size + (((len % one_page_size) > 0)?1:0);
 	uint32_t pages = len/one_page_size + (((len % one_page_size) > 0)?1:0);
 	for (int i = 0; i < pages; i++){
 	for (int i = 0; i < pages; i++){
 		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
 		fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_WPERR | FMC_FLAG_END);
 		fmc_page_erase(addr + i * one_page_size);
 		fmc_page_erase(addr + i * one_page_size);
+		wdog_reload();
 	}
 	}
 	fmc_lock();
 	fmc_lock();
 }
 }