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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user