0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Telink Python脚本生成工厂数据的步骤介绍

泰凌微电子 来源:泰凌微电子 2024-03-27 10:13 次阅读

工厂数据是在制造过程中写入非易失性存储器的一组设备参数

所有的工厂数据参数都受保护,以避免被软件修改。在设备使用周期内,固件的数据参数集必须保持不变。在生成固件时,除了某些厂商定义的情况,必须确保在设备固件更新或恢复出厂设置期间,工厂数据不会被重写或覆盖。

在生成固件的时候,可以用多种方式实现Matter工厂数据,只要保证最终的 HEX/BIN 文件包含工厂数据组件表中定义的所有强制要求的组件。

在本次分享中,我们描述了一种由我们的平台维护者创建的工厂数据集的实现方式。在完成后,将得到一个包含 `CBOR` 格式的工厂数据分区的十六进制和二进制文件。

1

工厂数据组件表和数据格式

工厂数据参数集包括不同类型的信息,例如设备证书、加密密钥、设备标识符,以及硬件等等。所有的这些参数都是特定于厂商的,并且在制造过程中,必须保存到设备的持久性存储器中。工厂数据参数将会在设备启动时被读取,然后可以被用在 Matter 协议栈和用户应用程序中(例如在配网过程中)。下表列出了工厂数据集中包含的参数:

4f82a684-ebdb-11ee-a297-92fbcf53809c.png

工厂数据集需要被写入到Matter设备的闪存中,所以在我们的示例中,工厂数据集以 `CBOR` 格式表示,并存储在十六进制或二进制文件中。然后,该文件将被烧录到设备上。

工厂数据集的参数包括强制参数和可选参数:

必须始终提供强制性参数,因为设备在进行配网进入Matter网络时需要它们。

可选参数可用于开发和测试目的。例如,用户数据参数包含了特定制造商所需要的且不包含在强制性参数中的所有数据。

在工厂数据集中,使用了以下格式:

`uint16` 和 `uint32` -- 这些是分别表示两字节长度无符号整数,和四字节长度无符号整数的数字格式。此值以大端顺序存储在十六进制文件中`Byte string` -- 该参数表示在0到255之间(包括255)的整数序列,没有任何编码。由于JSON格式不允许使用字节字符串,因此将 `hex:` 前缀添加到参数中,并将其转换为十六进制字符串。

`ASCII string` 是ASCII编码中的字符串表示形式,没有空终止。

`ISO 8601` 格式是一种日期格式,表示以`YYYY-MM-DD`或`YYYYMMDD`格式提供的日期。

存储在工厂数据中的所有证书都以X.509格式提供。

2

启用工厂数据支持

在所有的 Telink 示例中,要开始使用存储在闪存和 Telink 平台中的工厂数据和 Telink 平台的 Factory Data Provider,请使用以下编译选项构建一个示例:

1、westbuild---DCONFIG_CHIP_FACTORY_DATA=y

3

生成工厂数据

本节介绍使用以下 Telink Python 脚本生成工厂数据的步骤。

检查和安装Matter依赖项

在使用生成器工具之前,请确保已具备以下工具。

CHIP Certificate Tool

SPAKE2P Parameters Tool

chip-tool

安装的详细描述:

使用以下命令在 `path/to/connectedhomeip/build/out/host` 生成 chip-tool, spake2p 和chip-cert

cdpath/to/connectedhomeip

sourcescripts/activate.sh

gngenbuild/out/host

ninja-Cbuild/out/host

在$PATH 中加入工具路径

exportPATH="$PATH:path/to/connectedhomeip/build/out/host"

在设备固件上准备工厂数据分区

工厂数据分区是设备持久存储中存储工厂数据集的区域。这个区域在 DeviceTrees 文件里进行配置。

对于 Matter v1.0-branch 分支,配置文件在Zephyr工程中,路径为:`zephyrproject/zephyr/boards/riscv/tlsr9518adk80d/tlsr9518adk80d.dts`。

对于 Matter v1.1-branch 分支,配置文件在Matter工程中,路径为:`connectedhomeip/src/platform/telink/tlsr9518adk80d.overlay`。

对于 Matter master 分支,配置文件在Matter工程中。不过,将对分区的声明从 `tlsr9518adk80d.overlay` 中提取出来,分别写作 `1m_flash.overlay`,`2m_flash.overlay`,和 `4m_flash.overlay`。那么,可以根据所选的芯片的 Flash 尺寸,去选择合适的配置文件。

