【发布时间】:2015-08-30 03:31:26
【问题描述】:
STM32 文档说 I-CODE 和 D-CODE 总线连接到内部闪存。 I-CODE 总线用于获取指令,D-CODE 总线用于代码存储区域中的数据访问(文字加载)。
问题是为什么要使用两条独立的总线?它们能否提供对闪存的同时且绝对独立的访问?
【问题讨论】:
STM32 文档说 I-CODE 和 D-CODE 总线连接到内部闪存。 I-CODE 总线用于获取指令,D-CODE 总线用于代码存储区域中的数据访问(文字加载)。
问题是为什么要使用两条独立的总线?它们能否提供对闪存的同时且绝对独立的访问?
【问题讨论】:
从 stm32 RM0090 Reference manual(第 73 页)可以看出,I-CODE 和 D-CODE 总线不能独立访问闪存,但是它们可以独立访问闪存接口:
至于为什么有两个:它们有单独的chaches,而且I-CODE总线也实现了预取,这对于数据提取是没有用的。参考手册的相关部分(第 84 页):
数据管理
文字池通过以下方式从闪存中获取 CPU 流水线执行阶段的 D-Code 总线。这 CPU 管道因此会停止,直到请求的文字池 提供。为了限制由于文字池而损失的时间,访问 通过 AHB 数据总线 D-Code 优先于通过 AHB 指令总线 I 代码。如果一些文字池经常 使用时,可以通过设置数据缓存来启用数据缓存 FLASH_ACR 寄存器中的使能 (DCEN) 位。这个功能就像 指令缓存,但保留的数据大小是有限的 到 8 行 128 位。
【讨论】: