STM32的FSMC时序解析
以下针对目前项目所用到的SRAM时序进行分析,同时也对SRAM应用在STM32F4上进行详细解说。以此也可以类推出NAND/PSRAM等时序的应用技巧。
时序
当前用到的是模式A,其中读时序如下。
图片截于STM32F4205/7应用手册,从图中可以看出这个模式用于SRAM和PSRAM,PSRAM也叫做伪静态随机存储器, CRAM全称是 Cellular RAM 。
图中有OE togging二字,如字面意思,这个模式的读处理是有OE引脚电平触发参与的。我们可以与Mode1进行比较。
由上图可以看出,NOE这一项电平变化有不同。在ModeA中,NOE电平由高边第标志着DATAST这一时钟循环开始,而在Mode1中NOE在进入DATAST时段时并没有变化。
由此我们又引出了一个问题,ADDSET和DATAST这两个时段到底有什么作用?
这时我们需要善于观察,从应用手册上找出了这样一张表:
从表头可以看出,这是一个寄存器的位图,0-3bit对应着ADDSRT。
上面说:读取的第一个阶段(ADDSET HCLK周期)的持续时间。ADDSET的最小值为0。
从上面的话我们可以猜出, ADDSET 时钟周期是读操作的第一个阶段,这个位用于设置的是这个阶段的时间长度。
我们还可以看出,DATASET 时钟周期是读操作的第二阶段。8-15位用于设置这个时间长度。
到这里,我们就已经掌握了FSMC配置的关键信息。但我们还不知道这些内容是如何应用在SRAM上。但不着急,我们还得要一步步来。
SRAM的应用
62WV51216BLL 读时序
如果我们要读某段地址上的数据,我们首先要让SRAM知道我们要读内容的位置,所以在读操作之前,我们需要进行写操作。我们先看SRAM的读时序,我用的芯片是62WV51216BLL。这款芯片的读时序有两种,由于第一种与当前模式A不兼容,所以我们直接看第二种。由于芯片并没有CS2引脚,所以我们直接忽略CS2。
我们从上图可以收集到的相关信息:
- CS1电平变低地址写入便开始生效。这个和FSMC中的NEx时序一致。
- WE写使能引脚在读操作中为高电平。这个和FSMC中NWE时序一致。
- 如果芯片在继续选择状态下,即连续读操作,OE和CS1为低电平,UB或LB为低电平;WE为高电平。这个和FSMC ModeA读时序不矛盾。
FSMC配置参数
FSMC配置参数我们已知了一个,就是我们用的是ModeA。然后我们由 62WV51216BLL 读时序图可以找到ADDSET和DATAST所需的时钟循环次数。
ADDSET对应的参数是tAA,我们可以在datasheet中找到,tAA取值范围最大为55ns,我画的板子用的MCU是STM32F407,时钟频率为168MHz。也就是说1个HCLK循环用的时间是5.952380952380952ns。
也就是说如果FSMC_AddressSetupTime取10,ADDSET时间长度则约为59.52ns,这个就超出了55ns的限制,所以我们就取1意思一下,其实也可以取0。
FSMC_AddressSetupTime = 1
DATAST对应的参数是( tRC-tAA ),也就是说DATAST>55ns,即:
FSMC_DataSetupTime = 9
62WV51216BLL 写时序
我们来看ModeA的写时序:
这个图没什么难度,和之前的读时序差不多。
62WV51216BLL 的写时序有4种,我们忽略掉和ModeA不兼容的时序,然后选出兼容的那种分析。
从图中可以看出,当进行写操作时,OE电平会被拉高。片选信号CS1电平拉低的时间周期最小为45ns,这个与ModeA时序相兼容,因为在ModeA写时序中,NEx在整段写时序中都为低电平。
ADDSET对应的是tSA,即片选信号拉低到WE信号拉低间的间隔,跟据datasheet所要求的,最小时间间隔为0。
DATAST对应的是tPWE,即WE的脉冲宽度,跟据datasheet的表述,取值为最小40ns。跟据FSMC时序图所建议的,第二阶段时间间隔取(DATAST+1),即:(40 + 5.95 )ns。也就是说第二阶段最小取值为45.95ns。
综上所述,在ModeA中,读写时序的两个阶段的参数可以是相同的,即:
- FSMC_AddressSetupTime = 1
- FSMC_DataSetupTime = 9