From 71fd432f8769ae081f87eb6f514336e98e993ea2 Mon Sep 17 00:00:00 2001 From: helei Date: Tue, 18 Aug 2026 15:47:58 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E4=BF=AE=E5=A4=8D4G=20OTA=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=81=87=E6=AD=BB(OTA=E5=85=A5=E5=8F=A3=E5=A4=8D?= =?UTF-8?q?=E4=BD=8D=E6=A8=A1=E7=BB=84=E8=87=B4MQTT=E6=96=AD=E8=BF=9E?= =?UTF-8?q?=E4=BD=86=E6=A0=87=E5=BF=97=E6=9C=AA=E6=B8=85),=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E8=B7=AF=E5=BE=84=E9=80=80=E5=87=BA=E5=90=8E=E6=A0=87?= =?UTF-8?q?=E8=AE=B0RSN=5FOTA=5FFAIL=E5=B9=B6=E4=B8=BB=E5=8A=A8=E5=A4=8D?= =?UTF-8?q?=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V1.5/STM32F103_App1/HardWare/CAR/air780e.c | 7 ++++++- V1.5/STM32F103_App1/HardWare/SYSINIT/reset_log.c | 1 + V1.5/STM32F103_App1/m_app/boot_share.h | 1 + V1.5/鐗堟湰璇存槑.md | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/V1.5/STM32F103_App1/HardWare/CAR/air780e.c b/V1.5/STM32F103_App1/HardWare/CAR/air780e.c index d2edc81..9556486 100644 --- a/V1.5/STM32F103_App1/HardWare/CAR/air780e.c +++ b/V1.5/STM32F103_App1/HardWare/CAR/air780e.c @@ -562,7 +562,12 @@ void air780e_trigger_ota(const char *host, int port, const char *path, const cha g_net_tx_busy = 1; /* 屏蔽业务侧 NET_publish_*, 防止与 AT 应答交织 */ air780e_trigger_ota_body(host, port, path, ota_id, new_ver, crc16); g_net_tx_busy = 0; - log_warn("> OTA: 已中止,恢复正常运行"); + /* body 任何失败路径返回后必须复位:OTA 入口已复位过 4G 模组, + * MQTT 实际已断开而 ready 标志仍是 1("假在线"),不复位将无法控制也无法再次 OTA */ + log_warn("> OTA: 失败中止,复位恢复联网"); + reset_log_mark(RSN_OTA_FAIL); + HAL_Delay(100); + NVIC_SystemReset(); } static void air780e_trigger_ota_body(const char *host, int port, const char *path, const char *ota_id, uint16_t new_ver, uint16_t crc16) { diff --git a/V1.5/STM32F103_App1/HardWare/SYSINIT/reset_log.c b/V1.5/STM32F103_App1/HardWare/SYSINIT/reset_log.c index 31a70c2..a6201c6 100644 --- a/V1.5/STM32F103_App1/HardWare/SYSINIT/reset_log.c +++ b/V1.5/STM32F103_App1/HardWare/SYSINIT/reset_log.c @@ -56,6 +56,7 @@ static const char *reason_str(uint8_t r) case RSN_CMD_RECOVERY: return "串口RECOVERY命令"; case RSN_POWER_LOSS: return "外部断电(法拉电容记录)"; case RSN_4G_MODULE: return "4G模组异常自重启"; + case RSN_OTA_FAIL: return "OTA失败中止"; case RSN_SOFT_GENERIC: return "软件复位(未标记)"; default: return "未知"; } diff --git a/V1.5/STM32F103_App1/m_app/boot_share.h b/V1.5/STM32F103_App1/m_app/boot_share.h index a19a46e..ac828e7 100644 --- a/V1.5/STM32F103_App1/m_app/boot_share.h +++ b/V1.5/STM32F103_App1/m_app/boot_share.h @@ -38,6 +38,7 @@ typedef struct { #define RSN_POWER_LOSS 14 /* 外部 12V 断电(法拉电容续航中记录) */ #define RSN_4G_MODULE 15 /* 4G 模组异常自重启(boot.rom) */ #define RSN_SOFT_GENERIC 16 /* 软件复位(未标记细分原因,如 JLink 复位) */ +#define RSN_OTA_FAIL 17 /* OTA 下载/前置检查失败,中止后复位 */ static inline uint32_t boot_share_sum(const volatile boot_share_t *s) { diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index c1b01f3..5bb0c52 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -142,3 +142,6 @@ 寮鏈 pow/ICCID 涓婃姤闂撮殧鎷夊紑鍒 300ms - 鏂數涓婃姤鍐嶆彁閫燂細PA0 妫娴嬩粠 1s 杞鏀 50ms 蹇疆璇紙妫娴+纭 ~150ms 瑙﹀彂锛夛紱鍏堝彂鍖呭悗鎵撴棩蹇楋紱 淇鍙戦侀氶亾蹇欐椂鎺夌數娑堟伅琚涪寮冧笉閲嶈瘯鐨勯棶棰橈紙NET_publish_power 杩斿洖鐘舵侊紝蹇欏垯 50ms 鍚庨噸璇曠洿鍒板彂鍑猴級 +- 淇 4G OTA 澶辫触鍚"鍋囨"锛堝钩鍙颁笉鍙帶/鏃犳硶鍐 OTA锛夛細OTA 鍏ュ彛浼氬浣 4G 妯$粍锛孧QTT 宸叉柇浣 + ready 鏍囧織鏈竻锛孲1~S4 绛夊墠缃け璐ラ鍑哄悗璁惧鍋囧湪绾裤傜幇鏀逛负浠讳綍 OTA 澶辫触璺緞閫鍑哄悗 + 鏍囪鍘熷洜(RSN_OTA_FAIL "OTA澶辫触涓")骞朵富鍔ㄥ浣嶏紝閲嶅惎璧板共鍑 4G 鍒濆鍖栨仮澶嶈仈缃