Microchip : 灵活更新固件——IoT设备的关键

时间:2019-12-19

  物联网(IoT)设备正迅速引入各大市场,从家用电器到医疗设备、再到汽车,应用范围十分广泛;制造商必须通过不断创新和灵活地采用或集成新技术来于竞争对手。为了满足新功能的需求和新法规的要求,设计人员必须将灵活性纳入其产品中,以适应不断发展的IoT生态系统。固件更新不仅能够在客户现场的初始部署期间进行定制,还可以在产品部署到现场后添加新功能/特性,并且支持在使用过程中修复任何固件问题。NOR闪存等非易失性存储器件具有可重复编程能力且可靠性极高,通常可用作固件代码存储介质。通过重新编写器件固件代码(位于器件使用的非易失性存储器中)的一部分,制造商可轻松更新器件功能。想要更新固件时,有三件事情需要考虑:更新哪些/多少代码、更新频率以及执行更新所需的时间(速度)。
  更新哪些/多少固件代码
  在IoT设备的初始设计阶段,必须考虑更新哪些/多少固件代码。相对于不可更新部分,固件的可更新部分必须存储在NOR闪存器件的独立区域中。更新NOR闪存的任何片段都需要先擦除存储器的这一部分,然后将新信息编程到该部分中。NOR闪存分为称为扇区和块的多个部分,它们的大小各有不同。NOR闪存器件(如采用SSTSuperFlash 技术的器件(部件编号SST26VF064B(64 Mb)))分为多个均一的4 KB扇区,各个扇区可单独擦除和重新编程(4 KB = 4 * 1024 * 8位 = 32,762位)。它还可分为更大的8 KB、32 KB和64 KB块,这些块也可单独擦除。因此,一个8 KB块有2个扇区,一个32 KB块有8个扇区,一个64 KB块有16个扇区。图1给出了采用8 KB/32 KB/64 KB块的SST26VF064B的存储器构成。各个块也可以单独进行保护。在对闪存的任何部分执行任何更新前,必须取消保护该部分中的块,以允许擦除和编程操作。完成更新后,谨慎地再次对这些块进行保护,以避免意外写入或擦除这些区域。固件的可更新部分必须以足够灵活的方式划分为扇区和块,以便同时支持有限数量和数量的特性/功能更新。由于执行更新的速度由需要擦除和重新编程的扇区和块数决定,因此在组织固件的可更新部分时,同时考虑速度和灵活性。图2给出了将存储器组织为可更新和不可更新部分的示例。引导代码等不可更新部分存储在受保护区域中。固件的可更新部分(如特性/功能)根据灵活性要求分为较小的块或较大的块。可更新的镜像文件存储在较大的块中,可更新的变量/参数存储在较小的块中。


  Flexibility to Update Firmware Memory Map灵活更新固件存储器映射
  Top of Memory Block
  存储器块顶部
  2 Sectors for 8 KB Blocks 8 Sectors for 32 KB Blocks 16 Sectors for 64 KB Blocks8 KB块对应2个扇区,32 KB块对应8个扇区,64 KB块对应16个扇区Bottom of Memory Block
  存储器块底部
  图1:SST26VF064B的存储器构成(映射)——由8个8 KB块、2个32 KB块和126个64 KB块组成Organizing the memory in non-updatable portions将存储器组织为多个不可更新部分

 


  Non-updatable area e.g. boot code (keep it protected)不可更新区域,例如引导代码(进行保护)
  Updatable area e.g. features/functions code可更新区域,例如特性/功能代码
  Updatable area e.g. images files
  可更新区域,例如镜像文件
  Updatable area e.g. parameter/variable data (Allocate enough blocks to increase endurance)可更新区域,例如参数/变量数据(分配足够的块以提高耐擦写次数)图2:将存储器组织为多个不可更新部分(例如:引导代码)和可更新部分(例如:功能/特性代码、镜像文件代码和参数变量代码)更新频率
  固件更新频率的主要限制是应用中所使用存储器的耐擦写次数限制。SuperFlash技术存储器(如SST26VF064B)的耐擦写次数可达100,000次,这意味着每个扇区可编程和擦除100,000次。固件可以更新100,000次听起来很多;然而,许多IoT设备会在使用期间收集数据并将信息存储在NOR闪存中,因此在计算耐擦写次数限制时必须考虑这一点。考虑到耐擦写次数,必须在存储器中分配足够多的扇区。下面将举例说明:假设IoT设备正在收集和存储16个字节的信息,并且信息预计在产品的使用寿命期间收集和存储1亿次。可以按如下方式计算应当分配的扇区数:
  1个扇区 = 4 KB
  假设扇区中的所有地址单元用于存储信息(存储16个字节的数据),然后写入到一个新的地址单元,直至达到扇区末尾(例如,0x0000-0x000F、0x0010-0x001F、0x0020-0x002F等)由于4 KB/16字节 = 256,这即是达到扇区容量并擦除扇区中任何数据之前可以写入存储介质的次数1个扇区的耐擦写限值 = 100,000次
  因此,如果1个扇区可以写入256次且耐擦写次数为100,000次,则可以收集和存储数据2560万次如果一个应用需要收集和存储数据1亿次,则要分配的扇区数量为100,000,000/25,600,000 = 3.9。因此,在本例中,需要分配4个扇区以在应用的生命周期内存储16个字节的数据。
  IoT设备工程师需要进行类似的计算,以便为数据记录参数分配足够多的扇区和块,以免超出其NOR闪存器件的耐擦写限值。
  更新速度
  可根据需要擦除和重新编程的块和扇区数来计算更新速度。假设需要重新编程SST26VF064B的几个64 KB块中存储的1 Mb、2 Mb或4 Mb固件代码/数据。代码/数据可以由固件代码、镜像文件或需要更新的其他代码组成。更新过程涉及对闪存执行一系列命令指令。序列将从取消保护存储器块开始,然后擦除这些块、用更新的数据/代码进行编程,重新进行保护。对于SST26VF064B,更新1 Mb/2 Mb/4 Mb存储器所需的指令序列如表1所示。从表1中可以看出,两个重要的时间是擦除时间和编程时间。SST26VF064B采用可提供出色擦除性能的SuperFlash技术。SuperFlash技术与传统闪存的擦除和编程性能的比较如表2所示。与传统闪存相比,SuperFlash技术提供的优异擦除性能对于缩短更新时间非常有用。SST26VF064B支持的时钟频率为104 MHz,扇区擦除时间为25 ms,块擦除时间为25 ms,页编程时间为1.5 ms。此外,从发出每条命令指令到闪存以104 MHz时钟频率工作,中间还需要12 ns延时(CE高电平时间)。表1所示的命令序列与编程和擦除时间的知识结合使用时,可计算更新1 Mb/2 Mb/4 Mb SuperFlash技术存储器和传统闪存所需的时间,具体方法分别如表3和表4所示。这些计算必须由IoT设备工程师完成以估算执行更新的速度,目的是缩短更新期间的IoT设备停机时间。
  步骤
  命令指令序列
  时钟数
  1
  SPI_WREN
  8
  2
  SPI_Enable_Ouad_IO
  8
  3
  SQI_WREN
  2
  4
  SQI_写块保护寄存器(取消保护闪存的某个部分)38
  5
  SQl_块擦除64 KB块
  2
  6
  SQI_WREN
  8
  7
  等待25 ms来完成SuperFlash技术存储器的擦除(对于传统闪存的擦除,需等待3000 ms)重复执行步骤5、6和7,直到所需大小的存储空间擦除完毕要擦除1 Mb的数据,步骤5、6和7需要重复(1024*1024)/(64*1024*8) = 2次要擦除2 Mb的数据,步骤5、6和7需要重复(2*1024*1024)/(64*1024*8) = 4次要擦除4 Mb的数据,步骤5、6和7需要重复(4*1024*1024)/(64*1024*8) = 8次8
  SQI_WREN
  2
  9
  SQI_页编程命令后将编程256字节的数据(260乘以2)520
  10
  等待1.5 ms来完成SuperFlash技术存储器的页编程(对于传统闪存的擦除,需等待5 ms)重复步骤8、9和10,直到写入所有数据
  要编程1 Mb的数据,步骤8、9和10需要重复1024*1024/8/256 = 512次要编程2 Mb的数据,步骤8、9和10需要重复2*1024*1024/8/256 = 1024次要编程4 Mb的数据,步骤8、9和10需要重复4*1024*1024/8/256 = 2048次11
  SQI_WREN
  2
  12
  SQI_写块保护寄存器(用于再次保护闪存的某一部分)38
  表1:更新1 Mb/2 Mb/4 Mb存储器的闪存命令指令序列SST26VF064B
  传统闪存
  扇区擦除
  25 ms(长)
  150 ms至3000 ms
  块擦除
  25 ms(长)
  750 ms至3s
  芯片擦除
  50 ms(长)
  15s至80s
  页编程
  1.5 ms(长)
  1 ms至5 ms
  表2:SST26VF064B和传统闪存的编程和擦除时间计算
  时间
  长块擦除时间
  25 ms
  长页编程时间
  1.5 ms
  104 MHz频率下的时钟周期
  9.6 ns
  104 MHz频率下各指令间的CE高电平时间
  12 ns
  时间A. 指令1至指令4的时间 = (56个时钟 * 周期) + (3 * CE高电平时间)573.6 ns
  时间B. 指令5至指令7的时间 = (10个时钟 * 周期) + (2 * CE高电平时间) + (25 ms块擦除等待时间)25000120 ns
  时间C. 指令8至指令10的时间 =
  (522个时钟 * 周期) + (1 * CE高电平时间) + (1.5 ms页编程等待时间)1505023.2 ns
  时间D. 指令11至指令12的时间 = (40个时钟 * 周期) + (1 * CE高电平时间)396 ns
  总时间(即,块擦除和编程1 Mb数据的全部指令的时间)= (时间A) + (时间B * 2) + (时间C * 512) + (时间D)0.820573088 s
  块擦除和编程2 Mb数据的全部指令的总时间 = (时间A) + (时间B * 4) + (时间C * 1024) + (时间D)1.641145206 s
  块擦除和编程4 Mb数据的全部指令的总时间 = (时间A) + (时间B * 8) + (时间C * 2048) + (时间D)3.282289443 s
  表3:更新1 MB/2 Mb/4 Mb SuperFlash技术存储器所需的时间计算
  时间
  长块擦除时间
  3000 ms
  长页编程时间
  5 ms
  104 MHz频率下的时钟周期
  9.6 ns
  104 MHz频率下各指令间的CE高电平时间
  20 ns
  时间A. 指令1至指令4的时间 = (56个时钟 * 周期) + (3 * CE高电平时间)597.6 ns
  时间B. 指令5至指令7的时间 = (10个时钟 * 周期) + (2 * CE高电平时间) + (3000 ms块擦除等待时间)3000000136 ns
  时间C. 指令8至指令10的时间 = (522个时钟 * 周期) + (1 * CE高电平时间) + (5 ms页编程等待时间)5005031.2 ns
  时间D. 指令11至指令12的时间 = (40个时钟 * 周期) + (1 * CE高电平时间)404 ns
  块擦除和编程1 Mb数据的全部指令的总时间 = (时间A) + (时间B * 2) + (时间C * 512) + (时间D)8.562577248 s
  块擦除和编程2 Mb数据的全部指令的总时间 = (时间A) + (时间B * 4) + (时间C * 1024) + (时间D)17.12515349 s
  块擦除和编程4 Mb数据的全部指令的总时间 = (时间A) + (时间B * 8) + (时间C * 2046) + (时间D)34.25030599 s
  表4:更新1 MB/2 Mb/4 Mb传统闪存所需的时间结论
  IoT设备设计工程师需要在更新应用程序代码和数据时提供一定的灵活性。更新哪些/多少代码、更新频率和更新速度是设计IoT设备时需要解决的问题。非易失性存储器的选择会影响这些问题,并在计算代码更新的时间和速度方面起到关键作用。

上一篇:AXI总线的概念及基本特点是什么
下一篇:螺旋板换热器的特点及应用范围

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料