STM32 FSMC学习笔记
当要读数据时,地址由0x60020000改为了0x60000000,这个时候A16就为0了。--------------------------------------------------------------------------------------------------
下来就是关于 FSCM时序问题,大家都有讨论:
一.当FSMC选择NOR和PSRAM模块时:
分为两种:1.异步事务2.同步突发事务
异步事务分为普通模式(mode 1,mode 2)和模式1与模式2的4种扩展模式(mode A,B,C,D);
二.General timing rules(通用时序规则):
(所有输出控制信号在内部时钟(HCLK)的上升沿改变)
2.In synchronous read and write mode, the output data changes on the falling edge of the
memory clock (FSMC_CLK).
(在同步读和写模式下,输出信号在存储器CLK的下降沿改变)
三.采样规则
The FSMC always samples the data before de-asserting the chip select signal NE. This
guarantees that the memory data-hold timing constraint is met (chip enable high to
data transition, usually 0 ns min.)
(FSMC总是在撤销片选信号NE前采样数据,这保证了了储存器数据保持时间的约束能够满足。)
四:时序计算
设定值都是以Hclk为基本单位的
公式:




现在没有完全弄明白的是,因为是异步模式,数据通过延迟一个HCLK通知给了对端,地址线上的信号怎么通知对端有效呢?
--------------------------------------------------------------------------------------------------
下面是一些资料上的数据,可以估算时间是否大概满足应用的要求:


--------------------------------------------------------------------------------------------------
一些常见问题的FAQ:
1.STM32F103 FSMC是不是所有型号都有?
ANS:VC,VD,VE,ZC,ZD,ZE只有这几个型号有。
---------------------------------------------------------------------------------------------------------------------------------
2.复用和非复用?
STM32的FSMC支持数据与地址线复用或非复用两种模式
非复用模式:16位数据线及26位地址线分开始用。推荐在144脚及以上的STM32产品上使用该模式。
复用模式:低16位数据/地址线复用。在该模式下,推荐使用地址锁存器以区分数据与地址。
若不使用锁存器:当NADV为低时,ADx(x=0…15)上出现地址信号Ax,当NADV变高时,ADx上出现数据信号Dx。
若使用锁存器:可同时在ADx上得到Ax和Dx。
FSMC中未使用的数据线或地址线可配置为GPIO
对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:1]产生外部存储器的地址FSMC_A[24:0]。因此,实际的访问地址为右移一位之后的地址。
---------------------------------------------------------------------------------------------------------------------------------
3.时序图(扩展模式)
普通模式和扩展模式的不同主要用途我觉得,就是把读、写设置成不尽相同的时序。所谓的模式A、B、C、D,其实没多大区别。
引用手册原文:
The differences with mode1 are the toggling of NADV and the independent read and write timings when extended mode is set。
---------------------------------------------------------------------------------------------------------------------------------
4.FSMC_NWAIT和FSMC_NE1/FSMC_NCE2.不明白这两个怎么用?
ANS:NBL0,NBL1,在STM32F103的数据手册里面有规定IO的,不能随便换.(PSRAM时使用)
NWAIT应该是FLASH操作才用的.NE1,NCE2就是一些片选信号.STM32的FSMC支持同时挂多个器件,每个器件都必须有一个CS(也就是NEx,NCEx).
NADV(NL)在复用时时所存信号。在非复用模式控制PSRAM输出有效。
看了1天的英文资料和论坛,这是我总结出来的一些杂乱的信息,由于刚到嵌入式开发行列,底子太弱,所以先把这些保存下来,供以后使用。
下周一实验板就来了,估计花些时间调一下FSMC,再加上DMA的功能,希望能改善产品。
PS:纠结了 快一个礼拜。。终于搞定了


评论