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

ARM Cortex-M 中的 I-CODE 总线、D-CODE 总线和系统总线

ARM Cortex-M 中的 I-CODE 总线、D-CODE 总线和系统总线

核心概念总结

简单来说,这三种总线是CPU内核与内存、外设之间进行通信的不同“高速公路”:

  • I-CODE总线:专门用于取指(Fetching Instructions),即从Flash存储器中读取要执行的程序代码。它的设计目标是高效、不间断地获取指令流。
  • D-CODE总线:专门用于数据访问(Data Access),主要针对CPU的数据操作(如加载/存储变量)和调试访问。它通常连接到用于存储数据的Flash区域、SRAM以及调试接口。
  • 系统总线:这是最“繁忙”和“通用”的总线。它用于所有非核心的内存访问,包括:
    • 访问片内SRAM(用于变量、栈、堆)。
    • 访问所有外设(如GPIO, UART, SPI, ADC等)的寄存器。
    • 访问外部存储器(如外部RAM)。

详细解释

为了更好地理解,我们通常以ARM Cortex-M系列的AHB/APB总线矩阵 架构为例(这是最常见的情况)。其核心思想是并行处理,以避免“交通拥堵”。

1. I-CODE总线 (I-Bus)
  • 功能: 这是一条专线,只用于CPU从代码存储区(通常是内部Flash存储器)获取指令
  • 目的提高效率。因为CPU执行程序的核心就是不断取指、译码、执行。将这条路径独立出来,可以确保在执行当前指令时,预取单元能通过I-CODE总线无阻塞地获取下一条指令,从而实现流水线的高效运作。
  • 连接对象: 主要连接到Flash存储器的接口控制器
2. D-CODE总线 (D-Bus)
  • 功能: 这也是一条专线,主要用于两类操作:
    1. 数据操作: 当指令需要对Flash中的常量数据(如const变量、查找表)进行读操作时,使用这条总线。例如执行一条 LDR R0, [R1] 指令,而R1的地址指向Flash中的一个常量。
    2. 调试访问: 调试器(如JTAG/SWD)通过这条总线来访问和修改内存内容,而无需停止内核(如果支持的话)。
  • 目的: 将针对Flash的数据访问指令访问分开。这样,CPU在通过I-CODE总线取指的同时,可以并行地通过D-CODE总线读取Flash中的数据,极大提升了性能。
  • 连接对象: 同样连接到Flash控制器。
3. 系统总线 (S-Bus)
  • 功能: 这是一条“公共汽车”,处理所有其他内存访问请求,非常繁忙。包括:
    • SRAM的读写(栈、堆、全局变量等)。
    • 外设寄存器的读写(配置GPIO、读取ADC值等)。
    • 外部存储器的访问(通过FSMC/FMC等接口)。
    • 向量表的读取(部分情况)。
  • 目的: 处理所有杂项访问,让I-CODE和D-CODE这两条专线能够保持高速和通畅。
  • 连接对象: 连接到SRAM、AHB到APB的桥接器(从而连接到所有外设)、DMA控制器等。

类比:一个高效的餐厅厨房

  • CPU内核: 是主厨。
  • I-CODE总线: 是一条专门的送菜传送带,只把做好的菜(编译好的指令)从厨房(Flash)源源不断地送到主厨面前。
  • D-CODE总线: 是一条专门的送配方传送带,当主厨需要看某道菜的详细配方(常量数据)时,通过这条传送带快速获取。
  • 系统总线: 是厨房里的助手和杂工。主厨通过他们来:
    • 从冰箱(SRAM)拿食材(变量)。
    • 操作烤箱、搅拌机等设备(配置外设)。
    • 接收外面送来的新食材(通过DMA或外部总线)。

这样,主厨(CPU)可以专注于烹饪(执行指令),而不用因为等待食材或操作设备而频繁停下手中的活儿。

为什么需要这种架构?—— 优势

  1. 并行处理,提高性能: 这是最关键的优点。CPU可以同时做三件事:

    • 通过 I-CODE总线 取下一条指令。
    • 通过 D-CODE总线 读取一个存储在Flash中的常量。
    • 通过 系统总线 将一个变量值写入SRAM。
      没有这种分离,这些操作必须在同一条总线上串行排队,效率低下。
  2. 确定的执行性能: 即使系统总线上因为DMA传输大量数据而非常拥堵,也不会影响I-CODE总线取指。这保证了CPU核心执行代码的速度是稳定和可预测的,对于实时应用至关重要。

  3. 优化功耗: 更高效的操作意味着CPU可以更快地完成任务并进入睡眠模式。

