FSMC-地址建立时间、地址保持时间、数据建立时间如何确定

我们知道FSMC包括同步和异步两种工作时序。对于异步突发访问方式, FSMC 主要设置 3 个时间参数:地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)。这三个参数是怎么来的呢?是因为SRAM/ ROM、 PSRAM 和 NOR Flash 产品的信号时序有这三个参数,FSMC 综合了 SRAM/ ROM、 PSRAM 和 NOR Flash 产品的信号特点,定义了 4 种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时间参数,如下表所示:

那么究竟地址建立时间(ADDSET)、数据建立时间(DATAST)和地址保持时间(ADDHLD)是什么呢?我们需要看SRAM/ ROM、 PSRAM 和 NOR Flash等芯片的时序图。这3个参数是存储芯片的数据手册中给出的,或者是通过存储芯片的数据手册其他参数计算出来的。所以想要知道这3个参数的具体值,一定要看具体存储芯片的数据手册!

我使用STM32F407作为主控芯片,选用IS62WV51216作为片外SRAM。IS62WV51216读写时序及读写参数如下图所示:

IS62WV51216读时序关键特性
IS62WV51216读时序
IS62WV51216写时序关键特性
IS62WV51216写时序

 

使用模式A,读写共用时序(共用时序时,以写时序为准),配置代码如下:

 //系统频率为168MHz,即一个HCLK周期为1/168M=6ns
 readWriteTiming.FSMC_AddressSetupTime = 0x00;   //地址建立时间为0HCLK     即0ns
 readWriteTiming.FSMC_AddressHoldTime = 0x00;    //地址保持时间 模式A未用到
 readWriteTiming.FSMC_DataSetupTime = 0x08;      //数据建立时间 为9HCLK    6*9=54ns

为什么地址建立时间是0ns呢?因为从IS62WV51216写时序关键特性中可以看到,Address Setup Time为0,所以配置时,地址建立时间要等于0。

地址保持时间模式A未用到,所以配置为0.

数据建立时间为什么是54ns呢?因为从IS62WV51216写时序关键特性中可以看到,Dataup to Write End最小值为30ns,所以配置时,数据保持时间要大于30ns。至于选择的54ns并不是严格按照手册时间来的,这需要实际调试才能确定具体值。

那为什么数据建立时间配置为8,但却是9个HCLK周期时间呢?从STM32中文参考手册的时序图中可以看到,模式A写入时序的数据建立时间为: 数据建立时间=HCLK周期+1,初始化程序时,如果设置DATAST=0,则实际数据建立周期为1,即实际数据建立周期比DATAST值多1个HCLK周期。

STM32中文参考手册模式A写时序

 

参数确定大体就是这样的思路,其他模式及不同的芯片确定参数的思路是一样的。希望能帮到大家。

最后是在帖子中看到的关于时序的讲解,挺有趣,一并放在文章中。

先搞清逻辑关系。 

这是CPU读存储器的时序。CPU索取,存储器付出。 

我有很多单元,你要读我,至少要把那个单元的门牌号告诉我吧?——这就是地址线,由CPU填写(输出); 
地址线上非1即0,你放不放地址都这样的,所以,你要告诉我什么时候是“地址”,什么时候是“垃圾”吧?——这就是OE线下降沿的作用,也要CPU填写。 
(一般来说,要在地址稳定以后,OE才发出下降沿。上面图没有给出这个差别。) 

好了,CPU该办的手续已经完了,球到了存储器一边。 

我要去这个单元找东西,总需要点时间吧?——这就是OE下降沿以后,RAM发出数据的时间间隔。 
艾玛,累死我了,你要的东西找到了,我放上去了! 

按说,数据放到总线上了,可是CPU如何才能知道数据来了呢?因为不论是数据还是垃圾,那电线上面总有1、0这些东西。 
这时出现不同解决方法了。 
一种方法,由存储器给CPU发出一个通知信号:好了,快来拿!这个信号通常叫做 Data Available,数据可得,简写 DAV,可能有人见过。CPU接到这个信号,自然会做。
另一种方法,有老大强势规定:OE下降沿之后,你丫必须在1秒钟之内把东西交出来!我只管时间到就来拿!这是多数存储器遵守的规定。 
这两种方法,由于是不同的公司提出的,经常以公司名字来命名。Motorola总线,intel总线,听说过吧? 

OK,明白这些意思,稍微想一想,应当就可以理解各种时序的时间了。以后再不用问人了。 

另外,手册里经常可以看到,这些时间一般会有最大值、最小值,有些只给出一项。 
比如上面提到,从OE下降沿到存储器交出数据的时间,在存储器手册里面,这个时间只会给出最大值。 
因为用户必须按“最长时间”操作,不能有侥幸心理。给出最小值没有实际意义。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章