工廠數據是在制造過程中寫入非易失性存儲器的一組設備參數。
所有的工廠數據參數都受保護,以避免被軟件修改。在設備使用周期內,固件的數據參數集必須保持不變。在生成固件時,除了某些廠商定義的情況,必須確保在設備固件更新或恢復出廠設置期間,工廠數據不會被重寫或覆蓋。
在生成固件的時候,可以用多種方式實現Matter工廠數據,只要保證最終的 HEX/BIN 文件包含工廠數據組件表中定義的所有強制要求的組件。
在本次分享中,我們描述了一種由我們的平臺維護者創建的工廠數據集的實現方式。在完成后,將得到一個包含 `CBOR` 格式的工廠數據分區的十六進制和二進制文件。
1
工廠數據組件表和數據格式
工廠數據參數集包括不同類型的信息,例如設備證書、加密密鑰、設備標識符,以及硬件等等。所有的這些參數都是特定于廠商的,并且在制造過程中,必須保存到設備的持久性存儲器中。工廠數據參數將會在設備啟動時被讀取,然后可以被用在 Matter 協議棧和用戶應用程序中(例如在配網過程中)。下表列出了工廠數據集中包含的參數:
工廠數據集需要被寫入到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
chip-tool
安裝的詳細描述:
使用以下命令在 `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"
在設備固件上準備工廠數據分區
工廠數據分區是設備持久存儲中存儲工廠數據集的區域。這個區域在 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
作為上述示例的結果,將會生成以下文件:
可選示例/
生成多個工廠分區數據
[可選參數 :--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
作為上述示例的結果,將會生成以下文件:
*注意:默認情況下,生成的文件不能覆蓋現有輸出目錄。如果想要允許覆蓋,請將 `--overwrite` 選項添加到 Python 腳本的參數列表中。
審核編輯:劉清
-
二進制
+關注
關注
2文章
803瀏覽量
42053 -
python
+關注
關注
56文章
4822瀏覽量
85853 -
非易失性存儲器
+關注
關注
0文章
109瀏覽量
23606
原文標題:【技術專欄】Matter工廠數據使用介紹(一)
文章出處:【微信號:telink-semi,微信公眾號:泰凌微電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
我用labview調用matlab腳本,想保存matlab腳本生成的數據向量,怎么實現?
vision的腳本生成vi,vi里面是空白的
Telink的TLSR9系列芯片OpenHarmony開發環境配置
如何為PyInstaller命令行添加OpenVINO依賴性,從OpenVINO python腳本生成功能 .exe文件?
如何在 IIS 中執行 Python 腳本
如何使html網頁與python腳本進行通信
基于生成器的圖像分類對抗樣本生成模型

受控文本生成模型的一般架構及故事生成任務等方面的具體應用

Python怎么玩轉JS腳本

如何在Linux命令行中運行Python腳本
如何使用Python腳本調試賽靈思PCIe設計?

評論