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

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

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

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

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

評(píng)論