Files
ESP32_COMM/.trae/specs/fix-ble-ota-spurious-ack/tasks.md
T
小龙虾 fedb08e215 fix: 修复:改进OTA错误处理和BLE OTA性能
- 重构app.js中的OTA错误处理,以准确报告获取失败而不假设重启,从而实现正确的状态轮询。
- 通过将握手状态封装在SpiLinkState类中来增强SPI主状态管理,提高清晰度并减少直接的状态操作。
 引入otaSendAndPoll方法,以更好地处理SPI通信中的命令发送和响应轮询。
- 调整BLE OTA数据包确认逻辑,防止导致固件录变慢的虚假确认,确保仅在实际取得进展时才发送确认。
- 修改确认超时设置,以更好地适应闪存写入速度,减少不重传。
2026-07-09 02:49:24 +08:00

1.3 KiB
Raw Blame History

Tasks

  • Task 1: 修复 ESP32 路径虚假 ACK(process_esp32_packet)

    • SubTask 1.1: 在 process_esp32_packet() 中,调用 esp32_write_ordered() 前记录 beforeReceived = getReceived()
    • SubTask 1.2: 调用后记录 afterReceived = getReceived(),计算 progressMade = (afterReceived > beforeReceived)
    • SubTask 1.3: 修改 ACK 触发条件:窗口边界 ACK 仅在 progressMade 为 true 时触发;transferComplete 和 isLastPacket 的 ACK 也需 progressMade 为 true(完成判定依赖实际写入字节数,无写入则不可能完成)
    • SubTask 1.4: 使用 afterReceived 替换 ACK 中的 getReceived() 调用,避免重复查询
  • Task 2: 修复 GD32 路径重复包 ACK(process_gd32_packet)

    • SubTask 2.1: 移除重复包分支(seq <= last_seq)中的窗口边界 ACK 发送逻辑(L1233-1235)
    • SubTask 2.2: 保留重复包的 DEBUG_DBG 日志和 return false 跳过逻辑
  • Task 3: 调整发送端首轮 ACK 超时(ble_ota.js)

    • SubTask 3.1: 将首轮窗口 ACK 等待超时从 3000ms 改为 5000ms(L1305 的 waitForAck 调用)
    • SubTask 3.2: 续发重试路径的 ACK 超时保持 3000ms 不变(L1370 的 waitForAck 调用)

Task Dependencies

  • Task 1, Task 2, Task 3 相互独立,可并行实现