From ae079c1fc5d990ba55714d4b3a51b19f96edaec4 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期四, 24 四月 2025 16:01:43 +0800
Subject: [PATCH] 改为中断来低电平触发发送当前扫描数据,3s内扫描不到的会退出,串口来55 AA 75 70 64 61 74 65,进入升级模式

---
 01_SDK/nimble/mcu_boot/src/uart_dfu.c |   52 +++++++++++++++++++++++++++++-----------------------
 1 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/01_SDK/nimble/mcu_boot/src/uart_dfu.c b/01_SDK/nimble/mcu_boot/src/uart_dfu.c
index 6f5372e..1399123 100644
--- a/01_SDK/nimble/mcu_boot/src/uart_dfu.c
+++ b/01_SDK/nimble/mcu_boot/src/uart_dfu.c
@@ -1,15 +1,16 @@
 /*
- * Copyright (c) 2020-2021 Shanghai Panchip Microelectronics Co.,Ltd.
+ * Copyright (c) 2020-2025 Shanghai Panchip Microelectronics Co.,Ltd.
  *
  * SPDX-License-Identifier: Apache-2.0
  */
-
+#include "soc_api.h"
+#include "app_log.h"
 #include "uart_dfu.h"
 #include "pan_uart.h"
 #include "flash_manager.h"
 
-#define XMODEM_UART			UART0
-#define BAUDRATE			921600
+#define XMODEM_UART         UART0
+#define BAUDRATE            921600
 
 #define SOH 0x01
 #define STX 0x02
@@ -129,7 +130,7 @@
     return 0;
 }
 
-RAM_FUNC static int xmodemReceive(uint32_t addr) 
+CONFIG_RAM_CODE int xmodemReceive(uint32_t addr)
 {
     unsigned char xbuff[1030]; /* 1024 for XModem 1k + 3 head chars + 2 crc + nul */
     unsigned char *p;
@@ -350,9 +351,9 @@
 #endif
 static void uart_device_init(void)
 {
-	CLK_AHBPeriphClockCmd(CLK_AHBPeriph_APB1, ENABLE);
+    CLK_AHBPeriphClockCmd(CLK_AHBPeriph_APB1, ENABLE);
     CLK_APB1PeriphClockCmd(CLK_APB1Periph_UART0, ENABLE);
-	
+
     SYS_SET_MFP(P1, 6, UART0_TX);
     SYS_SET_MFP(P1, 7, UART0_RX);
     GPIO_EnableDigitalPath(P1, BIT7);
@@ -361,30 +362,35 @@
 
     Init_Struct.UART_BaudRate = BAUDRATE;
     Init_Struct.UART_LineCtrl = Uart_Line_8n1;
-	
+
     /* Init UART0 for printf */
     UART_Init(UART0, &Init_Struct);
     UART_EnableFifo(UART0);
+    UART_ResetRxFifo(UART0);
 }
- 
+
 void on_uart_dfu_enter(void)
 {
-	int rc;
-	
-	fm_status_refresh(); /* clear flash manager for a new ota process */
-	uart_device_init();
-	while (1) {
-		rc = xmodemReceive(FLASH_AREA_IMAGE_START);
+    int rc;
+
+#if APP_LOG_EN
+    APP_LOG_INFO("Entering UART DFU flow..\n");
+    soc_busy_wait(10000); // Wait for print done
+#endif
+
+    fm_status_refresh(); /* clear flash manager for a new ota process */
+    uart_device_init();
+
+    while (1) {
+        rc = xmodemReceive(FLASH_AREA_IMAGE_START);
 
         if (rc > 1024) { /* receive image info */
-			if (!fm_image_completed_check(FLASH_AREA_IMAGE_START)) { /* check image */ 
-				fm_image_make_invalid(FLASH_AREA_IMAGE_START);
-			}
-			SYS_UnlockReg();
+            if (!fm_image_completed_check(FLASH_AREA_IMAGE_START)) { /* check image */
+                fm_image_make_invalid(FLASH_AREA_IMAGE_START);
+            }
+            SYS_UnlockReg();
             CLK_ResetChip();
-			SYS_LockReg();
         }
-		SYS_delay_10nop(1000000);
-	}
-	
+        SYS_delay_10nop(1000000);
+    }
 }

--
Gitblit v1.9.3