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

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

3天内不再提示

基于Aurix TC3xx SWAP机制的SOTA实现

汽车ECU开发 来源:开心果 Need Car 2023-06-10 15:40 次阅读

随着芯片资源的不断扩充,增加了App(Application)升级方式的多样性。比如,本文要讨论的SOTA(Software Updates Over The Air),通过Aurix TC3xx SWAP机制,使得App的升级更加便捷。本文讨论实现SOTA的一些关键性问题:

Aurix TC3xx的内存映射机制

SWAP配置及注意事项

1 Aurix TC3xx的内存映射机制

如果要支持SWAP功能,首先,硬件的内存资源需要足够。因为SWAP功能需要两个等大小的物理内存空间,用以存储程序。eg:App程序的大小为3Mbyte,如果要支持SWAP功能,至少需要硬件的PFlash空间>6Mbyte。先看一下TC39x手册中的内存空间及映射机制:

一、Standard Address Map

不启用SOTA功能时,App程序可以存在如下所示的PF0(Program Flash0)~ PF5(Program Flash5)中,空间大小共计16Mbyte,16Mbyte的空间划分在Segement A,如下所示:

9cd09518-0743-11ee-962d-dac502259ad0.png

、Alternate Address Map

启用SOTA功能时,PFlash被划分为两个Bank Group,即:A-Banks和B-Banks,这也就是我们常说的A/B分区,其中一个Banks被映射到CPU的可执行空间,这个Banks被称为激活区(Active Banks),未被映射到CPU执行空间的Banks被称为非激活区(Inactive Banks)。其中,PF0、PF1、PF4映射到A-Banks,PF2、PF3、PF5映射到B-Banks,如下所示:

9cfcc8c2-0743-11ee-962d-dac502259ad0.png

对于TC39x,SWAP的空间可以达到7MByte,A/B分区如下所示:

9d1defe8-0743-11ee-962d-dac502259ad0.png

A-Banks和B-Banks各使用7M的物理内存空间,而程序实际运行时,均可以映射到0xA0000000起始的虚拟地址空间,如下所示: 9d39c09c-0743-11ee-962d-dac502259ad0.png

注意:

通过DMU(Data Memory Unit)操作Flash时,需要操作Pflash映射的物理地址空间。即:Active Banks擦除Inactive Banks时,需要按照Inactive Banks映射的地址空间擦/写。

eg:A-Banks(Active Banks)的起始地址0xA0000000,B-Banks(Inactive Banks)的起始地址0xA0600000,A-Banks操作Flash Driver擦/写B-Banks时,操作的起始地址为0xA0600000。

2 SWAP配置及注意事项

1、SWAP使用的基本流程

对于SWAP功能的使能,包括基本的4个流程:

调整Linker文件(链接文件);

软件开发,主要指App程序开发,生成可执行文件(*.bin、*.Hex等);

将可执行文件烧录到PFlash中;

配置SWAP,包括:A/B选择配置,SWAP使能。

对应流程如下所示:

9d56eaaa-0743-11ee-962d-dac502259ad0.png

注意:这里的Reset,不能是Application Reset,推荐System Reset。 (1)调整Linker文件 这里给出一个Linker文件调整的示意(不带HSM(Hardware Security Module)),如下所示:

9d77eb24-0743-11ee-962d-dac502259ad0.png

对于TC397,A/B均可以分配7M空间,之后根据调整的链接文件,分别编译Project A和Project B,即:Project A对应A-Banks的Linker A,Project B对应B-Banks的Linker B,一般处理时,Linker A和LinkerB共用同一个链接文件。 本文关注的核心点:Configuring SWAP。

2、SWAP配置

配置SWAP,需要配置UCB23(ORIG)和UCB31(COPY),选择映射地址。UCB位于DFlash0区域,UCB23(ORIG)和UCB31(COPY)的地址空间范围如下所示:

9d9c62d8-0743-11ee-962d-dac502259ad0.png

UCB23的格式固定如下:

9dc05648-0743-11ee-962d-dac502259ad0.png

SWAP的实例最多可以配置16个,但是,固件SSW(Startup Software)只选择最后一个有效的执行。 (一)UCB_SWAP_ORIG_MARKERLx(x=0~15) SWAP位域设置地址映射方式,即:上述提到的STD(Standard Address Map,0x55),ALT(Alternate Address Map,0xAA),如下所示:

9ded8bf4-0743-11ee-962d-dac502259ad0.png

(二)UCB_SWAP_ORIG_MARKERHx(x=0~15)

9e1433a8-0743-11ee-962d-dac502259ad0.png

MARKERHx中存放对应MARKERLx.SWAP的入口地址。

(三)UCB_SWAP_ORIG_CONFIRMATIONLx(x=0~15)

9e3551b4-0743-11ee-962d-dac502259ad0.png

如果要MARKERLx.SWAP有效,需要在UCB_SWAP_ORIG_CONFIRMATIONLx寄存器中写入固定值0x57B5327F。

(四)UCB_SWAP_ORIG_CONFIRMATIONHx(x=0~15)

