当前位置: 首页 > 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的直连取指接口了吧。

图片

图片

相关文章:

  • 生产事故复盘--小问题引发的大事故
  • 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处理
  • 网站开发 属于研发费用吗/百度关键词搜索
  • 网站做的好的tkd/大数据培训班出来能就业吗
  • 做presentation的网站/免费网站推广网站短视频
  • 新疆电商网站建设公司/百度大数据查询平台
  • 比利时网站的后缀/百度网站怎么提升排名
  • 湛江商城网站制作公司/昆明网站seo服务