实战演示|AURIX™ TC4x 如何基于串口通信进行SOTA升级

SOTA简介:

AURIX™ TC4x MCU的SOTA功能是用于空中下载(Over-The-Air)的固件升级技术,它可以通过各种通信接口(CAN/LIN/Ethernet)远程更新车载ECU的应用程序,这对于车载ECU的长期维护和功能更新至关重要,是实现软件定义汽车(SDV)的必备功能。本文主要介绍AURIX™ TC4x SOTA功能的实现原理以及demo演示流程。

地址映射:

TC4x A/B swap机制是实现SOTA的基础。理解地址映射关系是理解A/B swap功能的关键。

在TC4Dx中,当未使能A/B swap时,使用的是如下线性地址映射(Linear Address Map)。

1.png

而当使能A/B swap后,使用的是SOTA_MAP_A和SOTA_MAP_B的地址映射:

2.png

3.png

当我们比较线性地址和SOTA_MAP_A地址,可以发现它的Flash sector的地址发生了移动:

4.png

当不使能A/B swap时,每个CPU都有两个2MB的Flash bank,并且可以通过私有总线访问这两个bank。当使能A/B swap后,每个CPU都有属于自己一个Flash bank,并且可以不管在SOTA_A_MAP还是SOTA_B_MAP, 都可以用私有总线访问自己的Flash bank,达到最佳的访问速度。


当使能A/B swap后,如果需要烧录Flash, 则需要使用线性地址,如果需要读取Flash中的数据或者取指,则需要使用SOTA_A_MAP或SOTA_B_MAP地址。这种机制给程序烧录带来了一些麻烦。如果我们现在的工程使用的link文件中的Flash地址是根据SOTA_A_MAP来定义Flash空间,那么:

1)如果在使能A/B swap之前烧录程序,以PF10为例,它在link文件中的定义是0xA0200000 – 0xA03FFFFF, 根据这个地址进行烧录,则实际写入的是PF01区域(0xA0200000 – 0xA03FFFFF), 当使能A/B swap后PF01换到0xA2000000地址。

2)如果在使能A/B swap之后烧录程序,以PF10为例,它在link文件中的定义是0xA0200000 – 0xA03FFFFF,烧录采用的是线性地址,因此烧录0xA0200000地址,实际上写入的是0xA2000000地址(PF01区域)。

所以上述两种情况都是有问题的。在实际情况中如果工程使用的link文件中的Flash地址是根据SOTA_A_MAP来定义Flash空间,那么只有把位于0xA0200000 – 0xA03FFFFF(SOTA_A_MAP的PF10)的程序写入到0xA0400000-0xA05FFFFF的空间(linear address的PF10),然后再使能A/B swap后程序才能正常运行起来。

英飞凌的最新的Memtool中支持这种功能,可以选择Simulate SOTA_A mapping后来进行第一次烧录,这样位于0xA0200000的数据就会从0xA0400000烧录进去。

5.png

UCB操作

UCB0_19/0_20 - UCB_RTC_SWAP_ORIG/_COPY

UCB_RTC_SWAP_ORIG/_COPY这两个UCB中有32个entry, 每个entry可以设置swap mode,在firmware中会去遍历这个UCB的最新的一个entry,当这个entry的swap mode作为本次启动后的swap mode。推荐在写入一个新的entry之后,需要把上一个entry invalidate, invalidate的方法是把_MARKER和_CRCSE域改成0xFFFFFFFF (注意:这种二次写入不会造成ECC错误). 当所有entry写满之后,可以擦除UCB,再从第一条entry重新写入。

这里的UCB_RTC_SWAP_ORIG和UCB_RTC_SWAP_COPY可以进行一样的操作,推荐先操作UCB_RTC_SWAP_COPY,再操作UCB_RTC_SWAP_ORIG。

6.png

UCB0_17/0_18 -UCB_RTC_USERCFG_ORIG/_COPY

UCB_RTC_USERCFG_ORIG/_COPY中的SWAP_ena位域用来使能A/B swap功能。

7.png

8.png

UCB中的CRC计算

在TC4x的UCB中加入CRC校验的机制,即对于UCB中部分关键配置的后面会跟随一个CRC校验码,firmware在检查UCB时会去重新计算CRC,然后和UCB中的CRC校验码进行比较一致后才认为当前UCB的配置是有效的。