9e4ec6ee-0743-11ee-962d-dac502259ad0.png

存放CONFIRMATIONLx.CODE的入口地址。

(五)SWAP配置的代码实现

SWAP的配置是SWAP使能的前提,如上的(1)~(4)的代码实现示意如下:

/* Memory A/B SWAP */
voidSwap_ConfigAndEnable(uint32map)
{
/*UCB_SWAP_COPY*/
    ucb_erase(UCB_SWAP_COPY);
    ucb_write(UCB_SWAP_COPY, map, UCB_SWAP_COPY);
    ucb_write(UCB_SWAP_COPY + 8, CONFIRMEDCODE, UCB_SWAP_COPY + 8);
ucb_write(UCB_SWAP_COPY+0x1F0,UNLOCKCODE,0x00000000);
/* UCB_SWAP_ORIG */
    ucb_erase(UCB_SWAP_ORIG);
    ucb_write(UCB_SWAP_ORIG, map, UCB_SWAP_ORIG);
    ucb_write(UCB_SWAP_ORIG + 8, CONFIRMEDCODE, UCB_SWAP_ORIG + 8);
ucb_write(UCB_SWAP_ORIG+0x1F0,UNLOCKCODE,0x00000000);


/* EnableSWAP */
    ucb_write(UCB_OTP0_COPY + 0x1E8, 0x00030000, 0x00000000);
    ucb_write(UCB_OTP0_ORIG + 0x1E8, 0x00030000, 0x00000000);
}

SWAP的禁用代码示意如下:

/*SWAPDisable */
void swap_disable(void)
{
    // Erase UCB31(UCB_SWAP_COPY)
    ucb_erase(UCB_SWAP_COPY);
    // Write Confirmation Code into UCB31
    ucb_write(UCB_SWAP_COPY + 0x1F0, UNLOCKCODE, (uint32)0x00000000);


    // Delete UCB23(UCB_SWAP_ORIG)
    ucb_erase(UCB_SWAP_ORIG);
    // Write Confirmation Code into UCB23
    ucb_write(UCB_SWAP_ORIG + 0x1F0, UNLOCKCODE, (uint32)0x00000000);


    // Erase UCB40(UCB_OTP0_COPY)
    ucb_erase(UCB_OTP0_COPY);
    // Write Confirmation Code into UCB40
    ucb_write(UCB_OTP0_COPY + 0x1F0, UNLOCKCODE, (uint32)0x00000000);


    // Erase UCB32(UCB_OTP0_ORIG)
    ucb_erase(UCB_OTP0_ORIG);
    // Write Confirmation Code into UCB32
    ucb_write(UCB_OTP0_ORIG + 0x1F0, UNLOCKCODE, (uint32)0x00000000);
}

提示:

这里的map = 0x55或者0xAA;

UCB23对应的CONFIRMATION寄存器配置成UNLOCKCODE模式(0x43211234)。

3、SWAP使能 SWAP的使能需要配置UCB_OTPx_ORIG(x = 0~7),如下所示:

9e72c62a-0743-11ee-962d-dac502259ad0.png

启动阶段,SSW会校验UCB_OTP0~7:

默认校验UCB_OTP0(在CONFIRMED或者UNLOCKED状态下均会校验);

对于UCB_OTP1~7,只有在CONFIRMED状态下才会校验;

如果ORIG区无效,会校验对应的COPY区。

使能SWAP,需要配置UCB32的PROCONTP寄存器(Offset = 41E8H),即:向0xAF4041E8地址写入0x00030000

9e95e9c0-0743-11ee-962d-dac502259ad0.png

SWAP的初始化流程如下所示:

9ee0e916-0743-11ee-962d-dac502259ad0.png

注意:使能SWAP功能之前,需要确保UCB_SWAP_ORIG和UCB_SWAP_COPY已完成配置。SWAPEN配置使能以后,执行System Reset生效。 当UCB32的PROCONTP寄存器配置使能以后,可以通过读取HF_PROCONTP的SWAPEN位域确认SOTA的使能情况,如下所示:

9f083750-0743-11ee-962d-dac502259ad0.png

软件可以通过读取SCU_STMEM1寄存器的SWAP_CFG位域确认当前激活的Banks,如下所示:

9f3193fc-0743-11ee-962d-dac502259ad0.png

4、SWAP配置不当导致的锁板风险

对于SWAP的使用,要特别的注意,否则就会导致板子锁死,且不可不恢复,如下所示:

9f59db82-0743-11ee-962d-dac502259ad0.png

审核编辑:汤梓红

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

    关注

    447

    文章

    47788

    浏览量

    409143
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72765
  • SWAP
    +关注

    关注

    0

    文章

    47

    浏览量

    12636
  • Aurix
    +关注

    关注

    1

    文章

    70

    浏览量

    10768

