接上一篇分享,我們將使用工廠(chǎng)數(shù)據(jù)構(gòu)建一個(gè)示例應(yīng)用,討論如何工廠(chǎng)數(shù)據(jù)以及大致介紹如何使用自己的工廠(chǎng)數(shù)據(jù)的實(shí)現(xiàn)。
1
使用工廠(chǎng)數(shù)據(jù)構(gòu)建一個(gè)示例應(yīng)用
您可以使用上述步驟手動(dòng)生成工廠(chǎng)數(shù)據(jù)集,也可以使用 Telink 平臺(tái)構(gòu)建系統(tǒng),該系統(tǒng)使用 Kconfig 選項(xiàng)自動(dòng)創(chuàng)建工廠(chǎng)數(shù)據(jù)內(nèi)容。
要啟用自動(dòng)生成工廠(chǎng)數(shù)據(jù)集,請(qǐng)轉(zhuǎn)到示例應(yīng)用的目錄,并使用以下選項(xiàng)構(gòu)建示例應(yīng)用:
westbuild---DCONFIG_CHIP_FACTORY_DATA=y-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
或者,您還可以將 `CONFIG_CHIP_FACTORY_DATA_BUILD=y` 的Kconfig設(shè)置添加到示例應(yīng)用的 `prj.conf` 文件中。
注意,如果這一步遇到了 ModuleNotFoundError 的報(bào)錯(cuò),請(qǐng)?jiān)?connectedhomeip 目錄下執(zhí)行以下命令更新依賴(lài)項(xiàng)后,再次嘗試構(gòu)建:
.environment/pigweed-venv/bin/python3-mpipinstall-rscripts/setup/requirements.telink.txt
構(gòu)建成功后會(huì)得到開(kāi)啟了工廠(chǎng)數(shù)據(jù)分區(qū)的應(yīng)用的固件,和獨(dú)立的工廠(chǎng)數(shù)據(jù)集二進(jìn)制文件,燒錄時(shí)需要分別燒錄它們。
每個(gè)工廠(chǎng)數(shù)據(jù)參數(shù)都有一個(gè)默認(rèn)值。這些在Kconfig文件中有描述。要為工廠(chǎng)數(shù)據(jù)參數(shù)設(shè)置一個(gè)新值,可以通過(guò)將其作為構(gòu)建參數(shù)列表提供,或使用交互式 Kconfig 界面來(lái)完成。
1
提供工廠(chǎng)數(shù)據(jù)參數(shù)作為生成參數(shù)列表
這種提供工廠(chǎng)數(shù)據(jù)的方式可以與第三方構(gòu)建腳本一起使用,因?yàn)樗皇褂靡粋€(gè)命令。可以通過(guò)west命令的附加選項(xiàng)開(kāi)啟工廠(chǎng)數(shù)據(jù)功能:
westbuild---DCONFIG_CHIP_FACTORY_DATA=y--DCONFIG_CHIP_FACTORY_DATA_BUILD=y--DCONFIG_CHIP_DEVICE_DISCRIMINATOR=0xF11
或者,也可以將相關(guān)的 Kconfig 選項(xiàng)行添加到示例應(yīng)用的 `prj.conf` 文件中。
2
分開(kāi)燒錄應(yīng)用固件和工廠(chǎng)數(shù)據(jù)集
我們的應(yīng)用固件和工廠(chǎng)數(shù)據(jù)集都是二進(jìn)制 BIN 文件,可以使用 BDT 工具和 Telink burning key 燒錄到設(shè)備的Flash指中。
燒錄時(shí)使用 Telink BDT 工具的多地址燒錄即可:
選擇 Tool 中的 Multi-address download
此處以 v1.1-branch 分支上的固件為例,工廠(chǎng)數(shù)據(jù)的偏移值是 `0x104000`:
2
設(shè)置工廠(chǎng)數(shù)據(jù)
將獨(dú)立的工廠(chǎng)數(shù)據(jù)集,合并到示例應(yīng)用的固件之中的一種方法,是使用在[使用工廠(chǎng)數(shù)據(jù)構(gòu)建一個(gè)示例應(yīng)用](#使用工廠(chǎng)數(shù)據(jù)構(gòu)建一個(gè)示例應(yīng)用)中描述的Telink平臺(tái)構(gòu)建系統(tǒng),并使用附加下面的選項(xiàng)構(gòu)建示例應(yīng)用 `-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y`:
westbuild--
-DCONFIG_CHIP_FACTORY_DATA=y
-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y
為了更好地理解以上設(shè)置項(xiàng)所對(duì)應(yīng)的需求場(chǎng)景,可以參見(jiàn)下面的表格:
您還可以構(gòu)建一個(gè)使用自動(dòng)生成的新CD、DAC和PAI證書(shū)的示例應(yīng)用。新生成的證書(shū)將被自動(dòng)添加到工廠(chǎng)數(shù)據(jù)集里。要生成新證書(shū),通過(guò)使用附加選項(xiàng)構(gòu)建示例應(yīng)用來(lái)禁用默認(rèn)證書(shū) `-DCHIP_FACTORY_DATA_USE_DEFAULT_CERTS=n`:
westbuild--
-DCONFIG_CHIP_FACTORY_DATA=y
-DCONFIG_CHIP_FACTORY_DATA_BUILD=y
-DCONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE=y
-DCONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS=n
注意:要使用Telink平臺(tái)構(gòu)建系統(tǒng)生成新的證書(shū),您需要系統(tǒng)變量PATH中的 `chip-cert` 可執(zhí)行文件。要了解如何獲取 `chip-cert`,請(qǐng)參考[構(gòu)建matter工具](#構(gòu)建-matter-工具)中的步驟,并將新構(gòu)建的可執(zhí)行文件添加到系統(tǒng)變量PATH中。Cmake構(gòu)建系統(tǒng)將自動(dòng)找到這個(gè)可執(zhí)行文件。
然后,在示例應(yīng)用目錄中,可以使用生成的一個(gè)二進(jìn)制固件,便可以同時(shí)寫(xiě)入應(yīng)用固件和新生成的工廠(chǎng)數(shù)據(jù)。
3
使用自己的工廠(chǎng)數(shù)據(jù)實(shí)現(xiàn)
上面介紹的工廠(chǎng)數(shù)據(jù)生成過(guò)程僅是對(duì)Telink平臺(tái)有效的示例應(yīng)用。根據(jù)用途和格式的不同,可以用不同的方式從設(shè)備的閃存中讀取工廠(chǎng)數(shù)據(jù)集。在Telink示例中,工廠(chǎng)數(shù)據(jù)以 `CBOR` 格式存儲(chǔ)。
還可以創(chuàng)建一個(gè)包含任意格式的所有工廠(chǎng)數(shù)據(jù)組件表的HEX文件,然后實(shí)現(xiàn)一個(gè)解析器來(lái)讀取所有參數(shù)并將它們傳遞給提供程序。每個(gè)制造商都可以通過(guò)在Matter棧中實(shí)現(xiàn)解析器和工廠(chǎng)數(shù)據(jù)訪(fǎng)問(wèn)器來(lái)自行實(shí)現(xiàn)工廠(chǎng)數(shù)據(jù)集。
使用 Telink工廠(chǎng)數(shù)據(jù)提供程序(FactoryDataProvider.h)和工廠(chǎng)數(shù)據(jù)解析器(FactoryDataParser.h)作為示例。設(shè)備使用工廠(chǎng)數(shù)據(jù)解析器(FactoryDataParser.h)讀取輸出原始數(shù)據(jù),將其解碼并存儲(chǔ)在 `FactoryData` 結(jié)構(gòu)中。工廠(chǎng)數(shù)據(jù)提供程序(FactoryDataProvider.h)實(shí)現(xiàn)使用這個(gè)解析器獲取所有需要的工廠(chǎng)數(shù)據(jù)參數(shù),并將它們提供給Matter核心。
在Telink示例中, `FactoryDataProvider`是一個(gè)模板類(lèi),繼承自`DeviceAttestationCredentialsProvider`, `CommissionableDataProvider`, 和 `DeviceInstanceInfoProvider` 類(lèi)。
自定義實(shí)現(xiàn)必須繼承這些類(lèi)并實(shí)現(xiàn)它們的功能來(lái)從設(shè)備的閃存中獲取所有工廠(chǎng)數(shù)據(jù)集。這些類(lèi)是虛類(lèi),需要由派生類(lèi)重寫(xiě)。
要覆蓋繼承的類(lèi),請(qǐng)完成以下步驟:
1、覆蓋以下方法:
//=====MembersfunctionsthatimplementtheDeviceAttestationCredentialsProvider
CHIP_ERRORGetCertificationDeclaration(MutableByteSpan&outBuffer)override;
CHIP_ERRORGetFirmwareInformation(MutableByteSpan&out_firmware_info_buffer)override;
CHIP_ERRORGetDeviceAttestationCert(MutableByteSpan&outBuffer)override;
CHIP_ERRORGetProductAttestationIntermediateCert(MutableByteSpan&outBuffer)override;
CHIP_ERRORSignWithDeviceAttestationKey(constByteSpan&messageToSign,MutableByteSpan&outSignBuffer)override;
//=====MembersfunctionsthatimplementtheCommissionableDataProvider
CHIP_ERRORGetSetupDiscriminator(uint16_t&setupDiscriminator)override;
CHIP_ERRORSetSetupDiscriminator(uint16_tsetupDiscriminator)override;
CHIP_ERRORGetSpake2pIterationCount(uint32_t&iterationCount)override;
CHIP_ERRORGetSpake2pSalt(MutableByteSpan&saltBuf)override;
CHIP_ERRORGetSpake2pVerifier(MutableByteSpan&verifierBuf,size_t&verifierLen)override;
CHIP_ERRORGetSetupPasscode(uint32_t&setupPasscode)override;
CHIP_ERRORSetSetupPasscode(uint32_tsetupPasscode)override;
//=====MembersfunctionsthatimplementtheDeviceInstanceInfoProvider
CHIP_ERRORGetVendorName(char*buf,size_tbufSize)override;
CHIP_ERRORGetVendorId(uint16_t&vendorId)override;
CHIP_ERRORGetProductName(char*buf,size_tbufSize)override;
CHIP_ERRORGetProductId(uint16_t&productId)override;
CHIP_ERRORGetSerialNumber(char*buf,size_tbufSize)override;
CHIP_ERRORGetManufacturingDate(uint16_t&year,uint8_t&month,uint8_t&day)override;
CHIP_ERRORGetHardwareVersion(uint16_t&hardwareVersion)override;
CHIP_ERRORGetHardwareVersionString(char*buf,size_tbufSize)override;
CHIP_ERRORGetRotatingDeviceIdUniqueId(MutableByteSpan&uniqueIdSpan)override;
2、將新創(chuàng)建的解析器和提供程序文件移動(dòng)到項(xiàng)目目錄中。
3、把文件添加到 `CMakeList.txt` 中。
4、禁用工廠(chǎng)數(shù)據(jù)提供程序的默認(rèn)實(shí)現(xiàn)和Telink實(shí)現(xiàn),以開(kāi)始使用您自己的工廠(chǎng)數(shù)據(jù)解析器和提供程序?qū)崿F(xiàn)。這可以通過(guò)以下方式之一來(lái)實(shí)現(xiàn):
把Kconfig設(shè)置 `CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y` 加到 `prj.conf` 文件中。
用以下選項(xiàng)構(gòu)建一個(gè)示例:
westbuild---DCONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y
-
FlaSh
+關(guān)注
關(guān)注
10文章
1663瀏覽量
150978 -
二進(jìn)制
+關(guān)注
關(guān)注
2文章
803瀏覽量
42149 -
泰凌微
+關(guān)注
關(guān)注
7文章
168瀏覽量
11201
原文標(biāo)題:【技術(shù)專(zhuān)欄】Matter工廠(chǎng)數(shù)據(jù)使用介紹(二)
文章出處:【微信號(hào):telink-semi,微信公眾號(hào):泰凌微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是Matter?為什么使用Matter?Matter的主要內(nèi)容干貨分享BF2 Matter網(wǎng)絡(luò)技術(shù)應(yīng)用

Matter生態(tài)中Multi-Fabric使用介紹

Nordic的matter是如何做的
Matter采用基于標(biāo)準(zhǔn)的無(wú)線(xiàn)技術(shù)
matter芯片選型指南
工廠(chǎng)供電 第2(二)版

如何將非Matter設(shè)備橋接到Matter網(wǎng)絡(luò)
Matter協(xié)議是什么?IoT時(shí)代Matter能解決什么問(wèn)題?
Matter的數(shù)據(jù)模型和開(kāi)發(fā)
Matter開(kāi)發(fā)介紹

詳解:如何獲得Matter認(rèn)證?

Matter協(xié)議是什么?Matter協(xié)議詳細(xì)介紹
Matter最新TestHarness工具使用介紹(一)

Matter最新Test Harness工具使用介紹(二)

評(píng)論