基于TC3xx SWAP特性实现SOTA功能的配置和流程

什么是ota
ota:over-the-air technology,即空中下载技术。
ota升级:通过ota方式实现固件或软件的升级。通过无线通信方式实现软件升级,都可以叫ota升级,比如无线以太网/蓝牙等。
hsm:hardware security module 模块保证刷写的安全可靠。
ota 系统功能示意如图1所示:
图1 系统功能示意图
几种常见的ota实现方式比较及优势分析
在进行sota更新时,需要把旧的应用程序擦除,把新的应用程序写入。常规的实现方式需要分别开发bootloader程序和app程序,mcu上电先运行bootloader,bootloader根据情况选择是否跳转到app和是否进行程序更新。具体来说有以下几种方式:
1、方案一
bootloader中内置通讯协议栈,更新时,先向mcu发送指令使其跳转到bootloader,之后先擦除旧app,在接收新app的同时直接将其写入flash的app运行地址处。该方案的优点是不需要额外的flash暂存数据,缺点是bootloader代码更复杂,且如果数据传输发生中断,旧的app将不能被恢复。该方案更适合flash容量较小的mcu。
2、方案二
更新程序时,由app接收更新数据并暂存于flash,再将app更新标志位置位;mcu重启时,bootloader检查更新标志位,如有效,则擦除旧的app,再将暂存于flash的新app数据写入app运行地址处。该方案的优点是更新数据的接收由app完成,bootloader不需要通讯协议栈,代码量更小,且数据传输中断时,原有app不损坏。缺点是需要额外的flash空间暂存更新数据。
3、方案三
在flash中划分出两块相同大小的区域,分为a区和b区,都用来存放app,但同一时间下只有一个区的app是有效的,分别设置一个标志位标识其有效性。初始状态下先将app写入a区,更新的时候,将新的app写入b区,再把a区的app擦除,同时更新两个区的有效性标志位状态。bootloader中判断哪个区的app有效,就跳转到哪个区运行。这种方法不需要重复拷贝app数据,但最大的一个缺陷是ab区的app程序运行地址不同,需要分别编译,从而使得可应用性大大降低。
注释:同时也可以将方案一和方案二相结合,即先采用方案一在bootloader程序中内置通讯协议栈,更新时,先向mcu发送指令使其跳转到bootloader。之后接收更新数据的时候,采用方案二的方法,先将数据暂存于flash,待数据全部接收完成后再擦除旧的app,写入新的app。结合方案一和方案二的优点,且能在没有app或app损坏的状态下实现程序更新。缺点是bootloader代码量更大,flash空间占用更大。
英飞凌aurix tc3xx实现上述sota方案拓扑图,如图2 所示:
图2  tc3xx实现sota方案常见拓扑图
经过上面的分析,可以看到几种常见方案都有其优缺点。但对于tc3xx这一类的mcu来说,flash容量通常都很大,足够用,所以通常可以先把app暂存下来再进行更新,防止数据传输中断导致app不可用。
同时aurix tc3xx也支持ab swap功能。以方案三为例:tc3xx系列如果使能sota功能,它的ab bank flash物理地址支持两种不同物理地址映射到同一个逻辑地址方式(mcu自动从两种物理地址映射一个虚拟地址),从而使得app编译时不需要区分ab区,使用相同的逻辑地址即可,从而避免了方案三的硬伤,为我们提供了一种最佳的sota方案。接下来,我们将以方案三作为基础,结合实例详细讲解使用英飞凌aurix tc3xx如何实现更优的sota。
推荐的ota实现方式详解
tc3xx的flash地址映射方式
首先, tc33x和tc33xed不支持ab swap功能,其他tc3xx设备都能够通过ab swap功能实现sota软件更新。
tc3xx 如果使能了ab swap功能,flash大小实际能用的最少减半,tc3xx各系列ab swap能力如图3所示。
图3  tc3xx支持ab swap功能芯片系列及映射关系
启用sota功能时,通过将pflash拆分为两a和b两个bank的能力,其中一组可以读取和执行bank组,而另一组可以写入新代码。因此虽然单个物理pflash bank中不支持同时读写(rww)功能,但是通过ab分组支持未使用的bank组提供安全可靠地对数据执行写入和擦除操作的能力来实现sota功能。
举例tc387 ab swap特性
为了方便理解英飞凌tc3xx  sota 功能,我们以tc387为例进行分析。tc387 pflash 10m空间映射关系,使能了ab  swap后,实际使用大小为4m,如图4所示:
图4 tc387 pflash 映射关系以及可用pflash大小
tc387的4m pflash地址空间无论是a bank还是b bank, 对于用户来说,统一为虚拟地址0x80000000-0x803fffff 4m地址空间。但是刷写过程中, a bank实际操作物理地址0x80000000-0x803fffff 4m空间,b bank 实际操作物理地址0x8060 0000-0x80af ffff 4m空间。
注意,如果使能了ab swap功能,tc3xx pflash就没有所谓local pflash和global pflash概念,统一理解为global pflash。cpu访问pflash由之前的cpux可以通过local总线访问本pflashx提高访问速度,变为cpux访问pflash只能通过global总线从而稍微增加了cpu访问pflash时间。具体参考图5所示。
图5  sota功能使能后只能通过global总线访问pflash
tc3xx的sota功能描述
当tc387 sota功能激活时,pflash被划分为两部分a bank和b bank,一部分用来存储读取可执行代码(active bank),另一部分可用来写入(inactive bank)即刷写。当app更新完毕后,两个部分互换,即切换上面两种地址映射方式。在标准模式下使用pf0-1作为active bank,后文称作组a,在alternate模式下使用pf2-3作为active bank,后文称作组b,就可以实现第二章节所述方案三,且能写入完全相同的app程序,以相同的地址(逻辑地址)进行运行。
需要注意的是,所有nvm操作都是通过dmu使用pflash的物理系统地址执行的,也就是说,nvm操作总是使用标准的地址映射,而不管选择使用哪种地址映射。“nvm操作”是一个术语,用于任何针对flash的命令,如程序、擦除等,但不包括读取代码。有关sota地址映射的参数在flash中的ucb(user configuration block)中进行配置,在ucb中配置后,只有当下次mcu复位的时候才会更新配置,后文会有详细解释。
tc3xx的sota功能实现详解
实现sota功能所需关注配置项
英飞凌aurix tc3xx实现sota功能主要需要配置如图6所示:
图6 sota功能所需关注配置项
1
sota模式使能ucb_otp.procontp.swapen,该参数决定是否开启sota模式,在寄存器tuning protection configuration中的swapen进行配置,对应ucb定义如下:
使能ab swap功能的ucb定义(ucb32-39是orig, 40-47 copy,建议全部都需要配置,内容可以一样。)如下:
2
配置ucb_swap_orig/ucb_swap_copy中的ucb_swap_orig_markerlx/ucb_swap_copy_markerlx,激活下一次reset需要运行的标准(0x00000055)还是备选(0x000000aa)地址。在寄存器scu_swapctrl中,可以查看当前激活的是标准还是备选地址。
我们参考下面关于sota功能实现的ucb,内容定义:
3
同1描述ucb块,只要使能了sota就会自动禁止cpu通过本地总线访问pflash功能,红色方框中寄存器值自动为1,即禁止。
sota功能实现时swap配置及流程
sota功能应用时:分系统刚启动时swap配置和系统运行时swap配置。
系统启动时swap配置:
如果sota功能使能,那么代码生成的文件至少需要刷进active bank。为了信息安全,建议通过ucb_pflash设置相应的sectors读写保护。
起始地址需要在ucb_bmhd配置好。
如果当前选择的是标准地址,那么0x00000055h需要写入ucb_swap的markerl0.swap这个域。然后通过把markerl0.swap的地址写入markerh0.addr予以确认;同时,将confirmationl0.code的地址写入confirmationh0.addr;同时,将57b5327fh写入57b5327fh予以确认。
ucb_ otp一次性刷写保护以设置所需的otp、wop和标定保护。请注意,任何受otp或wop保护的扇区都不能使用新映像重新编程。
如果使能了hsm,主核代码和hsm代码需要同时刷入到ab bank的pflash s0-s39。
任何受otp保护的hsm扇区都不能使用新映像重新编程。
最后,由于swapen是在ucb_otp里面设置的,所以要在下一个重启后sota的使能才有效。具体流程,参考图7所示:
图7 系统刚启动时swap配置及流程
系统运行时swap配置:
下面是程序正在运行时,需要实现软件swap到新程序的配置流程。
为了可以正确切换到新程序中,首先新的程序需要刷到对应的非激活的pflash bank,如果非激活的bank中对应的sectors使能了读写保护,那么刷写之前要先解保护。
切记:由于nvm特性,pflash 和dflash不能同时操作。因此,在应用程序中运行的eeprom驱动程序和执行boot刷写之间需要进行一些协调。确保要写入的新程序所用的的pflash正确无误。例如:如果在pflash的sota重新编程/擦除期间出现硬故障,可以使用替换逻辑扇区功能(有关更多详细信息,请参阅dmu章节)。此功能允许用户使用“替换逻辑扇区”命令序列将故障逻辑扇区映射到冗余扇区。
由于ucb刷写次数的限制(100次),我们可以通过16 个swap配置依次使用来增加swap的次数(100*16=1600次)。方式流程如下图8所示:
注意:上一次用过的配置,confirmationl(x-1) ) 和confirmationh(x-1) 全写为1。
增加swap次数,可以通过ucb_swap_orig/ucb_swap_copy配置如下寄存器:
增加swap次数方法流程如图8所示:
图8 增加swap次数方法流程
新的配置写好后,选择下一次要激活的程序,等下一次重启即运行新刷写的程序。详细流程如图9所示:
图9 系统运行时swap配置
总结
tc3xx  swap特性实现ota功能后,特别注意以下五点:
flash大小实际能用的最少减半,详情参考图3。
cpu访问flash只能通过global总线从而稍微增加了访问时间,参考图5。详细参数请查相应的数据手册。
pflash的prefetch功能被禁止,同样会稍微影响整个系统的性能。
功能安全方面:active bank 的safety_endinit保护依旧存在,但是inactive bank的safety_endinit保护无效。
信息安全方面:active bank 和inactive bank同样受信息安全相关寄存器的保护。
至此,tc3xx  swap特性实现sota功能的配置和流程介绍完毕。


亚马逊的Amazon Sumerian平台能让使用者能创建丰富和功能齐全的VR和AR体验
谷歌CEO皮查伊:苹果正将隐私变成奢侈品
液晶拼接屏应用环境及保护措施
枭龙战机产能不足?升级工作已完成,巴铁再购买50架
让你轻松了解Mac 细数Mac电脑与PC的九大区别
基于TC3xx SWAP特性实现SOTA功能的配置和流程
SCA规范下FPGA的硬件抽象层设计
3D 打印机的非理性价格战
健身房中的智能魔镜为什么如此受到消费者的喜爱
传华为或8月9日公布自研系统“鸿蒙”,余承东曾称最快今秋面世
基于ISD4004语音芯片和AT89S52单片机的语音播报记
用这么久pandas才知道 category里的这些坑!
中国电信天翼云预计2024年市场规模将达到1512.4亿元
物联网平台的市场庞大,物联网企业的未来到底在哪里?
免费 Commodore 64 SID 芯片音色合成器插件 VSTSID
揭秘TI中国明星产品及其背后的故事
锂电池如何修复呢?
智能云科通过互联网+更有效实现创新资源共享 推动经济转型升级
基于 CPU 的 OpenCL 实现案例解析
电话机器人是如何实现与人对话的