0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

汽车ECU开发 来源:汽车ECU开发 作者:汽车ECU开发 2022-11-21 09:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是OTA

OTA:Over-the-Air Technology,即空中下载技术。

OTA升级:通过OTA方式实现固件或软件的升级。通过无线通信方式实现软件升级,都可以叫OTA升级,比如无线以太网/蓝牙等。

HSM:Hardware Security Module 模块保证刷写的安全可靠。

OTA 系统功能示意如图1所示:

1eb9a8a2-6934-11ed-8abf-dac502259ad0.png

图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 所示:

1ec0ed6a-6934-11ed-8abf-dac502259ad0.png

图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所示。

1ee91128-6934-11ed-8abf-dac502259ad0.png

图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所示:

1eefaaec-6934-11ed-8abf-dac502259ad0.png

图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所示。

1ef8693e-6934-11ed-8abf-dac502259ad0.png

图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所示:

1f00ee6a-6934-11ed-8abf-dac502259ad0.png

图6 SOTA功能所需关注配置项

1

SOTA模式使能UCB_OTP.PROCONTP.SWAPEN,该参数决定是否开启SOTA模式,在寄存器Tuning Protection Configuration中的SWAPEN进行配置,对应UCB定义如下:

使能AB SWAP功能的UCB定义(UCB32-39是ORIG, 40-47 COPY,建议全部都需要配置,内容可以一样。)如下:

1f2d1fee-6934-11ed-8abf-dac502259ad0.png

1f3364d0-6934-11ed-8abf-dac502259ad0.png

1f5e52b2-6934-11ed-8abf-dac502259ad0.png

1f6b77da-6934-11ed-8abf-dac502259ad0.png

2

配置UCB_SWAP_ORIG/UCB_SWAP_COPY中的UCB_SWAP_ORIG_MARKERLx/UCB_SWAP_COPY_MARKERLx,激活下一次reset需要运行的标准(0x00000055)还是备选(0x000000AA)地址。在寄存器SCU_SWAPCTRL中,可以查看当前激活的是标准还是备选地址。

我们参考下面关于SOTA功能实现的UCB,内容定义:

1f75593a-6934-11ed-8abf-dac502259ad0.png1f7da00e-6934-11ed-8abf-dac502259ad0.png

1f87dd30-6934-11ed-8abf-dac502259ad0.png

1f9647ee-6934-11ed-8abf-dac502259ad0.png

1fbb53a4-6934-11ed-8abf-dac502259ad0.png

3

同1描述UCB块,只要使能了SOTA就会自动禁止CPU通过本地总线访问PFLASH功能,红色方框中寄存器值自动为1,即禁止。

1fc09b7a-6934-11ed-8abf-dac502259ad0.png

1fc585fe-6934-11ed-8abf-dac502259ad0.png

1fd09a48-6934-11ed-8abf-dac502259ad0.png

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所示:

1fda7c34-6934-11ed-8abf-dac502259ad0.png

图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配置如下寄存器:

1f9647ee-6934-11ed-8abf-dac502259ad0.png

1feb935c-6934-11ed-8abf-dac502259ad0.png

1ff34214-6934-11ed-8abf-dac502259ad0.png

20015188-6934-11ed-8abf-dac502259ad0.png

20084e0c-6934-11ed-8abf-dac502259ad0.png

增加SWAP次数方法流程如图8所示:

200eb27e-6934-11ed-8abf-dac502259ad0.png

图8 增加SWAP次数方法流程

新的配置写好后,选择下一次要激活的程序,等下一次重启即运行新刷写的程序。详细流程如图9所示:

2014c664-6934-11ed-8abf-dac502259ad0.png

