STM32 单片机内部有很多总线,各个总线负责的功能不同。 今天以 STM32 单片机为例,梳理一下 ARM Cortex-M3 架构 MCU 的总线内容。 聊一聊 在介绍各个总线之前,先看一下系统框图( STM32F1xxx 类型单片机) Cortex-M3 处理器总线接口是基于 AHB-Lite 和 APB 协议的。 STM32 单片机内部有以下几种总线接口: I-Code 总线 D-Code 总线 系统总线 DMA 总线 总线矩阵 AHB/APB 桥 下边分别进行讲解 ( 1 ) I-Code 总线 指令总线。 I-Code 总线是一条基于 AHB-Lite 总线协议的 32 位总线。 该总线将 Cortex ™ -M3 内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 负责在存储器地址 0x0000_0000 – 0x1FFF_FFFF 之 间的取指操作。取指以字的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。 ( 2 ) D-Code 总线 数据总线。是一条基于 AHB-Lite 总线协议的 32 位总线。 该总线将 Cortex ™ -M3 内核的 DCode 总线与闪存存储器的数据接口相连接,加载数据常量和调试访问。 负责在存储器地址 0x0000_0000 – 0x1FFF_FFFF 之间的数据访问操作 。连接到 D-Code 总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不支持非对齐访问。 ( 3 )系统总线 此总线连接 Cortex ™ -M3 内核的系统总线 ( 外设总线 ) 到总线矩阵,总线矩阵协调着内核和 DMA 间的访问。 负责在 0x2000_0000 – 0xDFFF_FFFF 和 0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上。和 D-Code 总线一样,所有的数据传送都是对齐。 ( 4 ) DMA 总线 此总线将 DMA 的 AHB 主控接口与总线矩阵相联,总线矩阵协调着 CPU 的 DCode 和 DMA 到 SRAM 、闪存和外设的访问。 ( 5 )总线矩阵 总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用轮换算法。 总线矩阵包含 4 个驱动部件( CPU 的 DCode 、系统总线、 DMA1 总线 和 DMA2 总线 ) 和 4 个被动部件 ( 闪存存储器接口 (FLITF) 、 SRAM 、 FSMC 和 AHB2APB 桥)。 AHB 外设通过总线矩阵与系统总线相连,允许 DMA 访问。 ( 6 ) AHB/APB 桥 (APB) 两个 AHB/APB 桥在 AHB 和 2 个 APB 总线间提供同步连接。 APB1 操作速度限于 36MHz , APB2 操作于全速 ( 最高 72MHz) 。 当对 APB 寄存器进行 8 位或者 16 位访问时,该访问会被自动转换成 32 位的访问:桥会自动将 8 位或者 32 位的数据扩展以配合 32 位的向量。 接下来说一说从 Flash 中读取指令和数据的流程。 闪存的指令和数据访问是通过 AHB 总线完成的。预取模块是用于通过 ICode 总线读取指令的。仲裁是作用在闪存接口,并且 DCode 总线上的数据访问优先。 预取缓冲区有 2 个,每个缓冲区大小位 64 位。在每一次复位以后被自动打开,由于每个缓冲区的大小 (64 位 ) 与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。 由于预取缓冲区的存在, CPU 可以工作在更高的主频。 CPU 每次取指最多为 32 位的字,取一条指令时,下一条指令已经在缓冲区中等待。这样提高了 CPU 获取指令的效率和执行指令的速度。 这也就是说,对于 STM32 单片机来说,会读取 Flash 中的指令到缓存。不是直接在 Flash 中执行。 关注公众号“优特美尔商城”,获取更多电子元器件知识、电路讲解、型号资料、电子资讯,欢迎留言讨论。