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更新需要三个步骤:
-
OTA引导加载程序必须被刷新。
-
签名密钥和可选的加密密钥必须烧录。
-
必须使用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个文件:
-
vendor_sign.key —这是私钥,必须由产品制造商安全地保存。
-
vendor_sign.key.pub —这是公钥。
-
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灯的步骤如下
- 使用simplicity Studio为您想要使用的外部Flash创建OTA引导加载程序。 关于如何配置引导加载程序的详细信息,请参见 UG266: Silicon Labs Gecko BootLoader User Guide
a.确保配置符合协议\z-wave\ZAF\CommandClasses\FirmwareUpdate\ota_util.c中的配置
- 修改链接器脚本
a.复制默认链接器脚本protocol/z-wave/ZWave/linkerscripts/zgm13-zw700. ld到您的本地应用程序项目,并设置studio使用该文件链接在Properties -> C/C++ Build-> Settings -> MemoryLayout
- 编辑新的链接器文件
a.将链接器脚本中的FLASH部分从232K扩展到最大264K,以便为应用程序获得更多的代码空间
- 编译应用程序
a.按照前面章节中的步骤生成有效的固件更新文件。