欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 国产MCU A\B SWAP原理及实操

国产MCU A\B SWAP原理及实操

2025/6/20 19:09:36 来源:https://blog.csdn.net/djkeyzx/article/details/148754354  浏览:    关键词:国产MCU A\B SWAP原理及实操

看到有读者留言说还是没理清A\B SWAP的原理。

今天就以某国产MCU为例,实际演示一番,看看大家在芯片设计时思路是什么。

我们首先回顾下SWAP的基本思想。

SWAP的基本思想是将PFLASH分成两组Bank,Bank A(假设是active)和Bank B(假设是inactive)。

当前版本APP在active Bank运行时,刷写新程序到inactive的Bank,这需要Flash Interface支持RWW(Read While Write)属性。编程完成后进行Bank切换。

在芯片下次启动时,以前inactive bank将变为active,新的APP就开始运行了。

更重要的是SWAP机制可以保证APP始终从相同的地址执行,也就是说咱们只需要维护一个链接脚本,做好工程版本记录即可。

以某国产MCU为例,M4内核,2M Flash,支持SWAP,如下:

图片

测试工程也很简单,定义vector table 就在0地址,代码中判断如果是SWAP OFF就进行SWAP ON(类似UCB刷写),否则就SWAP OFF。除了log,其余代码配置全部相同。

工程A的输出打印为:"Image running at bank A,PC = 0x%x .\r\n",get_pc()"

工程B的输出打印为:"Image running at bank B,PC = 0x%x .\r\n",get_pc()"。

最后各自编译得到bin。

现在我们将image A下载到0地址,将Image B下载到0x100000地址,

图片

我们不停cold reset来观察log,如下:

图片

可以看到,即使在不同Bank上的程序,CPU始终都使用的相同的地址去取指。

那这是怎么做到的呢?

原理应该不难,CPU从Flash进行取指,势必需要经过Flash Contorller进行响应,那么设计时首先在这一层级维护两个状态机:Read 、Program/Erase,这样就能支持不同Bank的RWW;其次在这一层级去判断SWAP是否使能,在进行地址切换即可。

你仔细观察上面两个CASE,它的reset handle都没变。

所以一个小结论:CPU其实不知道SWAP是否打开了,它所有数据、指令访问都是逻辑地址,还需要Flash Controller再翻译一次找到对应的物理BANK,SWAP就在这一层进行处理;

现在您能理解,为什么TC3在使用SOTA时需要关闭CPUx和Flash的直连取指接口了吧。

图片

图片

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词