Skip to content

Latest commit

 

History

History
516 lines (384 loc) · 34.8 KB

AN728.md

File metadata and controls

516 lines (384 loc) · 34.8 KB

Over-the-Air Bootload Server and Client Setup (Rev. 1.0)

本应用笔记介绍了用户在 ZCL OTA Upgrade cluster client 设备和 server 设备之间执行 Zigbee® OTA(over-the-air)引导加载会话时应遵循的流程。本笔记中使用的硬件基于 Mighty Gecko(EFR32MG12)开发套件(有关如何配置与 EFR32MG12 配合使用的 WSTK 开发板的详细信息,请参阅 WSTK6001 User Manual)。在使用自定义硬件在自定义的开发环境中设置或测试 OTA 引导加载下载时,也可以参考本文档中的步骤。

目录

1. 引言

本应用笔记介绍了在 ZCL OTA Upgrade cluster client 设备和 server 设备之间执行 Zigbee OTA 引导加载会话所需的步骤。演示过程使用基于 EFR32MG12 的 Mighty Gecko 开发板(有关如何配置与 EFR32MG12 配合使用的 WSTK 开发板的详细信息,请参阅 WSTK6001 User Manual)。

有关此引导加载程序的更多信息,请参阅文档 UG103.6: Application Development Fundamentals: Bootloading。有关 ZCL OTA Upgrade cluster 的详细信息,请参阅 Zigbee cluster library specification 的最新发布版本。

注:在 Silicon Labs AppBuilder ZCL 选项卡中,ZCL OTA Upgrade cluster 称为 OTA Bootloading。为了保持一致性,本文档中也使用该术语。如果您要搜索 Zigbee 文档,请务必搜索 “OTA Upgrade”。

在自行设置和/或测试 Zigbee OTA bootload cluster 时,请参阅本应用笔记。“高级” 部分介绍了如何扩展此示例以使用您自定义的硬件配置,以及如何更改软件配置以支持您自定义的制造商特定信息。

如需更进一步的参考,请参阅:

  • Zigbee Document #07-5123, Zigbee Cluster Library Specification - “Over-the-air Upgrading” chapter; available from http://www.zigbee.org.
  • Silicon Labs document QSG106: Getting Started with EmberZNet PRO
  • Silicon Labs document UG102: Ember Application Framework Developer Guide – Chapter 15
  • Silicon Labs document UG266: Silicon Labs Gecko Bootloader User Guide
  • Silicon Labs document AN1084: Using the Gecko Bootloader with EmberZNet and Silicon Labs Thread

2. 软硬件要求

本文档中的许多步骤都是使用 AppBuilder(Application Builder)执行的,它是 Simplicity Studio IDE 的一个组件。有关配置应用程序的更多信息,请参阅随您的发行版提供的 QSG106: Getting Started with EmberZNet PRO

许多过程使用 IAR-EWARM 作为编译器。IAR-EWARM 版本必须与 EmberZNet SDK 版本兼容。请参阅 SDK 的发行说明以确定兼容的编译器版本号。

这些过程使用两个基于 EFR32MG12 的 WSTK(Wireless Starter Kits)。其中一个用作以 SoC 模式运行的 client 设备,另一个用作 OTA Server 的 NCP 组件。作为 OTA Server 设置的一部分,还需要运行 Linux 或 Windows(带有 Cygwin)的 PC 主机。

2.1 Client 硬件

这些过程中使用的 client 设备是基于 EFR32MG12 的 WSTK(以 SoC 模式运行)。下载空间有两种选择:第一种是使用连接到设备的外部存储设备(如串行 dataflash 或 串行EEPROM);第二种是仅适用于具有超过 512kB 闪存空间的设备,其使用主闪存的一部分作为下载空间。使用第二种的引导加载程序通常称为内部或本地存储引导加载程序。EFR32MG12 部件可以使用本地存储;而 EFR32MG1 部件则不能。有关 EFR32MGx 部件支持的外部存储器的完整列表,请参阅 UG266: Silicon Labs Gecko Bootloader User Guide

对于使用 EFR32MG1 的 Mighty Gecko 设备,只有串行 dataflash 选项可用;目前没有提供本地存储应用引导加载程序。但是,部件号以 EFR32MG1x6 或 EFR32MG1x7 开头的 Mighty Gecko IC 包含一个集成的串行闪存,其可以像片外串行 dataflash 一样使用,但不需要任何其他组件。

