跳转至
文档版本: v0.6.1

通过 SDK 升级固件

适用设备

本文档适用于 OpenZilo Q。

使用 Python SDK 发送官方应用固件包,并在设备重启后核对版本。先查询设备功能;固件下载和设备操作见固件升级指南。

以下代码片段使用 import openzilo as sdk;ring 表示已连接的客户端,完整连接示例见快速开始。

固件升级

升级要求

使用官方发行说明指定的 OTA 升级包,并核对设备型号、硬件版本和当前固件版本。SDK 只升级应用固件,不升级引导程序(bootloader)。

update_firmware() 和 ota-update 提供应用固件升级;可通过 openzilo ota-update --help 检查当前安装的命令。它们只处理应用固件升级,不升级 bootloader。升级包需来自官方发布说明,并明确兼容设备型号和起始版本。升级前备份重要录音,停止录音、下载与 IMU 上报,保持电量和连接稳定;调用期间该连接由升级操作独占。

from pathlib import Path

async with sdk.OpenZiloClient(address=ADDRESS) as ring:
    await sdk.get_device_capabilities(ring)
    info = await sdk.update_firmware(
        ring,
        Path("path/to/official-update.bin").read_bytes(),
        version="V2.001.0002.0001",
        sha256="SHA256_FROM_RELEASE",
        expected_model="MODEL_FROM_RELEASE",
        progress=lambda sent, total: print(f"Transferred: {sent}/{total}"),
    )
    print("重启后已确认版本:", info.firmware_version)

路径、SHA-256 和型号都是占位值,需替换为发布说明中的实际值。SDK 原样发送升级包,不解析其中的固件内容。完整可运行示例见 update_firmware.py。

参数 含义
client / firmware 已连接的客户端与完整升级包字节。
version 必填目标版本,须与升级包的完整运行版本一致,例如 V2.001.0002.0000 或 V2.001.0002.0000-prod-1234abcd;也接受 -debug-8位十六进制哈希 后缀。重启后精确匹配,不忽略后缀。设备已运行此版本时拒绝重复升级。
sha256=None 可选的 64 位十六进制 SHA-256;建议传入官方值。校验失败时不发送升级请求。
expected_model=None 可选型号,必须与设备信息中的 model 完全相同。仍需自行确认起始版本兼容。
progress=None 同步回调 (sent, total),单位字节;只反映传输进度。设备请求续传时可能跳过已接收的前缀。
timeout_s=30.0 单次设备检查、传输或重连操作的超时。
total_timeout_s=600.0 升级前的设备检查和传输阶段的总上限。
reboot_timeout_s=90.0 传输确认之后,等待重启、重连和版本核验的总上限。

返回 SystemInfo,来源于设备重启并重连后的查询。SDK 确认设备没有变化、固件版本符合目标后才成功返回;进度到达 100% 或蓝牙断开都不表示升级成功。设备拒绝升级时抛出 DeviceError;超时、通信中断或异常响应分别通过 TimeoutError、TransportError 或 ProtocolError 报告。取消操作不会撤销设备已收到的升级包,失败后应重连读取版本确认状态。

官方发布信息、失败处理见 固件升级指南。