Matter Project 入门 – 构建和运行照明应用程序示例
你需要什么
- 准备好的 Matter 开发环境这将带来所有必要的构建和闪存工具以及 Matter SDK。
- 可支持 Matter 开发的 Silicon Labs 无线入门套件完整列表可在此 页面上找到重要提示: 由于 RAM 限制,EFR32MG21 平台上的Matter 支持现已弃用首选和最经济的选择是我们的 Thunderboard Sense 2
入门
- 如果还没有,切换到你的主目录:
cd ~
- 如果没有完成, 请 按照 本指南准备一个Matter 开发环境这是任何Matter、工具、实施、开发的基础
- 如果还没有完成, 请 按照本 指南构建与 Matter 兼容的 OpenThread Border Router这将需要一个额外的入门工具包以及一个专用的基于 Linux 的运行环境参考指南使用专用的 Raspberry Pi 4 和一个 Thunderboard Sense 2
完成以上所有操作后,您就可以开始了。
构建照明应用程序示例:
在此目录中,您应该有一个 connectedhomeip
文件夹
这个 connectedhomeip 文件夹应该是一个 Matter git 存储库,引导并激活
如果您没有这样的文件夹,请返回先决条件并再次执行所有步骤
构建照明应用程序示例:
首先切换 到 Matter SDK 文件夹
cd connectedhomeip
然后只需在一个命令行中使用专用的构建脚本,如下所示:
./scripts/examples/gn_efr32_example.sh ./examples/<example-app-name>/efr32/ ./out/<example-app-name> <BOARDNAME>
在我们的例子中,Thunderboard Sense 2 (BRD4166A) 的照明应用
./scripts/examples/gn_efr32_example.sh ./examples/lighting-app/efr32/ ./out/lighting-app BRD4166A
如果一切顺利,您应该会在新构建的二进制文件上看到 gcc 大小报告:
+ arm-none-eabi-size -A ./out/lighting-app/BRD4166A/chip-efr32-lighting-example.out
./out/lighting-app/BRD4166A/chip-efr32-lighting-example.out :
section size addr
.text 763472 0
.ARM.exidx 8 763472
.nvm_dummy 72104 763480
.data 1876 536870912
.bss 115412 536872792
.stack_dummy 1024 536988208
.ARM.attributes 46 0
.comment 77 0
.debug_info 27383652 0
.debug_abbrev 1131760 0
.debug_loc 2407436 0
.debug_aranges 83176 0
.debug_ranges 263552 0
.debug_line 2787435 0
.debug_str 1582456 0
.debug_frame 267924 0
.stab 180 0
.stabstr 387 0
Total 36861977
如您所见,构建工件位于 ./out/<example-app-name>/<BOARDNAME>/<binary>.s37
烧录照明应用程序示例
- 仅限 Thunderboard Sense 2 (BRD4166A) 用户第一步是确保您将引导加载程序刷入您的设备 这只能使用 JLinkExe 实用程序或通过任何闪存编程 GUI(即 Simplicity Studio 或 Commander)来完成可以使用 Simplicity Studio 构建此类引导加载程序:参见 UG266为方便起见,我们为 BRD4166 托管了一个预构建的内部存储引导加载程序(使用 GSDK 3.2.4 构建)
- 下载 Thunderboard Sense 2 引导加载程序
wget https://www.dropbox.com/s/qqh45vmflw3w8le/bootloader-storage-internal-single-combined-BRD4166A.s37
- 使用 JLinkExe 刷新引导加载程序映像 (不适用于 WSL) 如果您在我们的先决条件中安装了 JLink 实用程序,那么您已经知道如何启动该
JLinkExe
工具:JLinkExe -device EFR32MG12P432F1024GL125 -speed 4000 -if SWD -autoconnect 1
注意: 如果您有多个套件连接到您的 Rpi 或计算机,您将需要传递其 JLink 序列号,否则 这将失败
loadfile ./bootloader-storage-internal-single-combined-BRD4166A.s37
在新打开的提示符中使用刷新 RCP :J-Link>loadfile ./bootloader-storage-internal-single-combined-BRD4166A.s37 Downloading file [./bootloader-storage-internal-single-combined-BRD4166A.s37]... Unable to load library icui18n "Cannot load library icui18n: (icui18n: cannot open shared object file: No such file or directory)" JLinkGUIServerExe: cannot connect to X server J-Link: Flash download: Bank 3 @ 0x0FE10000: 1 range affected (14336 bytes) J-Link: Flash download: Total: 0.523s (Prepare: 0.190s, Compare: 0.005s, Erase: 0.000s, Program & Verify: 0.270s, Restore: 0.055s) J-Link: Flash download: Program & Verify speed: 52 KB/s O.K. J-Link>
然后重置设备并退出
J-Link>r Reset delay: 0 ms Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit. Reset: Halt core after reset via DEMCR.VC_CORERESET. Reset: Reset device via AIRCR.SYSRESETREQ. J-Link>q
- 使用 Commander GUI 刷新 Bootloader 映像 (不适用于 Raspberry Pi OS)确保你已经安装了指挥官如果没有,请按照事项开发环境先决条件部分并安装指挥官
cp
引导加载程序二进制文件到 Windows 文件系统 (仅适用于 WSL 用户) :mkdir -p /mnt/c/Temp/matter_binaries cp ./bootloader-storage-internal-single-combined-BRD4166A.s37 /mnt/c/Temp/matter_binaries
打开 Commander,连接到您的开发工具包,并将闪存二进制文件复制到创建的文件夹中:
- 下载 Thunderboard Sense 2 引导加载程序
然后根据你在先决条件中安装的工具和你的Linux机器,有3种实现方式:
- 使用 python 帮助脚本 (不适用于 WSL 用户和 Raspberry Pi OS)只需运行:
sudo python3 out/lighting-app/BRD4166A/chip-efr32-lighting-example.flash.py
该脚本依赖于 Simplicity Commander
它需要
commander
安装 并 在 shell 搜索路径中如果不是,调用脚本将失败并显示以下输出:
sudo python3 out/lighting-app/BRD4166A/chip-efr32-lighting-example.flash.py Unable to execute commander. Please ensure that this tool is installed and available. See the EFR32 example README for installation instructions. FAILED: Flash
- 使用 JLinkExe 实用程序 (不适用于 WSL)如果您在我们的先决条件中安装了 JLink 实用程序,则启动该
JLinkExe
工具(在本例中为 Thunderboard Sense 2):JLinkExe -device EFR32MG12P432F1024GL125 -speed 4000 -if SWD -autoconnect 1
注意 1: 如果您有多个套件连接到您的 Rpi 或计算机,则需要将其 JLink 序列号作为参数传递
Thunderboard 用户注意 2: 不要在闪存之前擦除内存,这样做会擦除引导加载程序部分。如有必要,重做引导加载程序闪存(参见上面的 0.)
这次我们将
loadfile ./out/lighting-app/BRD4166A/chip-efr32-lighting-example.s37
在新打开的提示符中使用 Lighting 应用程序闪烁:J-Link>loadfile ./out/lighting-app/BRD4166A/chip-efr32-lighting-example.s37 Downloading file [./out/lighting-app/BRD4166A/chip-efr32-lighting-example.s37]... Unable to load library icui18n "Cannot load library icui18n: (icui18n: cannot open shared object file: No such file or directory)" JLinkGUIServerExe: cannot connect to X server J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (88064 bytes) J-Link: Flash download: Total: 1.821s (Prepare: 0.242s, Compare: 0.017s, Erase: 0.000s, Program & Verify: 1.455s, Restore: 0.104s) J-Link: Flash download: Program & Verify speed: 59 KB/s O.K. J-Link>
JLinkExe
现在只需重置设备并使用r
then 退出 提示q
:J-Link>r Reset delay: 0 ms Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit. Reset: Halt core after reset via DEMCR.VC_CORERESET. Reset: Reset device via AIRCR.SYSRESETREQ. J-Link>q
- 使用 Windows Simplicity Commander GUI (不适用于 Raspberry Pi OS)确保你已经安装了指挥官如果没有,请按照事项开发环境先决条件部分并安装指挥官
cp
Windows 文件系统的应用程序二进制文件 (仅适用于 WSL 用户) :mkdir -p /mnt/c/Temp/matter_binaries cp ./out/lighting-app/BRD4166A/chip-efr32-lighting-example.s37 /mnt/c/Temp/matter_binaries
打开 Commander,连接到您的开发工具包,并将闪存二进制文件复制到创建的文件夹中:
此时,您有一个运行 Matter Lighting 应用程序的 Thunderboard Sense 2(或其他)
疑难解答
如果您完全按照前面的所有部分(包括 git checkouts 和先决条件),您应该已经构建并刷新了 Lighting App 固件以及引导加载程序到 Thunderboard
不过,如果您遇到其中一些问题:
- 构建失败 :
- 绝对 确保您检查了 Matter Dev Env 设置指南中提到的 Matter SDK分支
- 确保您在
./scripts/examples/gn_efr32_example.sh ./examples/<example-app-name>/efr32/ ./out/<example-app-name> <BOARDNAME>
构建命令中提供了适当的示例和板名 - 如前所述,众所周知,在 Raspberry Pi 上构建 Matter 应用程序是不稳定的尝试在虚拟机或本机 Ubuntu PC 上构建,看看构建是否通过得更好
- 您 在编译照明应用程序时遇到-Wno-unknown-warning错误确保您正在运行 arm-none-eabi-gcc 版本:9.3.1 检查运行
arm-none-eabi-gcc --version
在撰写本文时,我们正在使用:arm-none-eabi-gcc (GNU Arm Embedded Toolchain 9-2020-q2-update) 9.3.1 20200408 (release) Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
解决方案是
sudo apt upgrade
如果 ubuntu 不允许安装更新版本并再次运行引导脚本。
在 Raspberry 上,通过升级更改环境可能会导致引导程序失败。
- 应用程序不运行
- 确保您的设备已通电
- 确保您确实刷新了
.s37
二进制文件,而不是构建文件夹中的另一个 - 对于 Thunderboard Sense 2 用户(更常见的是 Series 1 用户),请确保您刷入了引导加载程序没有它,设备不会到达地址 0x00000000 并在默认处理程序中
- 确保您构建 并 刷新了与您使用的无线电板匹配的二进制文件
- JLinkExe 抛出错误 :如果错误是:
Unable to load library icui18n "Cannot load library icui18n: (icui18n: cannot open shared object file: No such file or directory)" JLinkGUIServerExe: cannot connect to X server
-> 你不需要担心它
commander
调用python flash脚本时找不到- 确保您已安装commander
如果没有,请按照Matter 开发环境先决条件部分并安装commander。
使用 RTT 查看器调试设备
在使用 Lighting App 示例闪烁的 Thunderbaord Sense 上连接 RTT 查看器
根据您的操作系统,您将使用 GUI 或命令行。无论哪种方式,您都需要拥有 JLIink 软件套件,如 Matter Development Setup 指南的先决条件
- 使用 shell bin (适用于除 WSL 之外的所有用户)使用JLinkExe工具结合JLinkRTTClient可以查看日志输出,如下:
- 运行带有参数的 JLinkExe 工具以自动连接到 WSTK 板:
JLinkExe -device EFR32MG12P432F1024GL125 -speed 4000 -if SWD -autoconnect 1
- 在第二个终端中,运行 JLinkRTTClient 以查看日志:
JLinkRTTClient
对于继续通过的用户
ssh
,只需打开第二个 ssh 终端即可执行 RTTClient
- 运行带有参数的 JLinkExe 工具以自动连接到 WSTK 板:
- 使用 GUI (最有可能适用于 Windows 用户)连接到插入的 Thunderboard:成功的连接应导致:
现在设备正在运行,我们可以开始使用Chip-tool将事务端设备调试到Thread 网络上。
疑难解答
如果您完全按照前面的所有部分(包括 git checkouts 和先决条件),您应该已经构建并刷新了 Lighting App 固件以及引导加载程序到 Thunderboard
不过,如果您遇到其中一些问题:
设备未通过 Matter 控制器进行调试。
每次需要调试设备时,长按 PB0(BTN0)6 秒恢复出厂设置。您也可以使用 CLI 实现此目的:
打开 TeraTerm 并通过串行连接连接终端设备。键入以下 CLI 命令以恢复出厂设置。
> factoryreset
其他有用的 CLI 命令:
> state //获取设备的状态。 > ipaddr //获取终端设备的 IPV6 地址。