fix(vd960DBN): BLE→Loop OTA 失效修复 — 0x9F 帧透传回 BLE
DMA 改造(fed4335)后 UART2 RX 走 lup_feed_byte 只认 0x7F, Loop bootloader
回的 0x9F 响应帧(pre_ok/addr_ok/data ACK)全被吞; OTA 是停等协议
(0xA7 WITH_BACK 每块必回 ACK), 工具等不到 ACK 升级必然卡死。
- loop_uart_proto: 新增 lup_feed_byte_ota() 0x9F 帧状态机 (SUM 校验无 XOR,
复用 g_lup_parser), 枚举追加 OTA 专用状态
- usart_biz: uart2_dma_poll 按 g_flag_counter_ota.flag 切换 0x9F/0x7F 解析器,
模式切换 reset, OTA 溢出阈值放宽整缓冲, 补收帧 tick 归零;
uart_srv OTA 分支 0x9F 帧透传回 BLE + 清 flag
- 单测 tests/test_lup_ota_parser.c 8 断言全过 (bootloader 真实帧向量)
- 遗留: g_flag_counter_ota.flag 无退出机制, 升级后需断电重启
This commit is contained in:
@@ -212,7 +212,11 @@ typedef enum {
|
||||
LUP_FRAME_STATE_HEADER, // 接收 Header (Addr, LEN, CMD)
|
||||
LUP_FRAME_STATE_VALUE, // 接收 Value
|
||||
LUP_FRAME_STATE_CHECK, // 接收 Checksum
|
||||
LUP_FRAME_STATE_COMPLETE // 帧完成
|
||||
LUP_FRAME_STATE_COMPLETE, // 帧完成
|
||||
/* 0x9F OTA 专用状态 (2026-08-19): 帧格式 9F SubL SubH LEN CMD DATA CHECK */
|
||||
LUP_FRAME_STATE_OTA_LEN, // 0x9F: 收 LEN (含 CMD)
|
||||
LUP_FRAME_STATE_OTA_CMD, // 0x9F: 收 CMD
|
||||
LUP_FRAME_STATE_OTA_CHECK // 0x9F: 收 CHECK (仅 SUM, 无 XOR)
|
||||
} LUP_FrameState;
|
||||
|
||||
typedef struct {
|
||||
@@ -228,6 +232,11 @@ extern LUP_FrameParser g_lup_parser;
|
||||
/* 喂一个字节给帧解析器,返回 1 表示帧接收完成 */
|
||||
int lup_feed_byte(uint8_t byte);
|
||||
|
||||
/* 0x9F OTA 帧解析器 (OTA 模式专用, g_flag_counter_ota.flag=1 时使用)
|
||||
* 帧格式: 9F SubL SubH LEN CMD DATA(LEN-1) CHECK(SUM)
|
||||
* 与 0x7F 共用 g_lup_parser 缓冲/索引, 状态值独立 (LUP_FRAME_STATE_OTA_*) */
|
||||
int lup_feed_byte_ota(uint8_t byte);
|
||||
|
||||
/* 取完整帧的指针和数据长度 */
|
||||
const uint8_t *lup_frame_data(void);
|
||||
uint16_t lup_frame_len(void);
|
||||
|
||||
Reference in New Issue
Block a user