若要准备一个客制化的支持工厂数据的示例,请在 `tlsr9518adk80d.dts`,`tlsr9518adk80d.overlay` 或 `Xm_flash.overlay` 文件中添加或修改一个名为 `factory-data` 的分区。分区大小应该是一个 flash page 的倍数(单个 page 大小等于 4kB)。

脚本使用

若要使用此脚本,请完成以下步骤:

1、进入 `connectedhomeip` 根目录。

2、使用 `-h` 选项运行脚本,以查看所有可能的选项:

pythonscripts/tools/telink/mfg_tool.py-h

3、准备一个参数列表:

填写所有强制性参数:

--serial-num--vendor-id,--product-id,--vendor-name,--product-name,--mfg-date,--hw-ver,--hw-ver-str,--enable-rotating-device-id,--spake2-path,--chip-tool-path,--chip-cert-path,--offset,--size

添加输出文件路径:

--output

添加证书声明路径(必选):

-cd

指定使用哪个证书:

用户:

--dac-cert

--dac-key

--cert

--key

--pai

生成DAC和PAI:

--cert

--key

--paa

使用以下选项之一为轮换设备 ID 添加新的唯一 ID:

提供一个已存在的 ID:

--rdid--uid

生成一个新的 ID 并提供:

--enable-rotating-device-id

(可选)指定自己的密码:

--passcode

(可选)指定自己的鉴别码:

--discriminator

(可选)添加覆盖现有输出文件的请求:

--overwrite

指定分区偏移量和大小:

--offset

--size

这个命令中:

是设备的持久存储区域中的地址,分区数据集将存储在其中。

是设备持久存储区域中分区的大小。根据这个值检查新数据,看它的大小是否适合。

重要提示:

对 Matter v1.0-branch 分支使用:

--offset0xf4000--size0x1000

对 Matter ***v1.1-branch*** 分支使用:

--offset0x104000--size0x1000

最新的 Matter ***master*** 分支(2MB flash)使用:

--offset0x107000--size0x1000

使用已准备好的参数列表运行该脚本

1、python3mfg_tool.py

例如,对Python脚本的最终调用看起来类似于下面的用法:

python3scripts/tools/telink/mfg_tool.py

--vendor-id0xFFF2--product-id0x8001

--serial-numAABBCCDDEEFF11223344556677889900

--vendor-name"TelinkSemiconductor"

--product-name"not-specified"

--mfg-date2022-12-12

--hw-ver1

--hw-ver-str"prerelase"

--enable-rotating-device-id

--pai

--keycredentials/test/attestation/Chip-Test-PAI-FFF2-8001-Key.pem

--certcredentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.pem

-cdcredentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der

--spake2-pathbuild/out/host/spake2p

--chip-tool-pathbuild/out/host/chip-tool

--chip-cert-pathbuild/out/host/chip-cert

--offset0x107000--size0x1000

--out./factory_data_for_2mb_flash

作为上述示例的结果,将会生成以下文件:

4f9896c4-ebdb-11ee-a297-92fbcf53809c.png

可选示例/

生成多个工厂分区数据

[可选参数 :--count]

python3scripts/tools/telink/mfg_tool.py--count2-v0xFFF2-p0x8001

--serial-numAABBCCDDEEFF11223344556677889900

--vendor-name"TelinkSemiconductor"

--product-name"not-specified"

--mfg-date2022-12-02

--hw-ver1

--hw-ver-str"prerelase"

--enable-rotating-device-id

--pai

--keycredentials/test/attestation/Chip-Test-PAI-FFF2-8001-Key.pem

--certcredentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.pem

-cdcredentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der

--spake2-pathbuild/out/host/spake2p

--chip-tool-pathbuild/out/host/chip-tool

--chip-cert-pathbuild/out/host/chip-cert

--offset0x107000--size0x1000

--out./factory_data_for_2mb_flash

作为上述示例的结果,将会生成以下文件:

4fb07956-ebdb-11ee-a297-92fbcf53809c.png

*注意:默认情况下,生成的文件不能覆盖现有输出目录。如果想要允许覆盖,请将 `--overwrite` 选项添加到 Python 脚本的参数列表中。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    792

    浏览量

    41592
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84439
  • 非易失性存储器

    关注

    0

    文章

    107

    浏览量

    23420

原文标题:【技术专栏】Matter工厂数据使用介绍(一)

