历史上的今天
今天是:2024年10月26日(星期六)
2021年10月26日 | stm32专题二十:FSMC
2021-10-26 来源:eefocus
STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器,FSMC 是 Flexible Static Memory Controller 的缩写,译为灵活的静态存储控制器。它可以用于驱动包括 SRAM、NOR FLASH 以及 NAND FLSAH 类型的存储器,不能驱动如 SDRAM这种动态的存储器而在 STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM存储器。
中文参考手册对FSMC的描述:

接下来是FSMC的结构框图:

在框图的右侧是 FSMC 外设相关的控制引脚,由于控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多,其中地址线 FSMC_A和数据线 FSMC_D是所有控制器都共用的。

AHB时钟(HCLK)是FSMC的参考时钟。
其中比较特殊的 FSMC_NE 是用于控制 SRAM 芯片的片选控制信号线,STM32 具有FSMC_NE1/2/3/4 号引脚,不同的引脚对应 STM32 内部不同的地址区域。例如,当 STM32访问 0x68000000-0x6BFFFFFF 地址空间时,FSMC_NE3 引脚会自动设置为低电平,由于它连接到 SRAM的 CE#引脚,所以 SRAM的片选被使能,而访问 0x60000000-0x63FFFFFF地址时,FSMC_NE1 会输出低电平。当使用不同的 FSMC_NE 引脚连接外部存储器时,STM32 访问 SRAM 的地址不一样,从而达到控制多块 SRAM 芯片的目的。
控制寄存器:
控制 SRAM 的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器以及FSMC_BWTR1/2/3/4写时序寄存器。每种寄存器都有4个,分别对应 4个不同的存储区域,各种寄存器介绍如下:
地址映射:
这个是中文数据手册中给出的FSMC存储器地址映射:

然后在stm32内部,这1GB的空间又被具体细分:

而对于NOR / SRAM而言,存储块1用于访问最多4个NOR闪存或PSRAM存储设备。这个存储区被划分为4个NOR/PSRAM区并有4个专用的片选。具体选择那一个小存储块,由以下决定:

图中左侧的是 Cortex-M3 内核的存储空间分配,右侧是 STM32 FSMC 外设的地址映射。可以看到 FSMC的NOR/PSRAM/SRAM/NAND FLASH以及 PC卡的地址都在 External RAM地址空间内。正是因为存在这样的地址映射,使得访问 FSMC 控制的存储器时,就跟访问STM32的片上外设寄存器一样。

使用FSMC读写内存数据的过程:

stm32种FSMC的传输时序(模式A):

读时序在FSMC_BTR寄存器中进行配置:
那么SRAM的控制模式还有一个模式1,有什么区别?中文参考手册中是这样描述的,模式A与模式1的区别是NOE的变化和相互独立的读写时序。也就是说,模式A允许我们对读 / 写操作的地址建立时间 数据读取时间等设置不同的数值。
对于模式A,我们用到的寄存器配置其实不多,stm32有规定,对于不需要使用的寄存器,应该配置成如下的值:
写操作时序:
上一篇:stm32专题二十:扩展SRAM
史海拾趣
|
输入:AC 220V±10% 输出:DC 40KV 功率:1KW 纹波:90% 要求:短路保护,过流保护,欠压保护,主电路部分给出详细参数及计算过程。 哪位大虾帮帮忙,本姑娘有酬谢.....................… 查看全部问答> |
|
WINCE 平台 DM9000网卡 用主机去PING 一开始很正常,过了一段时间(半小时到2小时,感觉是随机的)就不通了,一定要重新启动才行,而且不是每块板子都有这个现象。有的板子能一直正常工作,请问有人遇到过这样的问题吗?… 查看全部问答> |
|
我下了个DS18B20的驱动程序,按到arm板上后进行读数,能复位,但就是在发出温度转换信号后那里卡住了,读不出数。 驱动程序如下: #include #include #include #include #include #include #include #include #include #incl ...… 查看全部问答> |
|
机器没在身边,器件选的是stratixII:AUTO,电路就是一个全加器,当下载到芯片时提示JTAG对应设备的ID不匹配好像是,但我选择其它芯片也不行,比如MAX7000S或Cyclone什么的,应该怎么设置呢? … 查看全部问答> |
|
在ADS1.2的c编译器件中. 如果一个数后带L是表示什么? 如: i= 0x12345678L; 原来在书上看过这这种表示的说明. 但因为很少用.现在忘记了. 哪位能再提示一下?… 查看全部问答> |
|
我给s3c6410做了个usb otg驱动,配置成device,向PC机传输数据。端点1,bulk in,向PC传输。端点2 bulk out,接收pc的数据。 如果先启动接收线程,再启动发送线程,ok 如果先启动发送线程,再启动接收线程,每次传输N个包,则接收到的第一个包全 ...… 查看全部问答> |









