HSE的AB swap功能验证与实现

HSE的AB swap功能验证与实现


前言

本文主要介绍NXP Hse的ab swap功能的验证,以及在开发过程中遇到的问题。
在前面文章完成HSE FW的安装之后,接下来就需要验证HSE 的ab swap功能。首先介绍一下ab swap的原理。

AB SWAP原理

安装hse ab swap之后,我们可以通过调用hse_interface里的SID =
HSE_SRV_ID_ACTIVATE_PASSIVE_BLOCK来实现A B bank之间的切换。切换的原理如下:
请添加图片描述

切换步骤

1.安装HSE ab swap模式后,需要保证B区里也必须有程序的存在。这里实现由两种方式:
第一,在切换前,将active的程序copy到passive;第二,在ld文件内,以bin文件拼接的方
式,在passive block内放置一版程序。
2.调用active passive block函数,完成切换。目前认为,我们在更新完passive的程序之后,
调用该SID之后,硬件执行remapping操作,在一次reset之后,程序还是从0x00400000处执
行。

注意点
1.必须保证passive 有程序,才能确保切换成功。
2.程序的更新地址永远是0x00500000,程序运行起始地址永远是0x00400000
3.ld文件拼接程序时,passive的程序运行其实地址必须是0x00400000,如果有
bootloader,地址信息也和active程序保持一致。

切换服务SID = HSE_SRV_ID_ACTIVATE_PASSIVE_BLOCK 时,代码的实现如下:
该SID是通过MU0_CH1来实现的,函数接口内容如下:
请添加图片描述

调试细节

可以通过UDE查看内存的方式,查看切换前后,单片机内存的变化:
请添加图片描述
请添加图片描述
在切换前后,查看内存变化,执行切换AB的SID之后,ab内存发生了替换。那么,会产生两
种认识:

1.passive区域的程序拷贝到A区域,然后程序表现为总是从0x00440000处开始执行;
2.并未拷贝,只是将原来passive区域的物理地址0x00540000重新remapping为 0x004400000,然后重新启动运行。 在社区的资料来看,目前应该是第二种可能。

潜在切换失败原因

1.HSE 切换服务相关的变量,要放在合理的内存空间,可以参照HSE 安装的潜在失败原因分
析。例如,在切换过程中,存在下面的变量,如果不放在dtcm或者no-cable的话,可能会
导致切换不成功。
请添加图片描述
2.连续两次操作,间隔时间太短,一般认为小于1s.如果连续两次切换,会导致程序死掉。
但是重新上电reset之后,程序仍然会执行切换后block的程序。解释如下图:
请添加图片描述
3.切换时未获取SU权限。但在实际的项目工程中,经调试发现如果不获取SU权限,也可以实现。因此此原因存在疑问。
请添加图片描述
不获取SU权限,也可以实现。因此该建议存在疑问。在本工程文件中,并未使用SU权限。
4.HSE和sbaf版本问题。首先二者版本要保持一致;另外,保证版本是最新的。

几点补充信息

1.SU权限的获取方法。

HSE RM手册里,给出了SU 权限的方法:
从社区下载的OTA demo中也给出了如何申请SU 权限的代码,可以参考S32K312_OTA demo
程序,函数接口如下:
请添加图片描述

2.AB BLOCK指示寄存器。

根据下图,显示DCM的bit17可以显示,哪一个block现在是active或者passive。
实际手册里寄存器DCMSTAT没有该bit:
但在实际调试过程中,是有bit的职位和清除操作的,在切换过程中,该寄存器的值变化如
下:
请添加图片描述
请添加图片描述

3.程序拼接

注意
bootloader和应用有效标志位内容虽相同,但不能同名。否则,编译生成的map文件内,看不到passive的bootloader和app_valid信息:
在这里插入图片描述

4.程序回滚

在更新后的程序存在重大bug,需要将程序回滚时,S32K3芯片的操作流程非常简单:
请添加图片描述


结束语:

本文主要介绍了本人在使用NXP芯片的HSe模块的过程中,实现AB swap的方法以及潜在失败原因。后续会继续更新关于NXP芯片使用过程中心得以及踩过的坑。希望大家能多多批评指正,多多支持,互相进步!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值