Matter OTA 是一个允许 Matter fabric 中的 Matter 设备更新其固件的过程。 出于安全原因,Matter 核心规范要求每个设备都实现固件更新方法。 Matter OTA 提供了一种满足此要求的便捷方式。
在此过程中,推荐软件镜像由另一个 Matter 节点提供,该节点获取有关映像的信息并从集中且可靠的来源下载。 下载是通过特殊的传输协议进行的,并且需要用户同意才能将图像应用于目标 Matter 设备。
涉及到角色
-
OTA Requestor
任何将要更新其固件的 Matter 设备。 此角色对应于 OTA 请求者设备类型,该设备类型实现 OTA 软件更新提供程序群集的客户端角色和 OTA 软件更新请求程序群集的服务器角色。
OTA Requestor
只能从OTA Provider
处接收有关可用软件更新的信息。 因此,它可能会实现一种机制,以发现提供商并使用强制轮询机制定期向 OTA Provider查询新软件映像。 但是,它也可以在 Matter 网络调试期间从commissioner那里接收有关 OTA Provider的信息.OTA Requestor通常在配件上实现。
-
OTA Provider
为 OTA 更新提供镜像的设备。 此角色对应于 OTA 提供程序设备类型,该设备类型实现 OTA 软件更新提供程序群集的服务器角色,以及 OTA 软件更新请求程序群集的客户端角色(可选)。 fabric上的任何设备都可以担任此角色,只要它有权访问 Internet 或带有软件映像链接的数据库。
OTA 提供商使用设备制造商提供的任何自定义机制了解新的软件映像。 如果它支持查询
DCL
,它还可以从Matter Distributed Compliance Ledger
中了解新的软件更新。OTA 提供商了解新软件映像后,会将其下载到其内部缓存中。 然后,一旦请求,它就会使用 Matter 的批量数据交换协议 (
BDX
) 将图像发送给 OTA 请求者.OTA 提供商可以在fabric上向 OTA 请求者宣布其存在。 OTA 请求者还可以在调试期间或通过动态发现了解交换矩阵上的 OTA 提供商。
OTA 提供商通常在生态系统提供商的智能家居中心上实施。
Bulk Data Exchange Protocol (BDX)
为了传输软件映像,Matter 使用自己的内部批量数据交换 (BDX) 协议。 其主要目的是促进 Matter 节点之间的数据交换。 该协议基于简单文件传输协议 (TFTP)。 BDX 不要求传输的文件具有任何特定格式,但它允许将任意元数据附加到文件。 用于 OTA 传输时,OTA 提供程序使用 bdx://<node-id>/<file-name>
格式将 URI 发送到 OTA 请求者,其中对应于要接收映像的 OTA 请求者的节点 ID,并且是唯一标识节点上软件映像文件的任意文件路径。
Matter Distributed Compliance Ledger
Matter Distributed Compliance Ledger
(DCL
) 是一个加密安全的数据库,向 Matter 项目的所有贡献者开放。 它充当有关供应商及其设备型号的合规性状态的信息以及向经过验证的 CSA 成员提供供应商设备元数据的事实来源。 作为设备制造商,您应该在将设备推向市场之前将有关设备的信息添加进去。 如果不执行此步骤,Matter 生态系统可能不允许将设备调试到家庭网络中。
需要满足的条件
- OTA 请求者和 OTA 提供程序必须是同一fabric的成员。
- OTA 请求者必须知晓 OTA 提供商。
- 软件镜像源必须可供 OTA 提供商使用,例如 DCL。
- 软件镜像的版本必须比 OTA 请求者上当前使用的固件版本更新。
- OTA 请求者需要轮询定期的向 OTA 提供商查询新软件映像。
升级的流程图
Matter OTA 镜像下载始终在后台进行,不会影响设备的正常运行。
软件镜像传输的格式信息
在 Matter OTA 过程中传输的软件镜像必须满足特定的结构要求,才能正确传输和应用。
Matter OTA 的所有软件映像都必须包含标准化标头,OTA 提供商在将镜像发送给 OTA 请求者之前使用该标头来验证映像。 标头包含多种类型的信息,包括软件版本、Vendor ID 和Product ID。
软件映像必须使用固定编码,并且必须包含下表中列出的必填字段。
Field name | Type | Characteristics | Description |
---|---|---|---|
FileIdentifier |
uint32 | Fixed-width, little-endian-encoded, unsigned.。 | 在 OTA 映像文件的开头标识该文件。 |
TotalSize |
uint64 | 文件的总大小(以字节为单位) | |
HeaderSize |
uint32 | TLV 编码的标头字段的总大小 | |
Header |
TLV | TLV encoding type and value. | 有关更多信息,请参阅 Matter Core Specification 的第 11.20.2.4 节。 |
Payload |
N/A | Software image contents |
Tag-Length-Value (TLV) 是一种用于在字节字符串中对简单结构化数据进行编码的格式。