原文标题:基于Aurix TC3xx SWAP机制的SOTA实现 | 附demo下载

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    英飞凌TC3XX系列多核MCU学习笔记(3)

    TC3XX 系列属于AURIX™ 2G系列,AURIX™ 2G系列系列单片机采用的是TC1.6.E和TC1.6P的核心组合。使用的是32位哈
    发表于 09-19 10:00 963次阅读
    英飞凌<b class='flag-5'>TC3XX</b>系列多核MCU学习笔记(3)

    TC3xx芯片的Endinit功能详解

    上锁Endinit。那什么是Endinit功能了? -- 本文就来详细解锁TC3xx芯片的Endinit机制
    的头像 发表于 11-27 09:23 817次阅读
    <b class='flag-5'>TC3xx</b>芯片的Endinit功能详解

    英飞凌TC3xx系列安全管理单元的使用

    本篇文档主要用来介绍英飞凌基于AURIX-2G TriCore 1.6.2架构的 TC3xx系列安全管理单元的使用。
    的头像 发表于 12-07 09:29 968次阅读
    英飞凌<b class='flag-5'>TC3xx</b>系列安全管理单元的使用

    AURIXTC3XX如何暂时仅启用/禁用CAN中断?

    你我使用的是 AURIXTC3XX。 在 CAN ISR 处理期间,如何暂时仅启用/禁用 CAN 中断?
    发表于 01-18 06:47

    Pflash恢复保护命令最终会在Aurix TC3xx控制器上重置目标是为什么?

    我正在连接 T32 调试器的 Aurix TC3xx 控制器评估板上测试 Pflash 读/写保护机制,我配置了 UCB_pFlash 和 UCB 调试,我成功解锁了 Pflash 保护,然后尝试再次锁定保护,最终进入目标重置。
    发表于 01-24 06:42

    SWAP是否适用于两个用于TC3xx系列控制器的独立软件?

    目前正在使用 Swap/Partitions 概念实现 SOTATC3xx 系列)。 检查为应用程序和引导加载程序实施 SOTA 的可行性
    发表于 01-30 07:56

    TC3xx系列怎么禁用trap?

    目前在TC3xx调试flash读写功能,单独运行flash相关功能没有问题,但将flash相关功能集成到工程中。操作pflash就会进入trap中,查看了一些帖子说是要禁掉trap?请问怎么禁用trap?目前没找到相关函数
    发表于 01-31 06:21

    TC3xx系列是否支持RTC功能?

    请教各位,TC3xx系列芯片是否支持RTC功能,目前要记录snapshot的时间点(年月日时分秒)。
    发表于 02-02 07:53

    GCC和TASKING有什么区别?应该为AURIXTC3xx选择什么?

    GCC 和 TASKING 有什么区别? 我应该为 AURIXTC3xx 选择什么? 这将如何影响代码的运行?
    发表于 03-01 10:09

    英飞凌AURIX单片机的相关资料推荐

    包括AURIX™ -TC2xx Microcontroller TrainingAURIX™ -TC3xx Microcontroller TrainingAURIX™ TC2xx I
    发表于 01-27 07:28

    英飞凌AURIX单片机TC3xx系列助力电动交通发展

    为满足自动驾驶汽车和电动车的市场需求,英飞凌科技股份公司近日发布新一代 AURIX™单片机,即TC3xx,它是市场上同类器件中集成度最高的产品,实时性能是现有器件的3倍。
    发表于 03-24 13:42 5671次阅读

    关于英飞凌AURIX™单片机TC3xx系列的性能和应用

    英飞凌副总裁兼控制器业务总经理Peter Schaefer表示:“AURIX TC3xx系列器件将推进自动驾驶和电动汽车的发展。能够推出新一代高性能多核单片机,我们颇感到自豪,它将设立新的性能标准,其性能、加密和安全功能全都符合ISO 26262 ASIL-D体系要求。
    的头像 发表于 09-24 17:36 6891次阅读

    英飞凌 AURIX 单片机 培训文档链接

    包括AURIX™ -TC2xx Microcontroller TrainingAURIX™ -TC3xx Microcontroller TrainingAURIX™ TC2xx I
    发表于 12-03 16:06 19次下载
    英飞凌 <b class='flag-5'>AURIX</b> 单片机 培训文档链接

    英飞凌AURIX TC3xx和TRAVEO T2G系列微控制器介绍

    英飞凌市场领先的 AURIX TC3xx 和TRAVEO T2G 车用 MCU将率先支持Rust语言。虽然TRAVEO 使用的是 Rust 官方工具链和Arm Cortex-M 目标架构,但英飞凌的工具合作伙伴 HighTec EDV-Systeme 为
    发表于 06-20 15:07 535次阅读
    英飞凌<b class='flag-5'>AURIX</b> <b class='flag-5'>TC3xx</b>和TRAVEO T2G系列微控制器介绍

    AURIXTC3xx荣膺“金辑奖·中国汽车新供应链百强”

    2023年10月19日,由盖世汽车主办的2023第五届“金辑奖”颁奖典礼在上海隆重举行, 英飞凌AURIX TC3xx单片机,凭借强大的运算能力
    的头像 发表于 11-10 15:22 1301次阅读
    <b class='flag-5'>AURIX</b>™ <b class='flag-5'>TC3xx</b>荣膺“金辑奖·中国汽车新供应链百强”