英飞凌 AURIX TC3XX系列单片机的SOTA机制详解
1. 什么是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方案。
2. TC3XX的Flash地址映射方式
我们以TC397的Flash为例,用于存储程序代码的PFlash的标准地址映射方式(Standard Address Map)如下,表中PF0-PF5代表物理意义上的5块Flash。
第二种地址映射方式被称为 Alternate Address Map,如下表所示,标准模式下PF0-1的地址范围现在被映射到了PF2-3,PF4的地址范围被映射到了PF5。
3. 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复位的时候才会更新配置。
4. 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的入口地址,也是用来做校验的。
5. SOTA的初始化配置
初始化状态是使用标准地址映射,此时SOTA模式未启用。按以下步骤启用SOTA:
① 用烧写器把APP烧写进PFlash的组A地址处。
② 向MARKERL0写入0x00000055。
③ 向MARKERH0写入MARKERL0的系统地址。
④ 向CONFERMATIONL0写入0x57B5327F。
⑤ 向CONFERMATIONH0写入CONFERMATIONL0的系统地址。
⑥ 将UCB_OTP0中SWAPEN标志位置为Enable。
⑦ 重启MCU。
经过上面的步骤,就事MCU进入了SOTA模式,其中步骤②-⑤是为了启用标准地址映射。手册中给了如下的流程图供参考,其中一些加解密的步骤我这里省略了,暂时没有详细研究:
6. 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机制的介绍,我目前也只是看了手册,还没有实际运用过,有不正确的地方欢迎大家交流讨论。
英飞凌 AURIX TC3XX系列单片机的SOTA机制详解相关推荐
- 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能实现
1.前言 通过前一章了解到了 AURIX TC3XX 系列单片机的 SOTA 功能,下面讲述如何实现 SOTA 功能.以 TC37X 为例,附完整代码实现 在实现 SOTA 功能前,有必要简单了解一下 ...
- 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能介绍
1.前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 SOTA 功能介绍:SOTA 称为软件在线升级,即不依赖下载调试器的情况下,通过CAN.UART等方式实现应用程序的更新. 和O ...
- 英飞凌 AURIX TC3XX 系列单片机的链接文件
前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...
- 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍
前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 Flash,仅对 Flash 简单介绍,方便快速上手使用.下面基于 AURIX TC377 系列介绍. 其中包括 PFlash 和 ...
- 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 功能代码实现
前言 上一篇介绍了 Flash 的一些基本知识,这一篇主要如何进一步封装 illD 库的Flash驱动代码,并进行使用.以 TC37X 为例子,附完整代码实现. 通过封装可以快速上手使用,同时在一定程 ...
- freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行
前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容.这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到 ...
- freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置
Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到 ...
- Aurix TC3xx系列MCU ADC模块简介(一)
文章目录 1 前言 2 ADC模块简介(TC3xx) 1.1 ADC模块特点 1.2 转换器内部结构 1.3 转换时间 3 EDSADC模块简单介绍 >>返回总目录<< 1 前 ...
- 单片机 rs232 c语言,完全手册 51单片机C语言开发详解系列之第8章 串口通讯实战—RS232...
完全手册 51单片机C语言开发详解系列 技术凝聚实力 专业创新出版 第8章 串口通讯实战-RS232接口电路与软件设计 本章主要通过实际的例子讲解AT89S51单片机的RS232串行通讯接口设计. 随 ...
- TI Cotex M3/4单片机关于寄存器操作详解
TI Cotex M3/4单片机关于寄存器操作详解 前备知识 寄存器与偏移量 位带操作.位带区 TI单片机寄存器操作详解 快速在TI的手册里面确认某外设某寄存器的确切地址 寄存器操作介绍 本文参考 前 ...
最新文章
- 022 Spark shuffle过程
- PHP二维数组根据字段排序
- 多线程不重复读取数据_别再犯错了,多线程访问同一个资源一定要上锁?
- 如何处理Angular依赖注入的错误消息: NullInjectorError No provider for EffectsRootModule!
- 步步为营-77-Ajax简介
- JsonRequestBehavior.AllowGet 方便浏览器调试
- python老鼠书名字_芜湖学习python公司推荐
- 为什么量子计算会对我们产生威胁?
- Chrome 开发工具之 Memory
- Windows 7 SP1 旗舰版 MSDN原版
- UE4多人聊天框实现
- 买服务器做网站 镜像选什么,云服务器做网站镜像类型选啥
- AGV项目底层总结二
- 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
- superset 完全汉化
- 小白的编程经验(二维数组迷宫游戏)
- apmserv mysql_解决在本地计算无法启动Apmserv-MySQL5.1服务,错误1067:进程意外终止
- oracle创建列默认值,表列添加默认值的方法
- 2018.1.7 计算机算法课后习题总结
- CCleaner注册码