基于 EFR32MG12 或 EFR32MG13 的设备(具有至少 512kB 内部闪存)支持用于本地存储应用引导加载程序设计的内部存储,以及用于基于 SPI 闪存的应用引导加载程序设计的外部存储。在本文档中描述的过程中,内部存储在 EFR32MG12(具有 1024kB 闪存)中使用。有关其他设备的存储器设计的帮助,请联系 Silicon Labs 技术支持。

Zigbee OTA client cluster 可与基于 EmberZNet PRO 的设备(以 SoC 或 EZSP NCP 模式运行)一起使用。本文档未介绍如何为基于 NCP 的 client 配置 EZSP 主机应用,但 client 使用 EZSP 时是与在 2.2 Server 硬件 中描述的 server 硬件和设置相同的。本应用笔记展示了一个 OTA client cluster 如何与特定硬件配置一起使用的示例。

Client 软件基于最新版本的 EmberZNet PRO 协议栈内包含的 AFV2(ZCL Application Framework V2)。

2.2 Server 硬件

这些过程中使用的 NCP 设备是基于 EFR32 Mighty Gecko 的 WSTK,其中与 UART 连接的主机应用通过 EZSP(EmberZNet Serial Protocol)进行通信。在本应用笔记中,与 NCP 连接的 Linux 或 Windows(带有 Cygwin)主机需要运行主机软件。OTA 软件映像的存储是主机的本地文件系统。要避免链接问题,请不要使用虚拟机来运行主机。

OTA server 可以在基于 EFR32 Mighty Gecko 的 SoC 上运行,也可以使用与不同(non-POSIX-based)主机系统一起的 NCP。与此处介绍的配置不同的配置需要一种替代机制,用于将映像推送到 OTA server,以便可以通过 Zigbee OTA bootload cluster 协议将它们提供给 client。例如,软件映像可以通过实用程序回程、到本地网络的以太网连接或某些专有机制来推送。

连接到开发板(充当 UART NCP)的 Linux 系统只是提供 OTA 文件的一种可选项。它是 OTA server 最友好的选项,因为有很多机制可以将 OTA 文件推送到 server 的文件系统中。

下图展示了用于 Zigbee OTA 应用引导加载过程的硬件配置图。注意,只需要一个 client。

Figure 2.1. Zigbee OTA Application Bootload Hardware Diagram

3. ZigBee OTA 映像文件格式

该文件格式在 Zigbee document 07-5123, Zigbee Cluster Specification, in the “OTA File Format” section of the “Over-theair Upgrade” chapter 中定义。映像由一个 Zigbee OTA 头、一个或多个专有引导加载程序数据块、以及附加到末尾的一组可选加密签名数据组成。OTA server 只需要读取 OTA 头来提供文件,因此可以为不同的制造商和/或不同的产品提供文件。下图展示了文件格式布局的样例。

Figure 3.1. File Format Sent Over-the-Air

Silicon Labs 创建了一个用于生成 OTA 映像的工具,其名为 Image-builder。non-ECC 版本的 Image-builder 包含在 EmberZNet PRO 版本的 tool\image-builder 子目录中。如果启用了 OTA Bootload Cluster Client Policy 插件,则 AppBuilder 中的 post-build 脚本将运行 Image-builder(作为批处理文件的一部分)来生成 OTA 文件。有关 Image-builder 的更多信息,请参阅 AN716: Instructions for Using Image Builder

OTA 签名是指对 OTA 映像文件进行签名,并且独立于 OTA 包装文件内的更新映像文件中可能存在的任何签名或加密。目前,只有 Smart Energy Profile 支持映像上的签名。本应用笔记假定 OTA 映像不需要签名。

4. 常规过程

以下概述了配置 OTA Bootload cluster client 和 server 的步骤。详细信息将在后续章节中介绍。

  1. 配置和构建原始的(original)OTA client 映像。
  2. 配置并构建更新的(updated)OTA client 映像。
  3. 创建 Zigbee OTA server 文件。
  4. 构建 PC 主机。
  5. 加载原始的 client 映像。
  6. 加载 EZSP NCP server 软件。
  7. 在 server 上加载更新的 OTA client 映像。
  8. 运行 Zigbee OTA client/server。

4.1 配置和构建原始的 Zigbee OTA Client 映像