文章出处:【微信号:telink-semi,微信公众号:泰凌微电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于Python脚本的R语言的函数

    本文介绍了采用创建一个Python脚本,用该脚本模仿R风格的函数的方法来方便地进行统计。 是用R语言还是用Python语言?这是一个旷日持久
    的头像 发表于 10-12 09:33 2076次阅读
    基于<b class='flag-5'>Python</b><b class='flag-5'>脚本</b>的R语言的函数

    我用labview调用matlab脚本如何保存生成数据向量?

    我用labview调用matlab脚本,想保存matlab脚本生成数据向量,怎么实现?
    发表于 11-12 15:14

    我用labview调用matlab脚本,想保存matlab脚本生成数据向量,怎么实现?

    我用labview调用matlab脚本,想保存matlab脚本生成数据向量,怎么实现?
    发表于 02-20 10:07

    vision的脚本生成vi,vi里面是空白的

    我用vision2016的脚本生成labview2013的vi,生成的vi里面是空白的,什么都没有,哪位大神可以帮忙解释一下,十分感谢
    发表于 08-03 16:30

    如何将RK 3128脚本生成固件?

    如何将RK 3128脚本生成固件?
    发表于 03-04 07:03

    Telink的TLSR9系列芯片OpenHarmony开发环境配置

    bash中输入下列命令,查看python版本:python3 --version如果不低于3.8,可以忽略第二步的重新安装,从第三步的设置开始。如果Python版本低于3.8,不建议直接升级,请按照如下
    发表于 07-05 14:31

    如何为PyInstaller命令行添加OpenVINO依赖性,从OpenVINO python脚本生成功能 .exe文件?

    执行此命令行以从 OpenVINO python 脚本创建 build.exe 文件: pyinstaller --onefile --add-data \"D
    发表于 08-15 07:16

    如何在 IIS 中执行 Python 脚本

    如何在 IIS 中执行 Python 脚本 Python 是一种解释脚本语言,概念类似 Microsoft Visual Basic Scripting Edition (VBSc
    发表于 02-23 15:13 1245次阅读

    如何使html网页与python脚本进行通信

    现在运行python脚本并转到http://localhost/或http://localhost/并开始按下按钮,您应该会在python脚本上看到输入。
    的头像 发表于 11-04 10:12 7840次阅读

    基于生成器的图像分类对抗样本生成模型

    现有基于生成器的对抗样本生成模型相比基于迭代修改原图的算法可有效降低对抗样本的构造时间,但其生成的对抗样本与原图在感知上具有明显差异,人眼易察觉。该模型旨在增加对抗样本与原图在人眼观察感知上的相似性
    发表于 04-07 14:56 2次下载
    基于<b class='flag-5'>生成</b>器的图像分类对抗样<b class='flag-5'>本生成</b>模型

    受控文本生成模型的一般架构及故事生成任务等方面的具体应用

    来自:哈工大讯飞联合实验室 本期导读:本文是对受控文本生成任务的一个简单的介绍。首先,本文介绍了受控文本生成模型的一般架构,点明了受控文本生成
    的头像 发表于 10-13 09:46 3474次阅读
    受控文<b class='flag-5'>本生成</b>模型的一般架构及故事<b class='flag-5'>生成</b>任务等方面的具体应用

    Python怎么玩转JS脚本

    本项目旨在让大家了解如何用Python来执行JS脚本,其主要目的是在进行数据 分析时,需要利用爬虫获取数据,有时会遇到JS混淆加密反爬取难点,此时我们需 要获取网页JS加密代码将其
    的头像 发表于 02-23 16:26 1061次阅读
    <b class='flag-5'>Python</b>怎么玩转JS<b class='flag-5'>脚本</b>

    如何在Linux命令行中运行Python脚本

    Python 脚本。 在本文中,我们将详细介绍如何在 Linux 命令行中运行 Python 脚本。我们将讨论以下主题:
    的头像 发表于 05-12 14:49 1655次阅读

    如何使用Python脚本调试赛灵思PCIe设计?

    现在,您不仅可以使用 Python 脚本执行调试分析,更重要的是,借由 Vivado ILA 所生成的 ILA 文件可以进一步简化此操作。通过将 *.ila 扩展名重命名为 *.zip 然后将
    的头像 发表于 06-26 09:20 1201次阅读
    如何使用<b class='flag-5'>Python</b><b class='flag-5'>脚本</b>调试赛灵思PCIe设计?

    如何使用 Llama 3 进行文本生成

    torch 使用Hugging Face的pipeline进行文本生成python复制代码 from tr
    的头像 发表于 10-27 14:21 211次阅读