Z-Wave 700应用程序框架第七章 – 固件更新和引导加载程序

本节的目的是描述如何生成和管理固件更新映像。 ZW700 SDK附带三个引导加载程序映像。 一个是FG14模块的OTW图像。 这个引导加载程序只适用于运行SerialAPI的FG14设备。

另外两个引导加载程序是用于ZGM130S模块的OTA引导加载程序和用于ZGM130S的OTW引导加载程序。 OTA引导加载程序需要所有基于ZW700的设备,实现固件更新; OTW引导加载程序适用于设备,这些设备使用从另一个主机控制器的串口更新固件。 当使用FIRMWARE_UPDATE命令类通过空中传输映像时,OTA引导加载程序将被触发。 传输的映像必须是GBL (Gecko Boot Loader)格式的映像。 SDK中提供的引导加载程序需要对GBL映像进行签名。

执行OTA更新需要三个步骤:

  1. OTA引导加载程序必须被刷新。

  2. 签名密钥和可选的加密密钥必须烧录。

  3. 必须使用FirmwareUpdate Command Class传输签名的映像。

OTA密钥位置如下所示,取决于SoC:

ZGM13: protocol\z-wave\BootLoader\sample-keys

EFR32ZG14P:protocol\z-wave\BootLoader\ZG14_keys

关于引导加载程序的更多信息可以在Silicon Labs, UG266, Gecko Bootloader User’sGuide中找到。

1 生成GBL文件

要生成OTA更新所需的GBL文件,必须首先创建签名对。 它的意图是,供应商将在产品的生命周期内保留签名对。 这些密钥用于在产品的整个生命周期内对所有固件版本进行签名。 还必须创建一个加密密钥,该密钥用于加密GBL文件。 加密使得盗版者更难复制产品。

签名密钥可以通过使用Simplicity commander命令行接口创建。

commander.exe gbl keygen --type ecc-p256 -o vendor_sign.key
这一步将创建3个文件:

  1. vendor_sign.key —这是私钥,必须由产品制造商安全地保存。

  2. vendor_sign.key.pub —这是公钥。

  3. vendor_sign.key-token.txt—这是另一种格式的公钥,可以在制造时使用simple commander将其编程到设备中。

供应商可以选择为其所有产品使用这样的密钥对,或者为每种产品类型使用这样的密钥对。

加密密钥的生成方式如下:

commander.exe gbl keygen --type aes-ccm -o vendor_encrypt.key
一旦获得这两个密钥,就可以生成一个GBL文件,如下所示:

commander.exe gbl create appname.gbl --app appname.hex --sign vendor_sign.key --encrypt vendor_encrypt.key --compress lz4
每次产生新固件时都应该这样做。

2 烧录引导加载程序和应用程序

可以使用commander.exe刷新引导加载程序,包括公共签名密钥和加密密钥。 下面的列表显示了以SN 440049475为例的板的commander.exe的参数:

擦除Flash:devicemasserase -s 440049475 -d Cortex-M4

复位:device reset -s 440049475 -dCortex-M4

擦除Bootloader:device pageerase --region @bootloader -s 440049475 -d Cortex-M4

擦除Lockbits:device pageerase --region @lockbits -s 440049475 -d Cortex-M4

烧录Bootloader:flash C:\dk2\Apps458\BootLoader_7.11.0_458\OTA-bootloader-fg13-combined.s37 -s 440049475 -d Cortex-M4

烧录Keys:flash--tokengroup znet –tokenfileC:\dk2\Apps458\BootLoader_7.11.0_458\sample_encrypt.key --tokenfileC:\dk2\Apps458\BootLoader_7.11.0_458\sample_sign.key-tokens.txt -s 440049475 -dCortex-M4

擦除Flash:devicemasserase -s 440049475 -d Cortex-M4

复位:device reset -s 440049475 -dCortex-M4

烧录应用程序:flash"C:\dk2\Apps458\PowerStrip\ZW_PowerStrip_7.11.0_458_ZGM130S_REGION_IN.hex"--address 0x0 -- serialno 440049475 --device Cortex-M4

复位:device reset -s 440049475 -dCortex-M4

如果命令在Windows Powershell上运行,则需要在步骤3和步骤4中进行少量修改:

擦除Bootloader:device pageerase --region "@bootloader" -s 440049475 -dCortex-M4

擦除Lockbits: args:device pageerase --region "@lockbits" -s 440049475-d Cortex-M4

注意,Bootloader程序和Key不会被正常的模擦除删除。

3 构建自定义引导加载程序

与SDK一起提供的引导加载程序是为了使用内部flash存储下载的OTA映像而构建的。 这种设计确保了产品的最低HW成本,但也减少了应用程序可用的代码空间。 在一些产品中,可能需要有更多的代码空间,这可以通过在外部Flash中拥有OTA图像来实现。 如果使用此选项,则必须构建一个替代引导加载程序并将其编程到产品上。

使用外置flash灯的步骤如下

  1. 使用simplicity Studio为您想要使用的外部Flash创建OTA引导加载程序。 关于如何配置引导加载程序的详细信息,请参见 UG266: Silicon Labs Gecko BootLoader User Guide

a.确保配置符合协议\z-wave\ZAF\CommandClasses\FirmwareUpdate\ota_util.c中的配置

  1. 修改链接器脚本

a.复制默认链接器脚本protocol/z-wave/ZWave/linkerscripts/zgm13-zw700. ld到您的本地应用程序项目,并设置studio使用该文件链接在Properties -> C/C++ Build-> Settings -> MemoryLayout

  1. 编辑新的链接器文件

a.将链接器脚本中的FLASH部分从232K扩展到最大264K,以便为应用程序获得更多的代码空间

  1. 编译应用程序

a.按照前面章节中的步骤生成有效的固件更新文件。