OTA 固件升级架构
本页是 WS63 OTA (Over-The-Air) 公共机制的权威入口,说明镜像、校验、写入、切换和回滚。BLE/SLE 页面只描述传输层适配。
文档边界
OTA 包含两个相互独立的部分:
- 传输层:通过 Wi-Fi、BLE (Bluetooth Low Energy) 、SLE (SparkLink Low Energy) 或其他通道把升级数据可靠送到设备。
- 升级层:校验升级包、写入目标区域、确认完整性并控制启动切换。
更换传输通道不应改变镜像格式和安全校验规则。协议页面不得自行定义另一套升级状态机。
通用状态机
stateDiagram-v2
[*] --> Idle
Idle --> Receiving: 开始升级
Receiving --> Verifying: 数据接收完成
Receiving --> Failed: 传输失败或超时
Verifying --> Ready: 完整性与签名校验通过
Verifying --> Failed: 校验失败
Ready --> Switching: 设置待启动镜像
Switching --> TrialBoot: 重启
TrialBoot --> Confirmed: 新镜像自检成功
TrialBoot --> Rollback: 自检失败或未确认
Confirmed --> Idle
Rollback --> Idle
Failed --> Idle: 清理临时状态
升级层职责
- 校验产品型号、硬件版本、镜像版本和包长度。
- 校验分片顺序、整体哈希以及产品要求的签名或认证信息。
- 只向链接脚本和分区表允许的升级区域写入。
- 掉电恢复后能够识别未完成升级,不将半包镜像标记为可启动。
- 新镜像启动后必须有确认机制;未确认或启动失败时执行回滚策略。
具体分区和镜像名称必须以目标固件实际配置和构建产物为准,本页不提供固定地址。
传输层接口要求
无论使用何种协议,传输适配层都应向升级层提供一致的信息:
| 信息 | 用途 |
|---|---|
| 升级会话标识 | 区分新旧任务,防止跨会话混包 |
| 总长度和版本 | 开始前进行空间和版本校验 |
| 分片偏移与长度 | 检测重复、越界和乱序 |
| 分片数据 | 写入升级缓存或目标区域 |
| 结束标志 | 触发整体校验 |
| 取消或超时 | 清理会话并释放资源 |
安全要求
- 传输加密不能替代镜像签名或完整性校验。
- 防回滚策略应由产品安全策略决定,并与量产版本管理一致。
- 任何来自远端的偏移、长度和版本字段都必须在写 Flash 前校验。
- 升级日志不得泄露密钥、签名材料或敏感设备标识。
协议适配
当前 SDK 的 src/application/samples 和 vendor 中没有与这三篇文档一一对应的通用 OTA 案例,因此本页不提供可直接执行的构建、烧录或分区写入代码。
验证清单
- 正常升级、重复分片、乱序、丢包和超时。
- 空间不足、版本不兼容、哈希或签名失败。
- 接收、写入、校验和首次启动各阶段掉电。
- 新镜像自检成功确认和失败回滚。
- 取消升级后临时状态和资源得到清理。