此过程将配置一个 Zigbee LO On/Off Light 作为示例,它可以适用于任何示例应用。其他 Zigbee 设备类型也可以类似地配置。示例设置包括对 Zigbee OTA bootload cluster client 的支持。

本应用笔记中的过程构建了两个 client 映像(原始的版本和更新的版本)。此 client 将是原始的版本。生成的映像将在 Zigbee OTA 进程升级 client 设备之前运行。

以下是配置 OTA client 的基本步骤:

  1. 在 AppBuilder 中,创建并命名新项目(可以是空白的或基于所提供的示例之一)。出于本练习的目的,您可能希望将文件命名为 ZNet_OTA_Client_631(对于 6.3.1.0 协议栈)。

  2. ZCL Cluster Configuration 选项卡中:

    1. 在左下角的 Cluster List 面板中,展开 General 分组。
    2. 选中 Over-the-Air Bootloading Cluster 复选框。

    注:默认情况下,某些 Zigbee 设备类型不允许您启用此 cluster。在这种情况下,您可以从 ZCL 设备类型选项列表中选择 Zigbee Custom,然后从该列表中选择所需的相同设备类型。然后,您可以将任何其他 cluster 添加到端点配置中。

  3. Printing and CLI 选项卡中:

    1. Debug Printing 部分,选中 Enable Debug Printing 复选框。
    2. 展开 Cluster Debugging 分组。
    3. Over-the-Air Bootloading cluster 选中 Compiled-inEnabled at startup 复选框。
  4. HAL Configuration 选项卡中,点击 [Open Hardware Configurator] 以启动 HW Conf,然后:

    1. 在弹出的配置器窗口中,点击 DefaultMode Peripherals 选项卡。
    2. 向下滚动到外设的 Serial 部分,并启用 SerialVirtual COM Port 外设。
    3. 点击 ISC 文件的 AppBuilder 选项卡以继续编辑应用程序配置。
    4. 选择 File > Save all
  5. HAL Configuration 选项卡中,点击 Bootloader 下拉菜单并指定为 Application

    注:Local Storage bootloader 也可以与 OTA Client 设置一起使用,但这是一个更高级的用例,此处不再讨论。有关引导加载程序配置选项的更多信息,请参阅 UG266: Silicon Labs Gecko Bootloader User's GuideAN1084: Using the Gecko Bootloader with EmberZNet and Silicon Labs Thread

  6. 在 Plugins 选项卡中,确保以下插件已被选中(默认情况下也可以选中其他插件):

    • OTA Bootload Cluster Client
    • OTA Bootload Cluster Client Policy
      1. 在 Firmware Version 文本框中,将值设置为 1(作为原始的版本号)。

      注:这是一个临界值。

    • OTA Bootload Cluster Common Code
    • OTA Bootload Cluster Storage Common Code
    • OTA Simple Storage Module
    • OTA Simple Storage EEPROM Driver
      1. 选中 SOC Bootloading Support 复选框。
      2. 设置 EEPROM Device Read-modify-write support 为 False。

      注:此插件中的 OTA storage start offset 和 OTA storage end offset 值可能需要针对其他存储布局进行更改,包括涉及存储槽的布局。请联系 Silicon Labs 技术支持,以获取有关基于您的用例选择其他值的指导。

    • EEPROM
    • OTA Cluster Platform Bootloader
  7. 点击 [Generate]

  8. 根据您的首选方法构建应用程序。确保生成 .GBL(Gecko Bootloader)文件。

    注:EEPROM/dataflash 驱动程序没有特别地包含在应用程序的项目文件中。应用程序将调用引导加载程序的存储驱动程序代码来执行对串行 dataflash 的底层调用。这就是为什么在 client 配置中启用引导加载程序以及稍后将引导加载程序加载到设备中的重要原因。

    对于 Zigbee OTA Bootload Cluster Client,AppBuilder 会自动创建一个 Windows .BAT 文件,该文件执行 Image-builder 并以 Zigbee OTA 文件格式包装 GBL 文件。传递给 Image-builder 的参数基于应用程序配置中指定的参数,特别是 OTA Bootload Cluster Client Policy 插件中声明的值。OTA 映像将位于 compiler Debug 文件夹中,而不是位于主项目文件夹中。

4.2 配置并构建更新的 Zigbee OTA Client 映像