_CRCSE为UCB_SWAP中对于每条entry(12字节)的CRC校验码 。

9.png

CRC_RTCUSERCFGO1为UCB_RTC_USERCFG中的CRC校验码,校验范围是前面10个字(40字节)。

10.png

CRC的计算可以参考下面代码:

11.png

在TriCore™ v1.8中集成专门的CRC计算指令:

12.png

也可以利用下面在线CRC计算工具进行确认:

https://crccalc.com/

UCB操作流程

下面三种情况下对于UCB_RTC_SWAP_ORIG/_COPY的操作流程,这三种情况分别为:

1) UCB_RTC_SWAP_ORIG/_COPY为空的时候

2) UCB_RTC_SWAP_ORIG/_COPY的写入entry数小于32时

3) UCB_RTC_SWAP_ORIG/_COPY的entry数满的时候(即32)

13.png

程序烧录流程

首次烧录

1)  软件工程link文件需要根据SWAP_A_MAP的地址映射进行定义,编译产生hex文件

2)  勾选Memtool中“Simulate SOTA_A mapping”选型,烧录hex文件

3)  在Memtool中勾选SOTA A mapping,然后烧录一条新的entry

14.png

4)  在Memtool中使能A/B swap

15.png

在实际项目中以上步骤都可以用烧录器完成,但是需要注意烧录顺序。

运行时的SOTA升级:

1)  在程序运行过程中,需要把新的程序烧录到inactive bank

2)  这里的难点是需对新的程序做地址转换:

  • 当运行在A bank的时候,应该把新的固件根据不同的核(假设每个核的程序都放在自己的Flash bank中)烧录到B bank中

  • 当运行在B bank的时候,应该把新的固件根据不同的核烧录到A bank中

    在demo中定义如下二维数组,分别表示

    -  程序运行在A还是B bank

    -  Core index

    即在程序运行在A bank,新收到的core x的程序需要烧录到0xA0200000, … , 0xA1300000

    即在程序运行在B bank,新收到的core x的程序需要烧录到0xA0000000, … , 0xA1200000

16.png

另外在demo中需要对烧录完后的程序做CRC校验,这里还需要做一次地址转换,因为烧录地址和读取地址是不一样的,前面提到过烧录地址使用的是linear address (绝对地址),而读取的地址是相对地址或者逻辑地址。下面程序完成写入地址和读取地址(相对地址)的转换,读取程序进行CRC校验需要使用相对地址。

17.png

18.png

SOTA Demo:

这个demo利用UART对TC4Dx的程序进行升级,PC上位机使用Python进行开发,硬件使用的是TC4Dx Triboard。

硬件Setup

19.png

当按照了DAS驱动后,可以在PC的设备管理器中看到, COM5为on-board mini-wiggler虚拟出来的一个串口。我们会通过这个串口对MCU的程序进行升级。

20.png

UART通信协议

当烧录初始程序后,TC4Dx的程序通过UART和主机端使用下面协议进行通信,PC端使用Python脚本分别对6个核 的bin文件下载到inactive的Flash bank,最后复位MCU。复位后新的程序生效。

21.png

Hex文件转换

当工程编译完成产生hex文件后,我们使用srecord工具把hex产分成了6个Bin文件(每个核一个bin文件)。下面是hex转成bin的脚本。

22.png

双击generate_app_bin.bat能把hex转成6个bin文件。

Python 安装

上位机是由Python脚本来实现的,所以先要安装Python, 可以在下面地址下载Python:

https://www.python.org/downloads/

23.png

安装完后继续安装pysieral插件:

24.png

如果pip无法识别,可以把“C:\Python27\Scripts”添加到环境变量,然后重启电脑。

烧录脚本

下面是programmer.bat文件中的烧录脚本,用户把python安装路径和on-board miniwiggler模拟出来的虚拟串口号(COMx)换成自己的。

25.png

参考例程:

可以登录IFX community下载参考例程。

1)登录https://community.infineon.com/

2)搜索”Code example of TC4Dx SOTA Demo”

来源:英飞凌汽车电子生态圈

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。