Files
story/docs/ble-wifi-fix-20260913.md
T
Codex Local bf1233d5df
ci / verify (push) Canceled after 0s
feat: expand companion platform, device controls, and memoir workflows
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
2026-10-08 10:06:44 +08:00

46 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EchoEar 屏幕确认后重启修复
设备:`KP01-B43A451634A8`,EchoEar ESP32-S3,串口 COM6。
## 原因与修复
实机日志确认:Wi-Fi 默认静态缓冲区分配失败;失败路径保留了 `WIFI_STA`,但下一次调用又创建同名接口,触发 SDK 内部断言并重启。
- 新增 `main/ble_wifi.c`,逐阶段持有接口、事件组、驱动和事件处理器,重试不会重复创建或注册。
- 使用带错误检查的网络接口创建 API,不使用内部会 assert 的便捷创建函数;接口连接失败时清理自己创建的接口,不接管其他模块的接口。
- 仅 BLE 配网模式使用静态 RX/TX 各 4、动态 RX 8、TX cache 4,关闭该模式的 AMPDU/AMSDU。普通语音模式的 sdkconfig 性能配置不变。
- 在蓝牙启动之前预留 Wi-Fi 驱动资源;此时不启动 Wi-Fi 连接、不发送账号信息,实体点击确认仍然必需。
- 每次更换连接任务先停止上一次 STA,并等待停止事件;失败重试不重复初始化网络接口。
- Wi-Fi 启动内存不足和网络连接超时分别提示。重连失败时不继续提交云端绑定。
- 诊断只记录错误码、内存余量、断开原因编号,不记录 Wi-Fi 密码或绑定凭据。
本次没有修改线上服务、小程序协议或数据库,也没有解除绑定或恢复出厂设置。
## 验证
- ESP-IDF v5.5.1 固件编译通过;程序大小 3,175,712 字节,5 MiB 程序分区剩余约 39%。
- `tests/ble-wifi-host.cjs` 将真实 `ble_wifi.c` 函数接入 SDK 模拟器,22 个生命周期/故障注入测试通过;使用 GCC `-Wall -Wextra -Werror -fsanitize=address,undefined`。
- 覆盖连续 10 次驱动初始化内存不足后恢复、所有初始化阶段失败、网络接口所有权保护、连接超时/断开/停止事件延迟、重复任务和参数校验。
- SDK 私密日志回归测试通过。
- COM6 只刷写 `0x10000` 程序,写入哈希校验通过;没有写入 NVS、分区表、工厂身份或资源分区。
- 新固件实机启动:Wi-Fi 初始化成功后内部可用内存 58,519 字节,最大连续块 31,744 字节。蓝牙初始化与启动任务正常完成。
- 45 秒启动观察只看到刷入后的 1 次主动重启,没有出现额外崩溃重启。
- 用小程序实际 Security2 实现完成实机自动连接和加密握手,连续两轮读取设备信息、状态成功,状态 `idle`。
- 用户随后通过小程序重新提交配网信息并轻点屏幕:约 6.4 秒取得 IP,再约 2.5 秒设备状态到达 `success`。上述只读握手测试没有代用户提交绑定。
- 云端只读复核:绑定记录 `COMMITTED`,完成时间 2026-09-13 21:11:25(北京时间),`binding_generation=5`,有效绑定数为 1。
- 云端语音激活状态当时为 `PROVISIONING`;绑定成功不代表语音服务已经开通完成。
## 文件与回退
固件:`firmware/echoear-platform-agent/build/VolcRTCDemo.bin`
SHA256:`261D68285C062ACDE5927690667A85DEDD5D19C6B88FF696F235F8CB0DE3D6EA`
刷入前 5 MiB 程序分区备份:`.tmp-mini-release/before-wifi-fix-app-20260913.bin`
备份 SHA256:`15B84C11253A1D96B23F3952433751195550436EB522F87D4F171D7C98D20814`
仅在明确需要回退时把该程序备份写回 `0x10000`,不要整片擦除。
只读诊断:`tools/monitor_provisioning.py --port COM6 --seconds 45`,默认不重启;`--reset` 必须显式指定。