此步骤构建更新的版本映像。除了嵌入其中的版本号之外,映像是相同的。

4.2.1 复制原始的 OTA Client 映像

将原始的 ZNet_OTA_Client.gbl 文件(其 OTA Bootload Cluster Client Policy:Firmware Version 设置为 1)复制到另一个文件夹,以避免在启用 OTA 更新时构建 “更新的” 版本时将其覆盖。适当地重命名此文件,例如:ZNet_OTA_Client_631_v1.gbl

4.2.2 修改、生成并构建更新的 OTA Client 配置

要生成新的 OTA Client 配置,请执行以下步骤。

  1. 打开之前保存的 OTA Client ISC 文件。
    1. 打开 File 菜单并选择 Open。
    2. 在对话框中,导航到已保存的 ISC 文件的位置并选择 Open。
  2. 选择 Plugins 选项卡。
    1. 选择 OTA Bootload Cluster Client Policy 插件。
    2. 将 Firmware version number 输入框中的值更改为 22。此值可以随意选择,但其值必须大于先前的版本(1)。
  3. 点击 [Generate]
  4. 构建项目。找到在编译器输出目录中创建的 .ota 文件,例如 \IAR ARM - Default\ZNet_OTA_Client_631.ota
  5. 将此文件复制到保存 ZNet_OTA_Client_631_v1.gbl 的目录,并重命名 .ota 文件以跟踪版本号,例如:ZNet_OTA_Client_631_v22.ota

4.3 创建 Zigbee OTA Server 文件

此过程为 Zigbee 3.0 网关主机设备创建源。该设备包含对 Zigbee OTA bootload cluster server 的支持。主机 server 软件可以支持已签名的和未签名的 OTA 映像,因为它不会对这些文件进行任何验证。要配置 OTA server:

  1. 在 AppBuilder 中,开始一个新的 AppBuilder 项目。
  2. 选择 ZCL Application Framework V2 并点击 [Next]
  3. 选择 EmberZNet <version> GA Host 并点击 [Next]
  4. 选择 Z3Gateway 主机示例应用并点击 [Next]
  5. 重命名您的项目并点击 [Next]
  6. 不要选择 Boards。在 Part 下,选择 None (Compatible),并保留 No Toolchain 的选择,点击 [Finish]
  7. 点击 [Generate]

4.4 构建 PC 主机

OTA Server 可以在 Linux 机器(使用 GCC)或 Windows 机器(带有 Cygwin 和 GCC)上构建。这两个过程如下所述。

4.4.1 在 Linux 机器上构建

可以在 Linux 系统上完成 OTA server 的构建。本应用笔记假设您不使用交叉编译器,并且目标系统与开发工具所在的系统相同。可以针对不同的 Linux 系统(例如,在 x86 PC 上目标为针对嵌入式的 ARM Linux 系统)进行交叉编译。有关如何交叉编译其他系统的详细信息,请参见 5.4 为 OTA Server 使用交叉编译器

构建适用于 Linux 的 OTA Server 需要许多开发工具。我们假设您可以访问这些工具。它们包括:

  • Make
  • GCC
  • sed
  • awk
  • xargs
  • The standard C Library and its development headers
  • The Readline Library and its development headers
  • The Ncurses Library and its development headers

下面是在 Linux 下构建 OTA server 的步骤。假设在 Simplicity Studio 中配置 server 后运行这些步骤。

  1. 将 EmberZNet PRO 协议栈文件从 Windows 上的安装位置复制到 Linux PC 上的目录。这里应该包含先前步骤中生成的文件。
  2. 启动 Bash Shell。
  3. 切换到 Linux PC 或 Raspberry Pi 上的 EmberZNet 项目目录。
  4. 在该目录中生成的 Makefile 上运行 Make(例如 make -f OtaServer.mak,或者如果生成的 Makefile 在当前工作目录中并且具体命名为 “Makefile”,则只需 make)。

编译应该成功地完成。

4.4.2 在 Windows 机器上的 Cygwin 下构建

在 Windows 下构建 OTA Server 需要 Cygwin。Cygwin 是一组模拟 Linux 环境的本机 Windows 工具。Cygwin 可以从 http://www.cygwin.com 上下载。

Cygwin 实际上是构成 Linux 发行版的数百个小程序的集合。Cygwin 可以针对特定的 Windows PC 以多种不同的方式进行配置,因此默认情况下可能不包含构建 EmberZNet PRO 主机应用所需的工具。因此,在实际构建 EmberZNet PRO 代码之前,必须正确安装所需的工具。

