工廠數(shù)據(jù)是在制造過程中寫入非易失性存儲器的一組設(shè)備參數(shù)。
所有的工廠數(shù)據(jù)參數(shù)都受保護,以避免被軟件修改。在設(shè)備使用周期內(nèi),固件的數(shù)據(jù)參數(shù)集必須保持不變。在生成固件時,除了某些廠商定義的情況,必須確保在設(shè)備固件更新或恢復(fù)出廠設(shè)置期間,工廠數(shù)據(jù)不會被重寫或覆蓋。
在生成固件的時候,可以用多種方式實現(xiàn)Matter工廠數(shù)據(jù),只要保證最終的 HEX/BIN 文件包含工廠數(shù)據(jù)組件表中定義的所有強制要求的組件。
在本次分享中,我們描述了一種由我們的平臺維護者創(chuàng)建的工廠數(shù)據(jù)集的實現(xiàn)方式。在完成后,將得到一個包含 `CBOR` 格式的工廠數(shù)據(jù)分區(qū)的十六進制和二進制文件。
1
工廠數(shù)據(jù)組件表和數(shù)據(jù)格式
工廠數(shù)據(jù)參數(shù)集包括不同類型的信息,例如設(shè)備證書、加密密鑰、設(shè)備標(biāo)識符,以及硬件等等。所有的這些參數(shù)都是特定于廠商的,并且在制造過程中,必須保存到設(shè)備的持久性存儲器中。工廠數(shù)據(jù)參數(shù)將會在設(shè)備啟動時被讀取,然后可以被用在 Matter 協(xié)議棧和用戶應(yīng)用程序中(例如在配網(wǎng)過程中)。下表列出了工廠數(shù)據(jù)集中包含的參數(shù):
工廠數(shù)據(jù)集需要被寫入到Matter設(shè)備的閃存中,所以在我們的示例中,工廠數(shù)據(jù)集以 `CBOR` 格式表示,并存儲在十六進制或二進制文件中。然后,該文件將被燒錄到設(shè)備上。
工廠數(shù)據(jù)集的參數(shù)包括強制參數(shù)和可選參數(shù):
必須始終提供強制性參數(shù),因為設(shè)備在進行配網(wǎng)進入Matter網(wǎng)絡(luò)時需要它們。
可選參數(shù)可用于開發(fā)和測試目的。例如,用戶數(shù)據(jù)參數(shù)包含了特定制造商所需要的且不包含在強制性參數(shù)中的所有數(shù)據(jù)。
在工廠數(shù)據(jù)集中,使用了以下格式:
`uint16` 和 `uint32` -- 這些是分別表示兩字節(jié)長度無符號整數(shù),和四字節(jié)長度無符號整數(shù)的數(shù)字格式。此值以大端順序存儲在十六進制文件中`Byte string` -- 該參數(shù)表示在0到255之間(包括255)的整數(shù)序列,沒有任何編碼。由于JSON格式不允許使用字節(jié)字符串,因此將 `hex:` 前綴添加到參數(shù)中,并將其轉(zhuǎn)換為十六進制字符串。
`ASCII string` 是ASCII編碼中的字符串表示形式,沒有空終止。
`ISO 8601` 格式是一種日期格式,表示以`YYYY-MM-DD`或`YYYYMMDD`格式提供的日期。
存儲在工廠數(shù)據(jù)中的所有證書都以X.509格式提供。
2
啟用工廠數(shù)據(jù)支持
在所有的 Telink 示例中,要開始使用存儲在閃存和 Telink 平臺中的工廠數(shù)據(jù)和 Telink 平臺的 Factory Data Provider,請使用以下編譯選項構(gòu)建一個示例:
1、westbuild---DCONFIG_CHIP_FACTORY_DATA=y
3
生成工廠數(shù)據(jù)
本節(jié)介紹使用以下 Telink Python 腳本生成工廠數(shù)據(jù)的步驟。
檢查和安裝Matter依賴項
在使用生成器工具之前,請確保已具備以下工具。
CHIP Certificate Tool
chip-tool
安裝的詳細(xì)描述:
使用以下命令在 `path/to/connectedhomeip/build/out/host` 生成 chip-tool, spake2p 和chip-cert
cdpath/to/connectedhomeip
gngenbuild/out/host
ninja-Cbuild/out/host
在$PATH 中加入工具路徑
exportPATH="$PATH:path/to/connectedhomeip/build/out/host"
在設(shè)備固件上準(zhǔn)備工廠數(shù)據(jù)分區(qū)
工廠數(shù)據(jù)分區(qū)是設(shè)備持久存儲中存儲工廠數(shù)據(jù)集的區(qū)域。這個區(qū)域在 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工程中。不過,將對分區(qū)的聲明從 `tlsr9518adk80d.overlay` 中提取出來,分別寫作 `1m_flash.overlay`,`2m_flash.overlay`,和 `4m_flash.overlay`。那么,可以根據(jù)所選的芯片的 Flash 尺寸,去選擇合適的配置文件。
若要準(zhǔn)備一個客制化的支持工廠數(shù)據(jù)的示例,請在 `tlsr9518adk80d.dts`,`tlsr9518adk80d.overlay` 或 `Xm_flash.overlay` 文件中添加或修改一個名為 `factory-data` 的分區(qū)。分區(qū)大小應(yīng)該是一個 flash page 的倍數(shù)(單個 page 大小等于 4kB)。
腳本使用
若要使用此腳本,請完成以下步驟:
1、進入 `connectedhomeip` 根目錄。
2、使用 `-h` 選項運行腳本,以查看所有可能的選項:
pythonscripts/tools/telink/mfg_tool.py-h
3、準(zhǔn)備一個參數(shù)列表:
填寫所有強制性參數(shù):
--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
使用以下選項之一為輪換設(shè)備 ID 添加新的唯一 ID:
提供一個已存在的 ID:
--rdid--uid
生成一個新的 ID 并提供:
--enable-rotating-device-id
(可選)指定自己的密碼:
--passcode
(可選)指定自己的鑒別碼:
--discriminator
(可選)添加覆蓋現(xiàn)有輸出文件的請求:
--overwrite
指定分區(qū)偏移量和大小:
--offset
--size
這個命令中:
重要提示:
對 Matter v1.0-branch 分支使用:
--offset0xf4000--size0x1000
對 Matter ***v1.1-branch*** 分支使用:
--offset0x104000--size0x1000
對最新的 Matter ***master*** 分支(2MB flash)使用:
--offset0x107000--size0x1000
使用已準(zhǔn)備好的參數(shù)列表運行該腳本
1、python3mfg_tool.py
例如,對Python腳本的最終調(diào)用看起來類似于下面的用法:
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
作為上述示例的結(jié)果,將會生成以下文件:
可選示例/
生成多個工廠分區(qū)數(shù)據(jù)
[可選參數(shù) :--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
作為上述示例的結(jié)果,將會生成以下文件:
*注意:默認(rèn)情況下,生成的文件不能覆蓋現(xiàn)有輸出目錄。如果想要允許覆蓋,請將 `--overwrite` 選項添加到 Python 腳本的參數(shù)列表中。
審核編輯:劉清
-
二進制
+關(guān)注
關(guān)注
2文章
803瀏覽量
42134 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86142 -
非易失性存儲器
+關(guān)注
關(guān)注
0文章
109瀏覽量
23642
原文標(biāo)題:【技術(shù)專欄】Matter工廠數(shù)據(jù)使用介紹(一)
文章出處:【微信號:telink-semi,微信公眾號:泰凌微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于Python腳本的R語言的函數(shù)

我用labview調(diào)用matlab腳本如何保存生成的數(shù)據(jù)向量?
我用labview調(diào)用matlab腳本,想保存matlab腳本生成的數(shù)據(jù)向量,怎么實現(xiàn)?
vision的腳本生成vi,vi里面是空白的
Telink的TLSR9系列芯片OpenHarmony開發(fā)環(huán)境配置
如何為PyInstaller命令行添加OpenVINO依賴性,從OpenVINO python腳本生成功能 .exe文件?
如何在 IIS 中執(zhí)行 Python 腳本
如何使html網(wǎng)頁與python腳本進行通信
基于生成器的圖像分類對抗樣本生成模型

受控文本生成模型的一般架構(gòu)及故事生成任務(wù)等方面的具體應(yīng)用

Python怎么玩轉(zhuǎn)JS腳本

如何在Linux命令行中運行Python腳本
如何使用Python腳本調(diào)試賽靈思PCIe設(shè)計?

評論