总结表

特性I-CODE总线D-CODE总线系统总线
主要功能取指 (Instruction Fetch)数据访问 (常量读取) & 调试数据访问 (SRAM, 外设)
操作类型读/写 (调试时)读/写
典型连接Flash 接口Flash 接口SRAM, 外设, DMA
类比送菜传送带送配方传送带厨房杂工
关键目标保证指令流不间断高效数据访问,支持调试处理通用内存和I/O操作

这种多总线架构(哈佛架构的延伸)是现代高性能、低功耗微控制器(如STM32,GD32,NRF52等系列)的基石。


文章转载自:

http://Zb1MwtqQ.mrbzq.cn
http://5THjsMj1.mrbzq.cn
http://pcDSYCE9.mrbzq.cn
http://KzBkJ3A3.mrbzq.cn
http://poujBExj.mrbzq.cn
http://YgnkxjvF.mrbzq.cn
http://QkGeFL8M.mrbzq.cn
http://1gNmFT3Z.mrbzq.cn
http://PivAgvNq.mrbzq.cn
http://EnDQpmd3.mrbzq.cn
http://cTfxewXu.mrbzq.cn
http://wBJOhObo.mrbzq.cn
http://lVj5D2J2.mrbzq.cn
http://T8WWEIVv.mrbzq.cn
http://w5D5p6vc.mrbzq.cn
http://pN9MljWW.mrbzq.cn
http://h8Bq7GTQ.mrbzq.cn
http://WzfyqCyI.mrbzq.cn
http://N2E7UHpf.mrbzq.cn
http://ybdm0lBz.mrbzq.cn
http://Sp5IH8CA.mrbzq.cn
http://4pTaRV70.mrbzq.cn
http://4WUjQumI.mrbzq.cn
http://qZWggRuJ.mrbzq.cn
http://W25lpGG6.mrbzq.cn
http://IeT7gY5k.mrbzq.cn
http://6mzHnVSa.mrbzq.cn
http://f4sbmoFQ.mrbzq.cn
http://iMpXVVAF.mrbzq.cn
http://hpbmNRAk.mrbzq.cn
http://www.dtcms.com/a/383137.html

相关文章:

  • HTML5和CSS3新增的一些属性
  • 用C语言打印乘法口诀表
  • Docker desktop安装Redis Cluster集群
  • 拼多多返利app的服务自动扩缩容策略:基于K8s HPA的弹性架构设计
  • 每日前端宝藏库 | Lodash
  • LeetCode 978.最长湍流子数组
  • Java连接电科金仓数据库(KingbaseES)实战指南
  • 2025 年 AI 与网络安全最新趋势深度报告
  • PDF发票提取工具快速导出Excel表格
  • 2. BEV到高精地图的全流程,本质上是自动驾驶**车端(车载系统上传bev到云端)与云端(云端平台处理这些bev形成高精地图)协同工作
  • Nature 子刊:儿童情绪理解的认知发展机制
  • git pull还是git pull -r?
  • 使用 LMCache + vLLM 提升 AI 速度并降低 GPU 成本
  • 快速排序:高效的分治排序算法
  • stap用法
  • 鸿蒙Next ArkWeb网页文件上传与下载完全指南
  • 云轴科技ZStack AI多语种翻译平台建设实践
  • Android SDK中关于BoardConfig.mk的宏定义继承和覆盖规则
  • 链表与数组
  • 【Python】字符串
  • 【Python】实现一个文件夹快照与比较工具
  • Python的深度学习
  • 自动化测试的概念
  • [QT]信号与槽
  • 高精度运算:大数计算全攻略
  • LeetCode 3302.字典序最小的合法序列
  • 深入解析3x3矩阵:列优先与行优先约定的全面指南
  • Codeforces 1049 Div2(ABCD)
  • 【开题答辩全过程】以 “居逸”民宿预订微信小程序为例,包含答辩的问题和答案
  • AWS IAM 模块全面优化:实现完整生命周期管理与性能提升