图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功能的配置和流程介绍完毕。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    41

    文章

    5926

    浏览量

    179567
  • 蓝牙
    +关注

    关注

    119

    文章

    6226

    浏览量

    177568
  • OTA
    OTA
    +关注

    关注

    7

    文章

    623

    浏览量

    37964
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AURIX tc367通过 MCU SOTA 更新逻辑 IC 闪存是否可行?

    你好专家:我的用例是 MCU 通过 SPI 连接到逻辑 IC,逻辑 IC 连接到 8MB 闪存,但 MCU PFLASH 大小为 2MB,通过 MCU SOTA 更新逻辑 IC 闪存是否可行?
    发表于 08-11 06:36

    Aurix TC3xx从HSM写入DFLASH1时出现SQER错误,怎么解决?

    我在使用 Aurix TC364 从 HSM 写入 DFLASH1 时遇到 SQER 错误。 使用的顺序如下: - 验证地址 0xAFC00000、0xAFC10000、0xAFC11000 处的已
    发表于 08-11 06:22

    求助,关于TC387使能以及配置SOTA 中一些问题求解

    你好, 之前我拿到贵司给一个demo,里面有一些使能以及配置SWAP的代码, 这里有些疑问 问题1. 判断SOTA功能是否生效,demo中使用的是 SCU_STMEM1中的bit位
    发表于 08-08 07:31

    请问如何仅使用软件和 TC375 精简板来测量函数调用的堆栈使用情况?

    我想测量 AURIX TriCore™ TC3xx 项目的函数调用的堆栈使用情况。 我不知道该怎么做。 我知道事实上作为硬件我只有一个 TC375 lite 开发板,没有 BlueBox 或任何
    发表于 08-08 07:28

    TC3XX 的端口可以同时被 EvADC 和 DSADC 用于 ADC 转换吗?

    1、TC3XX 的端口可以同时被 EvADC 和 DSADC 用于 ADC 转换吗? 例如,TC36X系列的AN1引脚 2、同时重新分配同一个引脚,是否会影响EVAADC和DSADC的转换结果的精度和速度?
    发表于 08-07 08:19

    两片TC3XX芯片之间的时钟同步可以实现吗?

    实现两片TC3XX芯片之间的时钟同步,希望两片芯片的PWM输出能够同步。类似功能的芯片能实现上述操作吗?期待你的答复。非常感谢!!!
    发表于 08-04 07:51

    TC3XX无法通过UDE写数据怎么解决?

    我在使用UDE通过JTAG口连接MCU时,发现UDE只能读软件里的变量,但不能写变量的值。在UDE的Watches窗口中,只要修改某个变量的值,该值立即恢复为修改前的样子,而且UDE的Message窗口没有任何异常信息报出。不仅是UDE,我们使用VX1000通过JTAG口连接时,也出现了同样的异常,这导致VX1000无法正常工作。
    发表于 07-30 07:31

    TC3XX /TC1.6.2OCDS如何通过软件启用核心调试控制器?

    如何通过软件启用核心调试控制器?也就是说可以通过软件读取DBGSR.DE =1。参考TriCore™ TM TC1.6.2 核心架构手册第 1 卷。
    发表于 07-30 06:27

    禁用直接LPB访问,如何与TC3x 上的 SWAPEN 协同工作?

    禁用直接 LPB 访问 (xDDIS) 位可通过 TC37x 的 FLASHCON4 和 PROCONTP 进行配置。在 SOTA 场景中,我们应该如何配置上述两个寄存器? 如果我启用
    发表于 07-29 10:26

    TC397XX如何使用 EB 堆栈处理 IRQ?

    我们正在使用 TC397XX。我遇到的问题是 EB Stack 中没有 IRQ 驱动程序。那么,我们如何使用 EB 堆栈处理 IRQ。 从哪个 AUTOSAR 版本开始,IRQ 驱动程序被删除了?
    发表于 07-15 06:20

    Aurix TC36x MTU SSH4 和 SSH9寄存器值错误的原因?

    有所不同。 我一直不明白,为什么 MTU SSH4 和 SSH9 会在不改变 DMU_HF_PROCONRAM 寄存器的情况下发生改变 根据 TC3xx 安全手册 2.0,只要 SSH4 和 SSH9
    发表于 07-14 07:52

    请问CCG5中怎么做DR_SWAP

    请教个问题,在 CCG5代码中怎么实现DR_SWAP?我们配置了端口 0 作为源对外充电,但是我们希望 PORT0 做了 UFP。我们是这样写的代码:案例 APP_EVT_PD_合同谈判_完成
    发表于 05-26 07:23

    当 ccg3pa 收到 pr_swap 命令时,它不会执行 eval_pr_swap 函数,为什么?

    角色交换命令。 我在 swap.c-eval_pr_swap 函数中添加了调试 uart 消息。 但我发现,当 ccg3pa 收到 pr_swap 命令时,它不会执行 eval_pr_swa
    发表于 05-26 06:15

    请问tc3xx如何配置多个dedicatedRxBuffersNumber?

    tc3xx如何配置多个dedicatedRxBuffersNumber?
    发表于 04-21 07:53

    基于Infineon TC4D9+TLF4D985的Aurix StartKit

    英飞凌推出新一代AURIX TC4xx系列MCU,专为电动汽车和自动驾驶技术设计,解决处理器性能瓶颈,降低系统成本,加速产品上市。 在电池管理系统(BMS)中,TC4xx通过强大的PPU实现精准电池
    的头像 发表于 04-16 14:16 1260次阅读
    基于Infineon <b class='flag-5'>TC</b>4D9+TLF4D985的Aurix StartKit