Silabs bootloader fundamentals

Silabs bootloader fundamentals
1.简介
  引导加载程序是存储在保留闪存中的程序,可以初始化设备,更新固件映像,并可能执行一些完整性检查。无论是通过串行通信还是通过无线方式,都可以根据需要进行固件映像更新。生产级编程通常在产品制造过程中完成,但希望能够在生产完成后重新编程系统。更重要的是,能够在部署后使用新功能和错误修复更新设备的固件是很有价值的。固件映像更新功能使这成为可能。

  Silicon Labs支持不使用引导加载程序的设备,但这需要外部硬件,如调试适配器(Silicon Labs ISA3或无线入门工具包(WSTK))或第三方SerialWire / JTAG编程设备来更新固件。没有引导加载程序的设备在部署后无法通过无线方式更新固件,这就是Silicon Labs强烈主张实施引导加载程序的原因。

  2017年3月,Silicon Labs推出了Gecko Bootloader,这是一个可通过Simplicity Studio IDE配置的代码库,用于生成可与各种Silicon Labs协议栈一起使用的引导加载程序。Gecko Bootloader可以与EFR32MG1 / EFR32BG1(EFR32xG1)和EFR32xG1 + Flash一起使用,但是,从EFR32MG12 / EFR32BG12 / EFR32FG12(EFR32xG12)平台开始,它和所有未来的Mighty Gecko,Flex Gecko和Blue Gecko版本将使用仅限Gecko Bootloader。与EmberZNet PRO等特定协议和包括EM3x在内的平台一起使用的传统Ember引导加载程序应用程序将继续用于这些平台。2017年12月,蓝牙SDK(软件开发套件)的2.7.0版本删除了对传统蓝牙启动加载程序的支持。

  Gecko Bootloader和传统的Ember引导加载程序使用自定义的更新映像文件格式,将在本节中进一步介绍

5.引导加载文件格式小号。Gecko Bootloader生成的应用程序引导加载程序使用的更新映像文件是GBL(Gecko BootLoader)文件,旧版Ember引导加载程序使用的是EBL(Ember BootLoader)文件

  可以通过两种方式完成引导加载固件更新映像。第一种是空中下载(OTA),即通过无线网络,如下图所示。


                              
第二种是通过设备的硬连线链接。下图表示使用UART(通用异步接收器/发送器),SPI(串行协议接口)或USB(通用串行总线)接口以及NCP的SoC(片上系统)的串行引导加载程序用例(网络协处理器)使用UART或SPI。
              
Silicon Labs网络设备使用以两种不同模式执行固件更新的引导加载程序:独立(也称为独立引导加载程序)和应用程序(也称为应用程序引导加载程序)。应用程序引导加载程序进一步划分为使用外部存储空间用于下载更新映像的应用程序和使用本地存储的应用程序。这两个引导加载程序类型将在接下来的两节中讨论。

本文档中描述的固件更新情况假设源节点(通过串行或OTA链接将固件映像发送到目标的设备)通过其他方式获取新固件。例如,如果本地Zigbee网络上的设备连接了以太网网关,则该设备可以通过Internet获取或接收这些固件更新。固件更新过程的这一必要部分取决于系统,超出了本文档的范围。
1) 独立引导加载
  独立引导加载程序是使用外部通信接口(如UART或SPI)获取应用程序映像的程序。独立固件更新是一个单阶段过程,允许将应用程序映像放入闪存,覆盖现有的应用程序映像,而无需应用程序本身的参与。独立引导加载程序和在闪存中运行的应用程序之间几乎没有交互。通常,应用程序与引导加载程序交互的唯一时间是它请求重新引导到引导加载程序。一旦引导加载程序运行,它就会通过物理连接(如UART或SPI)或无线电(无线)接收包含(新)固件映像的引导加载数据包。

  启动固件更新过程后,新代码将覆盖现有堆栈和应用程序代码。如果在此过程中发生任何错误,则无法恢复代码并且必须重新开始该过程。有关旧版独立引导加载程序的更多信息,请参阅AN760:使用Ember独立引导加载程序。有关将Gecko Bootloader配置为独立引导加载程序的信息,请参阅UG266:Silicon Labs Gecko Bootloader用户指南。
