看到有读者留言说还是没理清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.pswp.cn/web/84771.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84771.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84771.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测neck经典算法之FPN的源码实现

┌────────────────────────────────────────────────────┐│ 初始化构造 (__init__) │└─────────────────────────────────────────────…

extern关键字:C/C++跨文件编程利器

在 C 和 C 中,extern 是一个关键字,用于声明变量或函数是在其他文件中定义的。它主要用于实现多个源文件之间的符号共享。 目录 📌 一、C语言中的 extern 1. 基本作用 2. 示例说明 定义全局变量(只在一个 .c 文件中&#xff…

编程语言的演化与选择:技术浪潮中的理性决策

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么“选对语言”比“掌握语言”更重要? 在软件开发的世界里,语言是一切的基础。…

【StarRocks系列】StarRocks vs Mysql

目录 StarRocks 简介 核心特性 典型应用场景 StarRocks vs MySQL:核心区别详解 关键差异总结 如何选择? StarRocks 简介 StarRocks 是一款高性能、全场景、分布式、实时分析型的数据库(MPP - 大规模并行处理)。它诞生于解决…

Axios 知识点全面总结

文章目录 Axios 知识点全面总结一、Axios 基础概念1. 什么是 Axios?2. 核心特性 二、安装与基本用法1. 安装2. 基本请求示例 三、请求方法与参数四、请求配置选项(config)五、拦截器(Interceptors)六、错误处理七、取消…

【软考高级系统架构论文】论 SOA 在企业集成架构设计中的应用

论文真题 企业应用集成(Enterprise Application Integration, EAI)是每个企业都必须要面对的实际问题。面向服务的企业应用集成是一种基于面向服务体系结构(Service - Oriented Architecture, SOA)的新型企业应用集成技术,强调将企业和组织内部的资源和业务功能暴露为服务,实…

springboot 提供的可扩展接口

一、spring 和 springboot Spring框架提供了全面的基础架构支持。包含依赖注入和开箱即用等模块,如:Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test Spring Boot 约定大于配置-----消除了设置Spring应用程序所需…

python学习打卡day55

DAY 55 序列预测任务介绍 知识点回顾 序列预测介绍 单步预测多步预测的2种方式 序列数据的处理:滑动窗口多输入多输出任务的思路经典机器学习在序列任务上的劣势;以随机森林为例 作业:手动构造类似的数据集(如cosx数据&#xff09…

Leetcode hot100 Java刷题

文章目录 快排146. LRU 缓存acm模式树的前中后序遍历acm模式链表的基本操作1. 两数之和49. 字母异位词分组128. 最长连续序列283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水53. 最大子数组和56. 合并区间73. 矩阵置零48. 旋转图像141. 环形链表142. 环形链表 II24. 两两…

Linux 命令详解 —— 进程管理

文章目录 精通Linux操作系统(以Centos7为例)进程管理ps常用组合进程状态 STAT 详解高级筛选与格式化输出按条件过滤进程自定义输出字段显示进程树关系排障场景定位高 CPU检查僵尸进程查看进程的线程查看进程打开的文件/网络连接常用组合速查top前5摘要区进程列表信息交互式命令…

【软考高级系统架构论文】论湖仓一体架构及其应用

论文真题: 随着5G、大数据、人工智能、物联网等技术的不断成熟,各行各业的业务场景日益复杂,企业数据呈现出大规模、多样性的特点,特别是非结构化数据呈现出爆发式增长趋势。在这一背景下,企业数据管理不再局限于传统…

Docker 高级管理笔记

前言:Docker 高级管理概述 随着 Docker 技术的广泛应用,容器化已成为现代软件开发与部署的核心方式。本笔记聚焦 Docker 高级管理中的两大关键技术 —— 容器通信与数据持久化,深入解析 Docker 网络模式、端口映射、容器互联机制及数据卷管理…

Spring Boot 项目初始化

一、什么是 CommandLineRunner CommandLineRunner 是 Spring Boot 提供的一个 函数式接口,声明如下: 该接口只有一个 run(String... args) 方法,会在 Spring Boot 容器启动完成后被自动调用。 你可以将它理解为一种“钩子函数”,…

C# winform教程(二)----ComboBox

一、作用 一个可以输入也可以下拉的列表框。 二、属性 一般我们都是使用下拉列表,不使用在线编辑(本人没用过) 属性 名称内容含义items组合框中项可以定义下拉列表的值DropDownStyle外观和功能是否可以填写,一般选择dropdownli…

FFmpeg裁剪视频在Android上的实现

添加依赖: implementation com.arthenica:mobile-ffmpeg-full:4.4.LTS 代码实现: fun cropMiddleThird(inputPath: String, outputPath: String) {val cmd arrayOf("-y", // 覆盖输出文件"-i", inputPath,"-filter:v&quo…

openEuler 22.03 sp1 更新openssh 10.0p2 —— 筑梦之路

华为欧拉openEuler制作openssh 9.1/9.2/9.3 p1 rpm——筑梦之路_欧拉构建openssh-CSDN博客 上面是需要修改的sshd_config配置,将这3行注释掉。 附上22.03 sp1的yum源文件 # cat openEuler.repo #generic-repos is licensed under the Mulan PSL v2. #You can use t…

AGI(4)大模型的推理综述

本文源自基于基础模型的推理综述《A Survey of Reasoning with Foundation Models》,因为原文有点难于理解,在这个论文的基础上增加了自己的解释和理解,重新整理成此文。大家可以通过查看原文阅读原始论文。 1、推理的概念 推理是解决复杂问题…

Rust 中的宏与函数

在 Rust 编程中,宏(Macro)和函数(Function)是两种非常重要的编程工具。虽然它们都可以用来组织代码和实现复用,但它们在定义方式、作用原理、性能、灵活性以及适用场景等方面存在诸多不同。本文将详细介绍 …

c++中左值与右值

在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表达式的基本属性,它们决定了表达式能否被赋值、取地址等操作。 1. 核心定义 左值(lvalue) 特点:表示一个具名的、持久的对象,可位于赋值语句左侧。示例: int x = 42; // x是左值 x = 100; // 合法:左值可…

DeepSeek14-open-webui 常用概念区分

I、“Tools & Functions” 与 Pipelines(工作流系统)区别 以下是“Tool & Functions”与“Pipelines”的区别、适用场景及作用的详细分析,内容基于参考文档提取与总结: 一、本质区别 维度Tool & FunctionsPipeline…