From 98f887eb366219483091af405da16eb2bf1c5af1 Mon Sep 17 00:00:00 2001 From: wrh Date: Tue, 29 Sep 2026 16:14:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=97=E5=90=91=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=BB=E6=84=8F=E9=98=B6=E6=AE=B5=E9=80=80?= =?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 更新协议板固件版本至V1.1.49 2 新增SOUTH_YMODEM_EXIT_APP宏控制升级退出时是否发送跳转App帧 3 新增YMODEM_PREPARE_DELAY_MS宏,升级模式切换后等待200ms 4 修改chrg_ymodem_proxy_exit函数,支持升级任意阶段退出 5 更新chrg_comm.c、chrg_def.h及升级日志文件对应版本信息 --- .trae/rules/git-commit-message.md | 4 +-- apps/chrg/applications/thread/chrg_comm.c | 2 +- apps/chrg/applications/thread/chrg_north.h | 1 + apps/chrg/applications/utils/chrg_def.h | 4 +-- .../applications/utils/chrg_ymodem_proxy.c | 29 +++++++++++++++---- docs/修改日志.md | 24 +++++++++++++++ 6 files changed, 53 insertions(+), 11 deletions(-) diff --git a/.trae/rules/git-commit-message.md b/.trae/rules/git-commit-message.md index bb3f38c..82c4b50 100644 --- a/.trae/rules/git-commit-message.md +++ b/.trae/rules/git-commit-message.md @@ -8,5 +8,5 @@ scene: git_message 格式 首行 简要描述 空一行 -每行不超过80个描述一个修改/新增/删除的内容。 -具体到文件级,描述文件名、修改内容。 \ No newline at end of file +具体修改使用数字排列如 1 2 3 4 +每行不超过80个简易描述一个修改/新增/删除的内容。 \ No newline at end of file diff --git a/apps/chrg/applications/thread/chrg_comm.c b/apps/chrg/applications/thread/chrg_comm.c index b080e98..65d949b 100644 --- a/apps/chrg/applications/thread/chrg_comm.c +++ b/apps/chrg/applications/thread/chrg_comm.c @@ -27,7 +27,7 @@ #include "stm32f4xx_hal.h" #define HOLD_REG_FIRMWARE_VERSION 0x0300U /* 协议板固件版本,只读 */ -#define CHRG_FIRMWARE_VERSION 0x013EU /* 当前协议板版本:V1.1.46 */ +#define CHRG_FIRMWARE_VERSION 0x0141U /* 当前协议板版本:V1.1.49 */ rt_uint8_t ucDiscInBuf[(TOTAL_DISC_REGS+BITS_UCHAR-1)/BITS_UCHAR]; diff --git a/apps/chrg/applications/thread/chrg_north.h b/apps/chrg/applications/thread/chrg_north.h index 1707e0a..05c56f3 100644 --- a/apps/chrg/applications/thread/chrg_north.h +++ b/apps/chrg/applications/thread/chrg_north.h @@ -48,6 +48,7 @@ #define SOUTH_FRAME_DEBUG 0x00 // 南向UART原始收发帧 #define SOUTH_COMMAND_DEBUG 0x01 // 南向寄存器写命令 #define SOUTH_YMODEM_DEBUG 0x01 // 南向YMODEM回码 +#define SOUTH_YMODEM_EXIT_APP 0x01 // 升级退出时发送南向跳转App帧 #define COMM_FRAME_DEBUG 0x00 // COM UART原始收发帧 #define COMM_DEBUG 0x00 // COM寄存器读写过程 #define COMM_TRIM_DEBUG 0x00 // COM校准参数解析 diff --git a/apps/chrg/applications/utils/chrg_def.h b/apps/chrg/applications/utils/chrg_def.h index e4d3f06..8fc103f 100644 --- a/apps/chrg/applications/utils/chrg_def.h +++ b/apps/chrg/applications/utils/chrg_def.h @@ -14,8 +14,8 @@ /* CHRG application version. Keep this value synchronized with the changelog. */ #define CHRG_VERSION_MAJOR 1U #define CHRG_VERSION_MINOR 1U -#define CHRG_VERSION_PATCH 46U -#define CHRG_VERSION_STRING "V1.1.46" +#define CHRG_VERSION_PATCH 49U +#define CHRG_VERSION_STRING "V1.1.49" /* * Channel polling mode: diff --git a/apps/chrg/applications/utils/chrg_ymodem_proxy.c b/apps/chrg/applications/utils/chrg_ymodem_proxy.c index e6062be..8b9ef17 100644 --- a/apps/chrg/applications/utils/chrg_ymodem_proxy.c +++ b/apps/chrg/applications/utils/chrg_ymodem_proxy.c @@ -8,6 +8,7 @@ #include "chrg_def.h" #include "chrg_thread.h" +#include "chrg_north.h" #include "chrg_south.h" #include "chrg_roll_sou.h" #include "chrg_eload.h" @@ -20,6 +21,7 @@ #define YMODEM_SESSION_IDLE_MS 15000U // 整个升级会话无有效数据超时 #define YMODEM_ENTER_TIMEOUT_MS 15000U // 功率板进入Boot及擦除等待时间 #define YMODEM_RESPONSE_TIMEOUT_MS 10000U // 南向单帧应答等待时间 +#define YMODEM_PREPARE_DELAY_MS 200U // 切换升级模式后等待功率板重启稳定 typedef struct { chrg_ymodem_proxy_state_t state; // 当前升级阶段 @@ -47,8 +49,10 @@ static chrg_ymodem_proxy_t g_proxy = { /* 功率板进入Boot和跳转App的固定Modbus控制帧。 */ static const rt_uint8_t g_enter_frame[8] = {ID_ELOAD, 0x06, 0x00, 0x0F, 0x00, 0xFF, 0xF8, 0x6B}; +#if SOUTH_YMODEM_EXIT_APP static const rt_uint8_t g_exit_frame[8] = {ID_ELOAD, 0x06, 0x00, 0x0F, 0x00, 0x0F, 0xF8, 0x2F}; +#endif static const rt_uint8_t g_cancel_frame[2] = {YM_CAN, YM_CAN}; static const char *chrg_ymodem_proxy_state_name(chrg_ymodem_proxy_state_t state) @@ -241,7 +245,7 @@ static int chrg_ymodem_proxy_prepare_channel(rt_uint8_t ch) roll->leng = 0U; roll->updata_result = 0; rt_mutex_release(thread->mutex); - rt_thread_mdelay(25U); + rt_thread_mdelay(YMODEM_PREPARE_DELAY_MS); chrg_eload_clear_ymodem_resp(); if (chrgsouth.rb != RT_NULL) rt_ringbuffer_reset(chrgsouth.rb); return 0; @@ -291,19 +295,27 @@ int chrg_ymodem_proxy_enter(rt_uint8_t ch) 函数描述: 跳转功率板App并恢复普通南向轮询 输入参数: ch:当前升级通道 返回说明: 0:收到跳转ACK <0:状态或通信失败 -其它说明: 仅TRANSFER_DONE状态可退出,退出后强制刷新版本 +其它说明: 升级会话任意阶段均可退出,退出后强制刷新版本 *****************************************************************/ int chrg_ymodem_proxy_exit(rt_uint8_t ch) { +#if SOUTH_YMODEM_EXIT_APP rt_tick_t start; rt_uint8_t response; +#endif - if ((g_proxy.state != YMODEM_PROXY_TRANSFER_DONE) || - (ch != g_proxy.ch)) return -1; + if (ch >= TOTAL_SOU_CHS) return -1; + if (g_proxy.state == YMODEM_PROXY_IDLE) { + if (chrg_ymodem_proxy_prepare_channel(ch) != 0) return -2; + g_proxy.ch = ch; + } else if (ch != g_proxy.ch) { + return -1; + } +#if SOUTH_YMODEM_EXIT_APP g_proxy.state = YMODEM_PROXY_EXITING; chrg_eload_clear_ymodem_resp(); if (chrg_send_sou_upadata_data(g_exit_frame, sizeof(g_exit_frame)) != 0) - return -2; + return -3; start = rt_tick_get(); while ((rt_tick_t)(rt_tick_get() - start) < rt_tick_from_millisecond(YMODEM_RESPONSE_TIMEOUT_MS)) { @@ -317,7 +329,12 @@ int chrg_ymodem_proxy_exit(rt_uint8_t ch) rt_thread_mdelay(1U); } chrg_ymodem_proxy_session_stop(); - return -3; + return -4; +#else + chrg_roll_sou_version_invalidate(ch); + chrg_ymodem_proxy_session_stop(); + return 0; +#endif } /* 根据当前阶段校验完整帧,校验成功才允许提交南向。 */ diff --git a/docs/修改日志.md b/docs/修改日志.md index 8b08cb0..f3ed5f0 100644 --- a/docs/修改日志.md +++ b/docs/修改日志.md @@ -1,5 +1,29 @@ # 修改日志 +## V1.1.49 - 2026-09-29 + +### 南向升级随时退出 + +- 南向升级任意阶段均允许接收匹配通道的 `0x20` 退出命令。 +- 本地会话已经回到空闲状态时,也可重新锁定指定通道并发送退出指令,用于恢复仍停留在Boot的功率板。 +- 退出时仍按 `SOUTH_YMODEM_EXIT_APP` 配置决定是否发送跳转App帧。 +- 协议板版本寄存器 `0x0300` 更新为 `0x0141`。 + +## V1.1.48 - 2026-09-29 + +### 南向升级启动等待 + +- 进入南向升级模式后等待200ms,再发送进入Boot升级指令,避开功率板重启阶段。 +- 协议板版本寄存器 `0x0300` 更新为 `0x0140`。 + +## V1.1.47 - 2026-09-29 + +### 南向升级退出跳转开关 + +- 新增 `SOUTH_YMODEM_EXIT_APP` 宏,控制升级退出时是否发送南向跳转App帧。 +- 宏关闭时仅结束本地升级会话并恢复普通轮询。 +- 协议板版本寄存器 `0x0300` 更新为 `0x013F`。 + ## V1.1.46 - 2026-09-29 ### 南向YMODEM数据包打印