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机制详解相关推荐

  1. 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能实现

    1.前言 通过前一章了解到了 AURIX TC3XX 系列单片机的 SOTA 功能,下面讲述如何实现 SOTA 功能.以 TC37X 为例,附完整代码实现 在实现 SOTA 功能前,有必要简单了解一下 ...

  2. 英飞凌 AURIX TC3XX 系列单片机的 SOTA 功能介绍

    1.前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 SOTA 功能介绍:SOTA 称为软件在线升级,即不依赖下载调试器的情况下,通过CAN.UART等方式实现应用程序的更新. 和O ...

  3. 英飞凌 AURIX TC3XX 系列单片机的链接文件

    前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...

  4. 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍

    前言 本文讲述的是英飞凌 AURIX TC3XX 系列多核单片机的 Flash,仅对 Flash 简单介绍,方便快速上手使用.下面基于 AURIX TC377 系列介绍. 其中包括 PFlash 和 ...

  5. 英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 功能代码实现

    前言 上一篇介绍了 Flash 的一些基本知识,这一篇主要如何进一步封装 illD 库的Flash驱动代码,并进行使用.以 TC37X 为例子,附完整代码实现. 通过封装可以快速上手使用,同时在一定程 ...

  6. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行

    前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容.这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到 ...

  7. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

    Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到 ...

  8. Aurix TC3xx系列MCU ADC模块简介(一)

    文章目录 1 前言 2 ADC模块简介(TC3xx) 1.1 ADC模块特点 1.2 转换器内部结构 1.3 转换时间 3 EDSADC模块简单介绍 >>返回总目录<< 1 前 ...

  9. 单片机 rs232 c语言,完全手册 51单片机C语言开发详解系列之第8章 串口通讯实战—RS232...

    完全手册 51单片机C语言开发详解系列 技术凝聚实力 专业创新出版 第8章 串口通讯实战-RS232接口电路与软件设计 本章主要通过实际的例子讲解AT89S51单片机的RS232串行通讯接口设计. 随 ...

  10. TI Cotex M3/4单片机关于寄存器操作详解

    TI Cotex M3/4单片机关于寄存器操作详解 前备知识 寄存器与偏移量 位带操作.位带区 TI单片机寄存器操作详解 快速在TI的手册里面确认某外设某寄存器的确切地址 寄存器操作介绍 本文参考 前 ...

最新文章

  1. 022 Spark shuffle过程
  2. PHP二维数组根据字段排序
  3. 多线程不重复读取数据_别再犯错了,多线程访问同一个资源一定要上锁?
  4. 如何处理Angular依赖注入的错误消息: NullInjectorError No provider for EffectsRootModule!
  5. 步步为营-77-Ajax简介
  6. JsonRequestBehavior.AllowGet 方便浏览器调试
  7. python老鼠书名字_芜湖学习python公司推荐
  8. 为什么量子计算会对我们产生威胁?
  9. Chrome 开发工具之 Memory
  10. Windows 7 SP1 旗舰版 MSDN原版
  11. UE4多人聊天框实现
  12. 买服务器做网站 镜像选什么,云服务器做网站镜像类型选啥
  13. AGV项目底层总结二
  14. 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
  15. superset 完全汉化
  16. 小白的编程经验(二维数组迷宫游戏)
  17. apmserv mysql_解决在本地计算无法启动Apmserv-MySQL5.1服务,错误1067:进程意外终止
  18. oracle创建列默认值,表列添加默认值的方法
  19. 2018.1.7 计算机算法课后习题总结
  20. CCleaner注册码

热门文章

  1. Presto中谓词下推在Join算子中处理过程的代码走读
  2. KM算法 PK 最小费用最大流
  3. Spring Boot中默认的Json解析
  4. Unity3D自学笔记——UGUI系统介绍
  5. 去除em斜体的方法_养殖难肥水,不妨用以下方法!
  6. IDEA工具中maven的安装配置以及常遇问题解决
  7. 图片批量添加文件名水印
  8. SWEBOK软件工程知识体系 - 2.软件设计
  9. C#实现TCP和UDP通信
  10. 按键精灵-----颜色插件