以下是在 Cygwin 下构建 EmberZNet PRO 主机应用所需的软件包的常规列表。

  • Bash shell
  • Make
  • GCC4
  • sed
  • awk
  • xargs
  • The standard C Library and its development headers
  • libreadline-devel - The Readline Library and its development headers
  • libncurses-devel - The Ncurses Library and its development headers

注:尽管可以使用 Cygwin 工具构建不需要 Cygwin DLL 的应用程序,但是无法使用 EmberZNet PRO 主机应用执行此操作。主机应用需要访问 Cygwin DLL 才能正确运行 Ember 应用框架代码的某些部分。

使用 Cygwin 在 Windows 下构建 OTA server 的步骤如下。

  1. 启动 Cygwin Shell。
  2. 切换到项目目录,例如 /cygdrive/c/SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.2/app/builder/Z3GatewayHost_631
  3. 输入 make
  4. 将创建 \build\exe\ 文件夹,并且其中包含您的主机应用 Z3GatewayHost_631.exe

编译应该成功地完成。

4.5 加载原始的 Client 映像

为您的板子刷写适当的应用引导加载程序,例如将 \developer\sdks\gecko_sdk_suite\v2.3\platform\bootloader\sampleapps\bootloader-storage-spiflash-single\efr32mg12p432f1024gl125-brd4161a\bootloader-storage-spiflash-single-combined.s37 刷写到 BRD4161A。为了方便,在这种情况下,如果使用相同的板子(如 BRD4161A),则可以为 OTA Client 和 Server 使用相同的引导加载程序。

您可以使用 Simplicity Studio 执行此操作(有关加载应用程序和引导加载程序固件的说明,请参阅 QSG106: Getting Started with EmberZNet PRO)或使用 Simplicity Commander 命令(有关其他详细信息,请参阅 UG162: Simplicity Commander Reference Guide):

commander flash -d EFR32 [path to bootloader-storage-spiflash-single-combined.s37]
commander flash -d EFR32 [path to ZNet_OTA_Client_632.gbl]

提示:您可以将文件映像拖动到 CMD 窗口以简单地包含文件引用。

4.6 加载 EZSP NCP Server 软件

为了使用通过 USB 连接到 PC 主机的 Mighty Gecko 设备,必须将 EZSP NCP 软件加载到目标芯片上。以下描述使用 EFR32MG12 作为 NCP 目标芯片和预编译映像的示例的过程。您还可以参照 AN1010: Building a Customized NCP Application 中所述的内容构建自定义的映像。

  1. 在设备面板上右键 NCP 目标设备。
  2. 选择 Upload Application
  3. 在弹出的对话框中:
    1. 单击 Application image path 文本框右侧的文件夹图标。

    2. 导航到 EmberZNet PRO 版本的位置,浏览 ncp-images 子目录,然后选择预先构建的 NCP 映像。使用 ncp-uart-hw.s37 文件,例如:C:\SiliconLabs\SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.3\protocol\zigbee\ncp-images\efr32mg12p432f1024gl125-brd4161a\ncp-uart-hw.s37

    3. 检查引导加载程序映像,然后浏览引导加载程序映像文件夹,例如:\SiliconLabs\SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\<version>\platform\bootloader\sample-apps\bootloader-storage-spiflash-single\

      注:一些 SDK 的路径会有差异。

      打开与您的板子和部件对应的文件夹,然后选择 .s37 文件,例如:\efr32mg12p432f1024gl125-brd4161a\bootloader-storage-spiflash-single-combined.s37

    4. 点击 [OK]

  4. 等待设备成功地完成 NCP 的刷写加载。

4.7 在 Server 上加载更新的 OTA Client 映像

OTA Server 应用程序在名为 ota-files 的目录中查找 OTA 文件,该目录是当前工作目录中的子目录,server 应用程序从该目录启动。

  1. 在 OTA Server PC 上启动 Cygwin 或 Linux shell。

  2. 导航到将运行 OTA Server 应用程序的目录,创建一个子目录,并将 OTA 文件复制到该目录。例如,

    在 Linux 中:

    cd /home/rob/
    mkdir ota-files
    cp -i OtaClient-v22.ota ota-files/
    

    在 Cygwin 上:

    cd /cygdrive/c/SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/<version>/app/builder/Z3GatewayHost_OTA/build/exe
    mkdir ota-files
    cp –i OtaClient-v22.ota ota-files/
    

    您也可以使用 Windows 资源管理器或 Linux/RasPi GUI 复制文件。