2) 应用程序启动加载     
  应用程序引导加载程序在运行的应用程序完全下载更新映像文件后开始固件更新过程。应用程序引导加载程序期望映像存在于引导加载程序可访问的外部存储器中或主闪存的一部分中(如果芯片具有足够的内存来支持此本地存储模型)。

  应用程序引导加载程序依赖于应用程序来获取新的固件映像。应用程序可以通过任何方便的方式(UART,无线等)下载该映像,但必须将其存储在称为下载空间的区域中。下载空间通常是外部存储器设备,例如EEPROM或dataflash,但在使用应用程序引导加载程序的本地存储变体时,它也可以是芯片内部闪存的一部分。存储新映像后,将调用应用程序引导加载程序以验证新映像并将其从下载空间复制到闪存。

  由于应用程序引导加载程序不参与获取图像,并且在固件更新过程开始之前下载整个图像,因此下载错误不会对运行图像产生负面影响。可以重新启动或暂停下载过程以随时间获取图像。在启动固件更新过程之前,可以验证下载的更新映像的完整性,以防止应用损坏或无功能的映像。

  传统的Ember应用程序引导加载程序提供UART独立引导加载功能,作为恢复机制,以防正在运行的应用程序映像和升级映像损坏。可以将Gecko Bootloader配置为接受多个升级图像的列表,以尝试验证和应用。这允许Gecko Bootloader存储实际上是更新映像的备份副本,如果第一个映像损坏,它可以访问该副本。

  请注意,EmberZNet和Silicon Labs Thread NCP平台不使用应用程序引导加载程序,因为应用程序代码驻留在主机上而不是直接驻留在NCP上。相反,充当串行协处理器的设备将使用独立的引导加载程序,该引导加载程序设计为通过与预期的NCP固件使用的相同串行接口接受代码。但是,主机应用程序(驻留在NCP的单独MCU上)可以使用适当的任何引导加载方案。Silicon Labs蓝牙NCP可以使用传统的OTA DFU引导加载程序。

  有关应用程序引导加载程序的更多信息,请参阅UG266:Silicon Labs Gecko Bootloader用户指南和AN772:使用软件应用程序引导加载程序。        
2.关于 gecko Bootloader
    Silicon Labs Gecko Bootloader是一个可配置的代码库,可以与所有较新的Silicon Labs Gecko MCU和无线MCU一起使用。它使用称为GBL文件的特殊格式的更新映像文件。Gecko Bootloader采用两级设计,其中最小的第一级引导加载程序用于更新主引导加载程序。这允许主引导加载程序的现场更新,包括添加新功能,更改通信协议,添加新的安全功能和修复程序等。Gecko Bootloader由三个组成部分组成:

核心:引导加载程序核心包含两个引导加载程序阶段的主要功能。它还包含写入内部主闪存,执行引导加载程序更新以及重置应用程序以标记适用的重置原因的功能。

驱动程序:不同的引导加载应用程序需要不同的硬件驱动程序以供引导加载程序的其他组件使用。

插件:主引导加载程序的所有部分都是可选的或可选择用于不同的配置实现为插件。每个插件都有一个通用头文件和一个或多个实现。当前版本包含用于UART和SPI通信协议,SPI闪存,内部闪存和不同加密操作等功能的插件。

1)特征
Gecko Bootloader功能包括:

现场更新
安全启动
签署GBL固件更新映像文件
加密的GBL固件更新映像文件
这些功能在以下部分进行了总结,并在UG266:Silicon Labs Gecko Bootloader用户指南中有更详细的描述。有关使用Gecko Bootloader的特定于协议的信息可在以下文档中找到:
AN1084:将Gecko Bootloader与EmberZNet和Silicon Labs Thread一起使用
AN1085:在Silicon Labs Connect中使用Gecko Bootloader
AN1086:将Gecko Bootloader与Silicon Labs蓝牙应用程序配合使用
a.现场可更新
  Bootloader固件字段更新功能由两阶段设计,第一阶段和主阶段提供。引导加载程序的最小第一阶段(不可现场更新)只能通过读取和写入内部闪存中的固定地址来更新主引导加载程序。要执行主引导加载程序更新,运行的主引导加载程序将验证引导加载程序更新映像的完整性和真实性,将引导加载程序更新映像写入内部闪存中的固定位置,并向第一阶段引导加载程序发出重新引导。在将更新映像复制到主引导加载程序位置之前,第一阶段引导加载程序会验证主引导加载程序更新映像的完整性。
b.安全启动
     安全启动旨在防止不受信任的映像在设备上运行。启用安全启动后,引导加载程序会使用非对称加密技术在每次启动时强制执行应用程序映像的加密签名验证。使用的签名算法是ECDSA-P256-SHA256。在制造期间将公钥写入设备,而私钥保密。这可确保应用程序由受信任方创建和签名。
c.签署GBL更新图像文件
  除了安全启动之外,Gecko Bootloader还支持强制执行更新映像文件的加密签名验证。这允许引导加载程序和应用程序在开始更新过程之前验证应用程序或引导加载程序更新是否来自受信任的源。使用的签名算法是ECDSA-P256-SHA256。公钥与安全引导的密钥相同,在制造期间写入设备,而私钥从不分发。这可确保GBL文件由受信任方创建和签名。
d.加密的GBL更新文件   
    GBL更新文件也可以加密,以防止窃听者获取明文固件映像。使用的加密算法是AES-CTR-128,加密密钥在制造期间写入设备。
2)使用性
  下表显示了可以与不同平台一起使用的引导加载程序。

平台

Gecko Bootloader

Legacy Ember Bootloaders

Legacy Bluetooth Bootloaders

EM3X

NO

YES

*

EFR32MG1/+FLASH

YES

NO**

*

EFR32BG1

YES

NO

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值