英飞凌 AURIX TC3XX系列单片机的SOTA机制详解

2023-11-07 15:30

本文主要是介绍英飞凌 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机制详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/364565

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机