AURIX TC3XX系列最佳的SOTA方案

01
什么是sota?
sota全称是云端软件升级(software updates over the air),就是指在不连接烧写器的情况下,通过can、uart或其它通讯方式,实现应用程序的更新。 在进行sota时,需要把旧的应用程序擦除,把新的应用程序写入。常规的实现方式需要分别开发bootloader程序和app程序,mcu上电先运行bootloader,bootloader根据情况选择是否跳转到app和是否进行程序更新。具体来说有以下几种方式: 方案一:更新程序时,由app接收更新数据并暂存于flash,再将app更新标志位置位;mcu重启时,bootloader检查更新标志位,如有效,则擦除旧的app,再将暂存于flash的新app数据写入app运行地址处。该方案的优点是更新数据的接收由app完成,bootloader不需要通讯协议栈,代码量更小,且数据传输中断时,原有app不损坏。缺点是需要额外的flash空间暂存更新数据。 方案二:bootloader中内置通讯协议栈,更新时,先向mcu发送指令使其跳转到bootloader,之后先擦除旧app,在接收新app的同时直接将其写入flash的app运行地址处。该方案的优点是不需要额外的flash暂存数据,缺点是bootloader代码更复杂,且如果数据传输发生中断,旧的app将不能被恢复。该方案更适合flash容量较小的mcu。 方案三:将方案一和方案二相结合,即在bootloader程序中内置通讯协议栈,更新时,先向mcu发送指令使其跳转到bootloader,之后接收更新数据的时候,采用方案一的方法,先将数据暂存于flash,待数据全部接收完成后再擦除旧的app,写入新的app。该方案结合了方案一和方案二的优点,且能在没有app或app损坏的状态下实现程序更新。缺点是bootloader代码量更大,flash空间占用更大。 方案四:在flash中划分出两块相同大小的区域,分为a区和b区,都用来存放app,但同一时间下只有一个区的app是有效的,分别设置一个标志位标识其有效性。初始状态下先将app写入a区,更新的时候,将新的app写入b区,再把a区的app擦除,同时更新两个区的有效性标志位状态。bootloader中判断哪个区的app有效,就跳转到哪个区运行。这种方法不需要重复拷贝app数据,但最大的一个缺陷是ab区的app程序运行地址不同,需要分别编译,从而使得可应用性大大降低。 经过上面的分析,可以看出来每种方案都有其优缺点,对于flash容量较小的mcu,通常采用方案二,因为没有过多的空间暂存app更新数据。但对于tc3xx这一类的mcu来说,flash容量通常都很大,足够用,所以通常要先把app暂存下来再进行更新,防止数据传输中断导致app不可用。上面的方案一、三、四都能实现,但并不完美。tc3xx系列的sota机制更类似于方案四,但它的flash支持两种地址映射方式,从而使得app编译时不需要区分ab区,使用相同的地址即可,从而避免了方案四的硬伤,为我们提供了一种最佳的sota方案。  
02
tc3xx的flash地址映射方式
我们以tc397的flash为例,用于存储程序代码的pflash的标准地址映射方式(standard address map)如下,表中pf0-pf5代表物理意义上的5块flash。 第二种地址映射方式被称为 alternate address map,如下表所示,标准模式下pf0-1的地址范围现在被映射到了pf2-3,pf4的地址范围被映射到了pf5。
03
tc3xx的sota功能描述
当sota功能激活时,pflash被划分为两部分,一部分用来存储可执行代码(active bank),另一部分可用来读取和写入(inactive bank)。当app更新完毕后,两个部分互换,即切换上面两种地址映射方式。在标准模式下使用pf0-1和pf4作为active bank,后文称作组a,在alternate模式下使用pf2-3和pf5作为active bank,后文称作组b,就可以实现上述方案四,且能写入完全相同的app程序,以相同的地址进行运行。 需要注意的是,所有nvm操作都是通过dmu使用pflash的物理系统地址执行的,也就是说,nvm操作总是使用标准的地址映射,而不管选择使用哪种地址映射。“nvm操作”是一个术语,用于任何针对flash的命令,如程序、擦除等,但不包括读取和执行代码。 有关sota地址映射的参数在flash中的ucb(user configuration block)中进行配置,在ucb中配置后,只有当下次mcu复位的时候才会更新配置。  
04
sota的配置参数
(1)sota mode enable 该参数决定是否开启sota模式,在寄存器tuning protection configuration中的swapen进行配置,定义如下: (2)bank swap 在ucb_swap区域中,对sota模式下使用哪种地址映射进行配置。 ucb_swap区域包含以下内容: 其中最重要的是前四个,我们分别来看一下: ① markerlx (x=0-15) markerl中的swap就是标记使用标准地址映射还是alternate地址映射。 ② markerhx (x=0-15) markerh中存着与之相对应的markerlx.swap的入口地址,是用来做校验的。 ③ confirmationlx (x=0-15) confirmationl是确认代码,要写入固定的0x57b5327f,上面的markerlx.swap才有效。 ④ markerhx (x=0-15) markerh中存着与之对应的 confirmationlx.code的入口地址,也是用来做校验的。  
05
sota的初始化配置
初始化状态是使用标准地址映射,此时sota模式未启用。按以下步骤启用sota: ① 用烧写器把app烧写进pflash的组a地址处。 ② 向markerl0写入0x00000055。 ③ 向markerh0写入markerl0的系统地址。 ④ 向confermationl0写入0x57b5327f。 ⑤ 向confermationh0写入confermationl0的系统地址。 ⑥ 将ucb_otp0中swapen标志位置为enable。 ⑦ 重启mcu。 经过上面的步骤,就事mcu进入了sota模式,其中步骤②-⑤是为了启用标准地址映射。手册中给了如下的流程图供参考,其中一些加解密的步骤我这里省略了,暂时没有详细研究:
06
sota的后续配置
上面说的是第一次启用sota时的配置,下面我们就来看一下sota启用后,进行app更新的步骤: ① 将新的app写入pflash中未激活的部分,即上文提到的inactive bank,并进行准确性校验。 ② 如果新的app被写入组b,则向markerlx.swap写入0x000000aa,启用alternate地址映射模式;如果新的app被写入组a,则向markerlx.swap写入0x00000055,启用标准地址映射模式。(x是0-15的值,从0开始向上递增,由上文可知ucb_swap最多能存储16组标志值,存满后再擦除重新写入。) ③ markerhx.addr、confirmationlx.code和confirmationhx.addr配置同上文。 ④ 向confirmationl(x-1).code再次写入0xffffffff,来使上一组ucb_swap值失效。向pflash再次写入全1的值不会导致pflash操作错误。 手册中给了下面这个流程图供参考:   以上就是tricore tc3xx系列sota机制的介绍,我目前也只是看了手册,还没有实际运用过,有不正确的地方欢迎大家交流讨论。 最后只要将此文章分享至朋友圈,集20个赞,截图后台发给小编,即可获取下图小编整理的一些tc3xx的资料。


l6599d引脚功能及电压要求
太阳能LED照明控制系统处理器的设计
如何为嵌入式软件开发选择编译器
锂电高温存储产气的来源、影响因素及解决方案
怎样辨别戴森吹风机的真假
AURIX TC3XX系列最佳的SOTA方案
二极管4个电路:整流、钳位保护、防反接、续流
分析芯片内部模拟电路的工作原理
5G看中国,射频直采收发信机看TI
IGBT在电机驱动中的主要作用
2012国际半导体展 赛灵思资深副总裁发表3D IC专题演讲
光纤线/双绞线,光纤线/双绞线标准有哪些?
手机信号干扰器是否会影响基站信号
RFID技术在畜牧管理中的主要应用
马克龙提出“空客电池战略”,法国动力电池的“反击”
微星gt83vr评测,两块GTX1080挑战性能极限
三星将代工苹果M1芯片?
真无线蓝牙耳机哪个延迟最低?低延迟无线蓝牙耳机推荐!
金莱特发布2018年半年度报告,实现营业收入4.88亿元
全球10%的笔记本电脑是安徽生产