feat(ota): 完善OTA传输协议和错误处理机制

- 修改finish ACK验证逻辑,不再接受structured ACK 0xBAC0作为FINISH成功信号
- 移除appRequestBootloader函数的timeout参数,改为内部实现重试机制
- 新增probeBootHandshake函数用于检测GD32是否已处于bootloader模式
- 调整数据包传输中expected_ack值从0xFFFFFFFFU改为0xF0F0F0F0U
- 增加重试次数限制:poll轮询从5次增加到10次,重发次数从3次增加到10次
- 实现FINISH_OTA阶段的重试机制,支持WAIT帧处理和错误恢复
- 在startHandshake和forwardFirmware中添加bootloader探测和状态检查
- 优化APP存活确认失败时的错误处理,添加设备复位操作
- 统一各阶段错误处理逻辑,确保失败时正确清理状态并返回错误码
This commit is contained in:
小龙虾
2026-06-02 03:25:02 +08:00
parent c4d78bdfbc
commit a59364e239
3 changed files with 136 additions and 68 deletions
+2 -2
View File
@@ -94,7 +94,7 @@ public:
size_t resp_max, size_t *resp_len, uint32_t timeout_ms);
/** @brief 通知 GD32 DCU_APP 设置 OTA 标志并软复位进入 Bootloader。 */
esp_err_t appRequestBootloader(uint32_t timeout_ms);
esp_err_t appRequestBootloader();
/** @brief 向 GD32 APP 发送存活探测命令,等待 APP 回复 ALIVE ACK。 */
esp_err_t appPing(uint32_t timeout_ms, uint32_t *uptime_sec);
@@ -146,4 +146,4 @@ private:
size_t *frame_offset);
};
#endif // SPI_MASTER_H
#endif // SPI_MASTER_H