为什么我们需要指定闪存等待周期的数量?

时间:2016-09-14 19:27:04

标签: stm32 cortex-m3 cortex-m

特别是在使用"更快"我们需要根据电源电压和系统时钟频率指定闪存等待周期数等设备,如STMF4xx / F7xx。

当CPU获取指令/或常量时,这是通过FLITF完成的。假设FLITF只能提供所请求的数据,并且其他Bus-Masters无法同时访问闪存,我认为FLITF会持有CPU请求。

如果这是真的,为什么知道闪存等待周期的任何接口都很重要。像Cache一样预先加载指令,如果它知道等待多长时间,那么它是独立的吗?

1 个答案:

答案 0 :(得分:4)

因为flash界面并不神奇。

它必须满足寻址和读出闪存单元所需的设置和保持时间,这取决于电压。以STM32F411为例(因为我有TRM方便),用电压/频率/等待状态表进行一些数学计算意味着其中一个闪存读取大约在2.7V以上~30ns,到2.1V以下~60ns。

由于闪存接口没有自己的异步纳秒精度计时能力(因为这将是不必要的复杂,耗电和愚蠢),这转换为断言 n 的信号时钟周期,之后它可以假设来自单元的数据信号足够稳定以读回 * 。它如何知道时钟频率是多少,因此 n 应该是什么?简单:你作为设置时钟的程序员,告诉它。一些硬件事情只是让软件更容易处理。

*和然后通过进一步的shenanigans从它读取的128位行中提取相关的8位,16位或32位,最后吐出 em>显然从另一端到AHB总线上等待CPU。