FOTA 控制指令
对应源码:
components/airlink/src/luat_airlink_cmds.c,components/airlink/include/luat_airlink_fota.h启用宏:
LUAT_USE_AIRLINK_EXEC_FOTA
本系列指令用于传递 FOTA 包, 执行远程升级操作.
指令列表
| cmd | 名称 | 方向 | 说明 |
|---|---|---|---|
| 0x04 | fota_init | 主→从 | 初始化 FOTA 上下文 |
| 0x05 | fota_write | 主→从 | 写入 FOTA 数据块 (≤1500B) |
| 0x06 | fota_done | 主→从 | 通知传输完成 (校验耗时较长) |
| 0x07 | fota_end | 主→从 | 结束 FOTA 流程, 清理上下文 |
时序图
主端 从端
│ │
│── 0x04 fota_init ────────────────────────►│
│ │ 初始化 ctx
│ │
│── 0x05 fota_write (chunk 1, ≤1500B) ─────►│
│ ◄──── (从机写 flash) ────────────────────│
│ │
│── 0x05 fota_write (chunk 2) ─────────────►│
│ ◄──── (从机写 flash) ────────────────────│
│ │
│ ... (多次, 直至整个升级包传完) │
│ │
│── 0x06 fota_done ────────────────────────►│
│ ◄──── (校验 + 写入最终位置, ≥1s) ────────│
│ │
│── 0x07 fota_end ─────────────────────────►│
│ ◄──── (清理 ctx) ────────────────────────│
│ │
│── 重启从机 (例如 cmd 0x03) ──────────────►│
│ │ 升级生效
各指令详细定义
fota_init (0x04)
初始化 FOTA 上下文. 在执行其他 FOTA 指令之前, 必须先执行本指令.
| 项目 | 值 |
|---|---|
| cmd | 0x04 |
| data | 无 |
fota_write (0x05)
传输实际的升级包数据, 二进制形式. 每次传输不超过 1500 字节.
| 项目 | 值 |
|---|---|
| cmd | 0x05 |
| data | 升级包的二进制数据, 单次长度 ≤ 1500 字节 |
注意: 鉴于各平台在写入 flash 时可能冗余, 调用方应考虑命令执行的耗时, 等待从机就绪再发送下一个包. 建议在两次 write 之间至少留数十毫秒, 或订阅从机的 ready 事件.
fota_done (0x06)
当数据传输完成, 使用本指令通知被调用方数据已经完成.
| 项目 | 值 |
|---|---|
| cmd | 0x06 |
| data | 无 |
注意: 该步骤通常包含更新数据的校验, 耗时较长, 调用方应预留 1 秒以上, 等待执行完毕.
fota_end (0x07)
结束 FOTA 流程, 通知被调用者清理 FOTA 上下文.
| 项目 | 值 |
|---|---|
| cmd | 0x07 |
| data | 无 |
约束: 只能在执行 "通知传输完成" (0x06) 之后执行. 执行完成后, 可通知设备重启 (例如发送 cmd 0x03), 在重启过程中设备完成自身升级.
Lua 调用示例
-- 异步远程升级, 1-2 分钟
airlink.sfota("/path/to/upgrade.bin")
-- 也可以手动控制:
-- (内部依次调用 fota_init / fota_write* / fota_done / fota_end)