4.8 运行 Zigbee OTA Client/Server

  1. 确保 NCP 设备的 WSTK 通过 USB 电缆连接到 PC。

  2. 通过从命令行执行 OTA server 应用程序来启动 OTA Server,并将其传递给通信端口的位置。通信端口将是 USB 或串行端口设备。确定 EFR32MG12 连接到哪个端口的方法取决于主机 PC 的操作系统。

    在 Linux 下

    USB 端口注册为 /dev/ttyUSBX,其中 X 是操作系统分配的编号。例如,以下将使用 ttyUSB0

    1. 启动 Shell。
    2. 切换到 OTA Server 应用程序所在的目录。这应该是存在名为 ota-files 的子目录的目录,例如:cd/home/rob
    3. 输入 ./OtaServer –p /dev/ttyUSB0

    在 Windows 下

    USB 端口是 COM1、COM2、COM3 等。可以通过查看 Windows 设备管理器的端口(COM 和 LPT)部分,同时拔下并重新插入 WSTK 的 USB 连接器来确定 COM 端口。以下示例使用 COM1。

    1. 启动 Cygwin Shell。
    2. 导航到您构建的主机应用,例如:
      cd /cygdrive/c/SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.2/app/builder/Z3GatewayHost_631
      
    3. 要以 COM 端口作为参数运行主机应用,请键入以下命令:./Z3GatewayHost_631.exe -p com1
  3. 在 Simplicity Studio Serial 1 窗口中连接到 OTA Client 设备,或者启动 Windows 命令提示符并通过 telnet 在端口 4901 上连接到它的 IP 地址。

  4. 确保 client 和 server 设备都启用了 Over-the-Air Bootloading Cluster printing。

    1. 在 OTA Client 上执行以下命令:plugin ota-storage-common printImages
    2. 在 OTA Server 上执行以下命令:plugin ota-storage printImages

    在这两种情况下,输出都应该打印到 CLI。如果看不到输出,请返回并验证应用程序的配置及其调试打印配置。

  5. 确保 client 正在运行旧版本的 client 软件。从 OTA client 的 CLI 中输入以下命令。你应该看到相应的输出:

    OtaClient>plugin ota-client info
    Client image query info
    Manuf ID:         0x1002
    Image Type ID:    0x0000
    Current Version:  0x00000001
    Hardware Version: NA
    Query Delay ms:            300000
    Server Discovery Delay ms: 600000
    Download Delay ms:         0
    Run Upgrade Delay ms:      600000
    Verify Delay ms:           10
    Download Error Threshold:  10
    Upgrade Wait Threshold:    10
    

    注意,current version 字段表示为 0x00000001。

  6. 验证 OTA Server 是否在其中加载了较新的映像。从 OTA server 的 CLI 中输入以下命令。你应该看到相应的输出:

    OtaServer>plugin ota-storage printImages
    Image 0
      Header Version: 0x0100
      Header Length:  56 bytes
      Field Control:  0x0000
      Manuf ID:       0x1002
      Image Type:     0x0000
      Version:        0x00000022
      Zigbee Version: 0x0002
      Header String:  Our Test Image
      Image Size:     146954 bytes
      Total Tags: 1
        Tag: 0x0000
          Length: 146880
    1 images in OTA storage.
    

    注意,version 表示为 0x00000022。映像的确切大小可能会有所不同。

  7. 擦除已保存在 client 中的任何先前版本的文件。这在生产系统中通常不是必需的,但在此示例中,先前版本可能会导致问题。在 client 上输入以下命令:

    plugin ota-storage delete 0.
    
  8. 在下载过程中关闭接收消息打印以限制控制台输出。跳过此步骤不会对功能产生负面影响。

    1. 在 server 上:option print-rx-msgs disable
    2. 在 client 上:option print-rx-msgs disable
  9. 将设备加入到同一个网络内。

    1. 在 server 上:net leave

    2. 在 server 上:plugin network-creator start 1

    3. 在 server 上:plugin network-creator-security open-network

    4. 在 client 上:plugin network-steering start 0

      如果 client 加入成功,那么您应该在输出中看到有关信任中心交互的对话。

  10. 要验证 client 是否已连接到 server,请在 client 和 server 上输入 info。它们的 PAN ID 应该相同。

  11. 在 client 上启动 OTA Client 的状态机:plugin ota-client start

    注:下载可能需要 10 分钟。

  12. 如果一切顺利,您将看到如下输出:

    Download: 100% complete
    Bootload state: Verifying Image
    Last offset downloaded: 0x00023E6C
    Starting EBL verification
    EBL passed verification.
    Custom verification passed: 0x00
    Bootload state: Waiting for Upgrade message
    Sending Upgrade End request.
    OTA Cluster: wait for 0 s
    RXed timeOut 0x00000000 s, MAX timeOut 0x00000DBB s
    Adding 2000 ms. delay for immediate upgrade.
    Countdown to upgrade: 2000 ms
    Bootload state: Countdown to Upgrade
    Applying upgrade
    Executing bootload callback.
    Reset info: 0x02 (BTL)
    

