Matter Project 入门 – 构建和运行照明应用程序示例

Matter Project 入门 – 构建和运行照明应用程序示例

你需要什么

  1. 准备好的 Matter 开发环境这将带来所有必要的构建和闪存工具以及 Matter SDK。
  2. 可支持 Matter 开发的 Silicon Labs 无线入门套件完整列表可在此 页面上找到重要提示: 由于 RAM 限制,EFR32MG21 平台上的Matter 支持现已弃用首选和最经济的选择是我们的 Thunderboard Sense 2

入门

  1. 如果还没有,切换到你的主目录:
    cd ~
    
  2. 如果没有完成, 请 按照 本指南准备一个Matter 开发环境这是任何Matter、工具、实施、开发的基础
  3. 如果还没有完成, 请 按照本 指南构建与 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 构建)
    1. 下载 Thunderboard Sense 2 引导加载程序
      wget https://www.dropbox.com/s/qqh45vmflw3w8le/bootloader-storage-internal-single-combined-BRD4166A.s37
      
    2. 使用 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
      
    3. 使用 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,连接到您的开发工具包,并将闪存二进制文件复制到创建的文件夹中:

      Matter Project 入门 – 构建和运行照明应用程序示例

然后根据你在先决条件中安装的工具和你的Linux机器,有3种实现方式:

  1. 使用 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
    
  2. 使用 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
    
  3. 使用 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 Project 入门 – 构建和运行照明应用程序示例

此时,您有一个运行 Matter Lighting 应用程序的 Thunderboard Sense 2(或其他)

疑难解答

如果您完全按照前面的所有部分(包括 git checkouts 和先决条件),您应该已经构建并刷新了 Lighting App 固件以及引导加载程序到 Thunderboard

不过,如果您遇到其中一些问题:

  • 构建失败 :
    1. 绝对  确保您检查了 Matter Dev Env 设置指南中提到的 Matter SDK分支
    2. 确保您在 ./scripts/examples/gn_efr32_example.sh ./examples/<example-app-name>/efr32/ ./out/<example-app-name> <BOARDNAME> 构建命令中提供了适当的示例和板名
    3. 如前所述,众所周知,在 Raspberry Pi 上构建 Matter 应用程序是不稳定的尝试在虚拟机或本机 Ubuntu PC 上构建,看看构建是否通过得更好
    4. 您  在编译照明应用程序时遇到-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 上,通过升级更改环境可能会导致引导程序失败。

  • 应用程序不运行
    1. 确保您的设备已通电
    2. 确保您确实刷新了 .s37 二进制文件,而不是构建文件夹中的另一个
    3. 对于 Thunderboard Sense 2 用户(更常见的是 Series 1 用户),请确保您刷入了引导加载程序没有它,设备不会到达地址 0x00000000 并在默认处理程序中
    4. 确保您构建  刷新了与您使用的无线电板匹配的二进制文件
  • 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可以查看日志输出,如下:
    1. 运行带有参数的 JLinkExe 工具以自动连接到 WSTK 板:
      JLinkExe -device EFR32MG12P432F1024GL125 -speed 4000 -if SWD -autoconnect 1
      
    2. 在第二个终端中,运行 JLinkRTTClient 以查看日志:
      JLinkRTTClient
      

      对于继续通过的用户 ssh,只需打开第二个 ssh 终端即可执行 RTTClient

  • 使用 GUI  (最有可能适用于 Windows 用户)连接到插入的 Thunderboard:Matter Project 入门 – 构建和运行照明应用程序示例成功的连接应导致:

    Matter Project 入门 – 构建和运行照明应用程序示例

现在设备正在运行,我们可以开始使用Chip-tool将事务端设备调试到Thread 网络上。

疑难解答

如果您完全按照前面的所有部分(包括 git checkouts 和先决条件),您应该已经构建并刷新了 Lighting App 固件以及引导加载程序到 Thunderboard

不过,如果您遇到其中一些问题:

设备未通过 Matter 控制器进行调试。
每次需要调试设备时,长按 PB0(BTN0)6 秒恢复出厂设置。您也可以使用 CLI 实现此目的:
打开 TeraTerm 并通过串行连接连接终端设备。键入以下 CLI 命令以恢复出厂设置。

> factoryreset

其他有用的 CLI 命令:

> state //获取设备的状态。

> ipaddr //获取终端设备的 IPV6 地址。