HSE_ABswap双分区功能(一)

本文详细解释了为何采用双分区技术在NXPS32K344芯片的固件更新中实现版本回滚,包括单分区的局限性、双分区的优势与流程,以及地址重映射的重要性,以确保软件更新的可靠性。
摘要由CSDN通过智能技术生成

文章以NXP的S32K344芯片为例

一、为什么要做双分区

1、单分区

一般单分区的项目在更新软件版本时的流程大致如下:

UDS擦除旧版本所占flash空间→UDS写入新版本软件

优点:(1)不需要将flash空间划分,可使用空间更多

缺点:(1)不能进行软件版本回滚。

如果在使用UDS刷写新版本的过程中出现突发情况,导致通信中断,或者通信过程中受到信号干扰,导致下载的数据错误等情况,最后结果都是新版本软件没有成功下载,而旧版本软件已经被擦除掉。那么这个设备就不能继续正常工作了。所以就需要软件回滚功能,在新版本没有成功下载的情况下,也能够继续运行旧版本软件继续工作。

2、双分区

将整个flash空间划分为两个部分,在更新软件时,不对当前正在运行的flash区操作,而操作另一个区,不论更新是否成功都不会影响到当前正在运行的软件程序。

流程如下:

UDS擦除非运行区flash空间→UDS写入新版本软件→软件刷写成功→地址重映射→运行新版本程序

优点:可以进行软件版本回滚,以防刷写失败的情况

缺点:(1)flash空间平分为两个部分,因此可用空间减小。(2)需要进行地址重映射

二、为什么要地址重映射

物理地址与逻辑地址之间是映射关系,并且映射关系是可以改变的,我们在代码中或文件中常见的是逻辑地址。

(S32DS中查看memory)

(部分S19文件)

在我们生成的用于刷写的bin文件、hex文件或者s19文件中的数据是包含有许多逻辑地址的。有函数的首地址,变量的地址等,我们的程序在调用函数或变量时是通过逻辑地址去定位的。例如上图蓝色方框中的绿色方框,它是中断向量表所对应的其中一个逻辑地址。

我们在A区生成的文件,其中包括的是A区的逻辑地址。如果在刷写时通过地址偏移,写入了B区,但是在运行时根据逻辑地址调用函数是找不到我们想要函数的,程序也就不能正常运行。

可能有人会想到,在更新前提前知道要更新在哪个区,生成对应区的文件,进行刷写就不会出现上诉程序运行不了的情况。理论上是可以的,我也试过。但产品在实际使用时,不可能是先去获取更新区情况,再去生成对应的更新文件,并且这样的过程更加繁琐。

所以需要用到HSE系统,将地址重映射。

三、什么是地址重映射

上图是K344的内存分布,默认映射关系是BLOCK0、1映射逻辑地址的0x400000~0x5FFFFF,BLOCK2、3映射逻辑地址的0x600000~0x7FFFFF。经过重映射之后,BLOCK0、1映射逻辑地址的0x600000~0x7FFFFF,BLOCK2、3映射逻辑地址的0x400000~0x5FFFFF。

那么在生成文件时对应的逻辑地址始终为0x400000~0x5FFFFF,更新软件后将地址重映射,就可以使文件中包含的逻辑地址与存放数据的实际逻辑地址相吻合,程序也就能正常运行了。

四、双分区刷写思路

下一章介绍HSE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值