fix(vd960DBN): OTA 刷写成功误判未启动 — 状态回 idle + 补 ota_report 主动上报
现场: 远程平台发起 OTA, 设备物理刷写成功 (70块全ACK, flash DONE), 但平台 ota_status 轮询只见 state=ready → 误判'刷写未启动'。 根因: 1. ota_flash_done 刷写成功后台侧状态置 READY (与协议状态机 'FLASHING──成功──▶IDLE(清槽/保留)' 不符), 平台无法区分 '待刷 ready' 与 '已刷完' → 持续 ready 判未启动 2. 固件漏实现协议 §5.5 ota_report 主动上报 (done/failed 重发 3次×5s), 平台收不到成功信号, 只能靠 ota_status 轮询兜底 修复 (协议 V1.09 + 固件): - 协议: 刷写成功状态明确回 idle (镜像保留, last_result=0, 可重刷); ota_report 升级为刷写结果主依据; 平台判定指引 (idle+size>0+last_result=0 =成功; 不得以轮询未见 flashing 或持续 ready 判未启动) - ota_srv.c: ota_flash_done → OTA_STATE_IDLE (镜像保留) + 上报 done; ota_flash_fail → 补 ota_report failed (保留 event_report 告警); ota_cmd_begin 兼容 idle+size/crc32 一致 → 直接回 ready (免下载重刷) - iot_mqtt_srv.c: 新增 ota_report 上报状态机 (立即首发 + 5s×3 重发, 同 msg_id/ts), 共享 _iot_pub_payload (event_report 复用, RAM 零新增) - 单测: test_flash_flow/test_flash_ready_timeout 断言 ota_report 上报, state 断言 READY→IDLE; 新增 test_begin_reflash; 10/10 全过 + 22 py 断言
This commit is contained in:
@@ -294,7 +294,7 @@ OTA_SLOT_A = "a"
|
||||
OTA_SLOT_B = "b"
|
||||
|
||||
OTA_STATE_DESC = {
|
||||
"idle": "空闲",
|
||||
"idle": "空闲(镜像保留,已刷写完成则 idle+size>0)",
|
||||
"downloading": "下载中",
|
||||
"ready": "校验通过(可刷写)",
|
||||
"flashing": "刷写中",
|
||||
|
||||
Reference in New Issue
Block a user