4.9 重复这个过程

通过 Zigbee over-the-air bootload cluster 升级 Zigbee OTA client 后,如果 server 具有不同版本的软件,则只能再次升级。

为了再次执行 Zigbee OTA 固件下载,必须执行以下操作之一:

  1. 将 client 的运行映像降级为原始的版本
  2. 使用较新的软件版本创建另一个 client 映像。

将运行中的映像降级到原始的版本

重新执行 4.5 加载原始的 Client 映像 中的步骤。加载版本 1 的软件(原始的映像)。

使用较新的软件版本创建另一个映像

执行以下步骤:

  1. 重新执行 4.1 配置和构建原始的 Zigbee OTA Client 映像 中的步骤,但指定一个大于 22 的 Firmware Version。

    确保单击 [Generate] 以生成构建文件。

  2. 重新执行 4.4 构建 PC 主机 中的步骤。

    确保传递给 Image-builder 的 --version 参数反映为最新的版本号。

5. 高级主题

本节介绍了许多高级主题,允许开发者根据他们的特定硬件和软件自定义引导加载。

5.1 指定你的制造商 ID

按照如下的步骤指定一个制造商(Manufacturer)ID(非 Silicon Labs 的 0x1002)。

每个 Zigbee Alliance 成员都有自己的制造商 ID。制造商 ID 的列表保存在 Zigbee Document 05-3874 Manufacturer Code Database 中。如果你的公司没有制造商 ID,那么你应该从 Zigbee 帮助服务(help@zigbee.org)处请求一个。

  1. 在 AppBuilder 中配置 OTA Client 时,执行以下操作:
    1. 选择 ZCL Cluster Configuration 选项卡。
    2. Manufacturer Code 文本框中输入你的制造商码。
    3. 点击 [Generate]
    4. 使用 IAR workbench 重新编译应用。
  2. 在生成 Zigbee OTA 映像文件时,执行以下操作:
    1. 在执行 image-builder 命令时,使用你的制造商 ID 作为 --manuf-id 的参数。

注:在此示例中,您无需修改 OTA Server 的制造商 ID。Server 可以具有与 OTA Client 不同的制造商 ID。您可以选择修改制造商 ID 以匹配贵公司正在构建的 OTA Server 设备。

5.2 指定你的映像类型 ID

按照如下的步骤指定一个映像类型(Image Type)ID(非 0x0000)。

  1. 在 AppBuilder 中配置 OTA Client 时,执行以下操作:
    1. 选择 Plugin 选项卡。
    2. 选择 OTA Bootload Cluster Client Policy 插件。
    3. Image Type ID 文本框中输入你的映像类型 ID。
    4. 点击 [Generate]
    5. 使用 IAR workbench 重新编译应用。
  2. AppBuilder 会自动更新 IAR Workbench 将执行的 Windows 批处理文件命令,以生成 Zigbee OTA 文件。新的映像类型参数将通过 --image-type 传递给 Image-builder。

5.3 修改 OTA Client 以使用不同的 EEPROM

可以使用许多不同的外部存储器件,器件的选择取决于许多不同的因素。AN772: Using the Ember Application BootloaderUG266: Silicon Labs Gecko Bootloader User Guide 详细介绍了 Silicon Labs 支持的几个不同器件及其各种设备参数。

