接上一篇分享,我們將使用工廠數(shù)據(jù)構(gòu)建一個示例應(yīng)用,討論如何工廠數(shù)據(jù)以及大致介紹如何使用自己的工廠數(shù)據(jù)的實現(xiàn)。
1
使用工廠數(shù)據(jù)構(gòu)建一個示例應(yīng)用
您可以使用上述步驟手動生成工廠數(shù)據(jù)集,也可以使用 Telink 平臺構(gòu)建系統(tǒng),該系統(tǒng)使用 Kconfig 選項自動創(chuàng)建工廠數(shù)據(jù)內(nèi)容。
要啟用自動生成工廠數(shù)據(jù)集,請轉(zhuǎn)到示例應(yī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 的報錯,請在 connectedhomeip 目錄下執(zhí)行以下命令更新依賴項后,再次嘗試構(gòu)建:
.environment/pigweed-venv/bin/python3-mpipinstall-rscripts/setup/requirements.telink.txt
構(gòu)建成功后會得到開啟了工廠數(shù)據(jù)分區(qū)的應(yīng)用的固件,和獨立的工廠數(shù)據(jù)集二進制文件,燒錄時需要分別燒錄它們。
每個工廠數(shù)據(jù)參數(shù)都有一個默認(rèn)值。這些在Kconfig文件中有描述。要為工廠數(shù)據(jù)參數(shù)設(shè)置一個新值,可以通過將其作為構(gòu)建參數(shù)列表提供,或使用交互式 Kconfig 界面來完成。
1
提供工廠數(shù)據(jù)參數(shù)作為生成參數(shù)列表
這種提供工廠數(shù)據(jù)的方式可以與第三方構(gòu)建腳本一起使用,因為它只使用一個命令??梢酝ㄟ^west命令的附加選項開啟工廠數(shù)據(jù)功能:
westbuild---DCONFIG_CHIP_FACTORY_DATA=y--DCONFIG_CHIP_FACTORY_DATA_BUILD=y--DCONFIG_CHIP_DEVICE_DISCRIMINATOR=0xF11
或者,也可以將相關(guān)的 Kconfig 選項行添加到示例應(yīng)用的 `prj.conf` 文件中。
2
分開燒錄應(yīng)用固件和工廠數(shù)據(jù)集
我們的應(yīng)用固件和工廠數(shù)據(jù)集都是二進制 BIN 文件,可以使用 BDT 工具和 Telink burning key 燒錄到設(shè)備的Flash指中。
燒錄時使用 Telink BDT 工具的多地址燒錄即可:
選擇 Tool 中的 Multi-address download
此處以 v1.1-branch 分支上的固件為例,工廠數(shù)據(jù)的偏移值是 `0x104000`:
2
設(shè)置工廠數(shù)據(jù)
將獨立的工廠數(shù)據(jù)集,合并到示例應(yīng)用的固件之中的一種方法,是使用在[使用工廠數(shù)據(jù)構(gòu)建一個示例應(yīng)用](#使用工廠數(shù)據(jù)構(gòu)建一個示例應(yīng)用)中描述的Telink平臺構(gòu)建系統(tǒ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è)置項所對應(yīng)的需求場景,可以參見下面的表格:
您還可以構(gòu)建一個使用自動生成的新CD、DAC和PAI證書的示例應(yīng)用。新生成的證書將被自動添加到工廠數(shù)據(jù)集里。要生成新證書,通過使用附加選項構(gòu)建示例應(yīng)用來禁用默認(rèn)證書 `-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平臺構(gòu)建系統(tǒng)生成新的證書,您需要系統(tǒng)變量PATH中的 `chip-cert` 可執(zhí)行文件。要了解如何獲取 `chip-cert`,請參考[構(gòu)建matter工具](#構(gòu)建-matter-工具)中的步驟,并將新構(gòu)建的可執(zhí)行文件添加到系統(tǒng)變量PATH中。Cmake構(gòu)建系統(tǒng)將自動找到這個可執(zhí)行文件。
然后,在示例應(yīng)用目錄中,可以使用生成的一個二進制固件,便可以同時寫入應(yīng)用固件和新生成的工廠數(shù)據(jù)。
3
使用自己的工廠數(shù)據(jù)實現(xiàn)
上面介紹的工廠數(shù)據(jù)生成過程僅是對Telink平臺有效的示例應(yīng)用。根據(jù)用途和格式的不同,可以用不同的方式從設(shè)備的閃存中讀取工廠數(shù)據(jù)集。在Telink示例中,工廠數(shù)據(jù)以 `CBOR` 格式存儲。
還可以創(chuàng)建一個包含任意格式的所有工廠數(shù)據(jù)組件表的HEX文件,然后實現(xiàn)一個解析器來讀取所有參數(shù)并將它們傳遞給提供程序。每個制造商都可以通過在Matter棧中實現(xiàn)解析器和工廠數(shù)據(jù)訪問器來自行實現(xiàn)工廠數(shù)據(jù)集。
使用 Telink工廠數(shù)據(jù)提供程序(FactoryDataProvider.h)和工廠數(shù)據(jù)解析器(FactoryDataParser.h)作為示例。設(shè)備使用工廠數(shù)據(jù)解析器(FactoryDataParser.h)讀取輸出原始數(shù)據(jù),將其解碼并存儲在 `FactoryData` 結(jié)構(gòu)中。工廠數(shù)據(jù)提供程序(FactoryDataProvider.h)實現(xiàn)使用這個解析器獲取所有需要的工廠數(shù)據(jù)參數(shù),并將它們提供給Matter核心。
在Telink示例中, `FactoryDataProvider`是一個模板類,繼承自`DeviceAttestationCredentialsProvider`, `CommissionableDataProvider`, 和 `DeviceInstanceInfoProvider` 類。
自定義實現(xiàn)必須繼承這些類并實現(xiàn)它們的功能來從設(shè)備的閃存中獲取所有工廠數(shù)據(jù)集。這些類是虛類,需要由派生類重寫。
要覆蓋繼承的類,請完成以下步驟:
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)建的解析器和提供程序文件移動到項目目錄中。
3、把文件添加到 `CMakeList.txt` 中。
4、禁用工廠數(shù)據(jù)提供程序的默認(rèn)實現(xiàn)和Telink實現(xiàn),以開始使用您自己的工廠數(shù)據(jù)解析器和提供程序?qū)崿F(xiàn)。這可以通過以下方式之一來實現(xiàn):
把Kconfig設(shè)置 `CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y` 加到 `prj.conf` 文件中。
用以下選項構(gòu)建一個示例:
westbuild---DCONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND=y
-
FlaSh
+關(guān)注
關(guān)注
10文章
1635瀏覽量
148040 -
二進制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41654 -
泰凌微
+關(guān)注
關(guān)注
7文章
148瀏覽量
10808
原文標(biāo)題:【技術(shù)專欄】Matter工廠數(shù)據(jù)使用介紹(二)
文章出處:【微信號:telink-semi,微信公眾號:泰凌微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論