当前位置: 首页 > news >正文

国产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的直连取指接口了吧。

图片

图片

http://www.dtcms.com/a/254268.html

相关文章:

  • 生产事故复盘--小问题引发的大事故
  • Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
  • JavaScript 中 call、apply 和 bind 的区别
  • Unity_VR_如何用键鼠模拟VR输入
  • SSH远程连接
  • Linux 进程概念
  • 【蓝牙】手机连接Linux系统蓝牙配对,Linux Qt5分享PDF到手机
  • 如何将缓存存到客户端浏览器上呢
  • [11-5]硬件SPI读写W25Q64 江协科技学习笔记(20个知识点)
  • VR看房:重塑房地产行业生态的技术革命
  • Vim-vimrc 快捷键映射
  • Minio使用https自签证书
  • Excel学习01
  • 面试题:设计一个分布式“附近的人”功能(如微信附近的人、交友应用位置匹配)
  • 数字华容道智力小游戏微信流量主小程序开源
  • ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
  • DHCP服务
  • 亚马逊云科技中国峰会召开 解码Agentic AI时代企业加速创新路径
  • 猜数字小游戏微信流量主小程序开源
  • [Data Pipeline] docs | Mysql源 | Spark处理
  • c++ STL---vector使用
  • web布局02
  • (十六)深入了解 AVFoundation - 编辑:音视频裁剪与拼接的Demo项目实现
  • 如何将文件从安卓设备传输到电脑?
  • 如何使用 USB 数据线将文件从 PC 传输到 iPhone
  • 编程马拉松的定义、运作与发展
  • Linux内存进阶
  • OpenAI的Prompt工程
  • ABP VNext + MongoDB 数据存储:多模型支持与 NoSQL 扩展
  • 动态规划算法思路详解