如果外部存储器件不支持读-改-写(read-modify-write),则必须更新 AppBuilder 应用程序配置。以下描述了该过程:

  1. 在 AppBuilder 中,打开 OTA client 的配置文件(ISC)。
  2. 选择 Plugin 选项卡。
  3. 选择 OTA Simple Storage EEPROM Driver 插件,取消选中的 EEPROM Read-modify-write device Support 选项。
  4. 点击 [Generate] 来重新生成合适的 AppBuilder 文件。
  5. 重新编译应用。

注:EEPROM 的改变需要一个新的引导加载程序来支持。您必须按照 4.5 加载原始的 Client 映像 中的步骤加载新的引导加载程序,并选择适合您正在使用的引导加载程序的步骤。对于本节给出的示例,应该选择的合适的引导加载程序应该是:C:\SiliconLabs\SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\<version>\protocol\zigbee\platform\bootloader\sample-apps\bootloader-storage-spiflash-single\{chipName}\bootloader-storage-spiflash-single-combined.s37

5.4 为 OTA Server 使用交叉编译器

可以使用交叉编译器为另一个目标系统构建 OTA server。例如,在 x86 Windows PC 上为 ARM Linux 系统构建。一旦正确安装和配置交叉编译器,此过程相对简单。为此,您必须运行 make 并在命令行上传递编译器和链接器的名称/位置。

例如:

make CC=/opt/crosstool/gcc-4.0.1-glibc-2.3.5/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc LD=/opt/crosstool/gcc-4.0.1-glibc-2.3.5/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc

Makefile 需要一个 GCC 样式的命令行编译器,它使用编译器命令(而不是直接的链接器命令)进行链接。

5.5 使用加密的 GBL 映像

加密的映像通过使用对称加密密钥来保护新应用程序映像免受检查或篡改。有关 Gecko Bootloader 和加密的 GBL 映像的更多信息,请参阅 UG266: Silicon Labs Gecko Bootloader User Guide

5.5.1 更改引导加载程序类型

以下说明适用于 EM35x 设备。对于 EFR32MG 设备,请按照 UG266: Silicon Labs Gecko Bootloader User's Guide 中的说明进行操作。

  1. Load the ISC file configured with the OTA Bootload Cluster Client.
  2. Switch to the HAL tab.
  3. Open the Bootloader drop-down menu, and select Secure Application or Secure Local Storage.
  4. A Secure Application bootloader requires an encryption key. There are two ways to acquire a key:
    • AppBuilder can randomly generate a key file
    • The User can specify a key file.
      1. To have AppBuilder randomly generate a key, click Generate Key:
      2. To have AppBuilder use an existing key file, click Browse and navigate to a file containing the key. The format of a key file is as follows:
        # Comment lines begin with ‘#’
        TOKEN_MFG_SECURE_BOOTLOADER_KEY: 0123456789ABCDEF0123456789ABCDEF
        
  5. Click [Generate] in AppBuilder.
  6. Build the application using IAR.

    Note that the encrypted EBL output will be: build/ApplicationName/ApplicationName.ebl.encrypted

  7. AppBuilder will automatically create a Zigbee OTA file containing the encrypted EBL: build/ApplicationName/ApplicationName.ota.
  8. Load a Secure Bootloader onto the device. Follow the steps in section 4.5 Load the Original Client Image, but select a Secure Application bootloader. Secure bootloader IAR and project files for the EM3x are located in the bootloader folders for the part, for example:
    \SiliconLabs\SimplicityStudio\<version>\developer\sdks\gecko_sdk_suite\<version>\protocol\zigbee\tool\bootloader-em357
    

5.5.2 将加密密钥加载到设备上

以下说明适用于 EM35x 设备并引用 em3xx_load 实用程序。对于 EFR32MG 设备,请按照 UG266: Silicon Labs Gecko Bootloader User's Guide 中的说明进行操作。有关更多可用命令的信息,请参阅 UG162: Simplicity Commander Reference Guide

In order for the secure bootloader to function correctly, a Secure Bootloader key must be loaded in the manufacturer tokens of the device. To load a key into the device use em3xx_load and pass it the key file that was specified previously in AppBuilder.

em3xx_load.exe --ip <ip-address-of-ISA3> --cibtokenspatch <key-file>

Note: The standalone bootloader encryption key is a different manufacturing token then the Secure Bootloader Encryption key.