STM32 FMC原理详解

Posted Z小旋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 FMC原理详解相关的知识,希望对你有一定的参考价值。

关于FSMC的基本原理已经在这两篇讲解了,如果有不懂的建议先看一下,这里我们对一些基本概念会说的少一些,主要就是针对FMC的特点和FSMC跟FMC的区别做主要的阐述(区别不大)。

STM32 FSMC/FMC原理保姆级讲解(一)

STM32 FSMC/FMC原理保姆级讲解(二)

SDRAM、DRAM及DDR FLASH ROM概念详解

FSMC和FMC区别

F1F407 使用的是FSMC(Flexible static memory controller)“静态存储器控制器”Cortex-M3内核的芯片专属的,STM32可以通过FSMC与静态SRAM、ROM、PSRAM、Nor Flash和NandFlash存储器的引脚相连,从而进行数据的交换。

Cortex-M4内核的F429和Cortex-M7内核的F7,H7系列中,变成了FMC(Flexible Memory Controller) 灵活存储控制器,支持了动态SDRAM 等设备,

其中最大的区别是什么呢?

FMC是在FSMC(Flexible Static Memory Controller)的基础上扩展了SDRAM的总线控制器,使用 FMC 可以动态刷新 SDRAM

静态RAM跟动态RAM

SRAM
SRAM,静态的随机存取存储器,又被称为静态RAM,利用双稳态电路进行存储。即使有干扰对稳态电路也没影响,所以有双稳态性,“静态”是指只要不掉电,存储在SRAM中的数据就可以一直保存,只要有电,SRAM中的数据就不会有变化。加电情况下,不需要一直刷新,数据不会丢失,而且,

DRAM
DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。由于在现实中电容会有漏电的现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电,否则无法确保记忆长存。DRAM读取具有破坏性,也就是说,在读操作中会破坏内存单元行中的数据。因此,必需在该行上的读或写操作结束时,把行数据写回到同一行中。这一操作称为预充电,是行上的最后一项操作。必须完成这一操作之后,才能访问新的行,这一操作称为关闭打开的行。

SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步的DRAM

同步和异步的区别是同步方式需要一个专门的片外时钟CLK信号引脚,所有的读写操作都是跟着这个时钟信号走的

FSMC和FMC区别总结

FSMC只能接静态SRAM,FMC可以接动态DRAM,而控制动态DRAM要复杂得多。动态RAM需要不停地进行周期性的刷新,否则RAM中的数据就会丢失,

这就产生了“管理”问题,如果您看了上面的FSMC原理,那么就会知道存储器和STM32之间就只是进行数据读写就可以

如果用一个MCU来连接DRAM,二者之间交换的就不只是数据交换那么简单了,还包含有控制信息。跟周期性刷新DRAM内数据,这样,DRAM中除了存储数据的单元,还需要有寄存器还得有个对DRAM的“初始化”过程

这么复杂,有同学就会问为什么还要用DRAM呢?用SRAM不就行了吗?

如果您看了上面的DRAM跟SRAM区别就会知道,SRAM的容量是小于DRAM的,并且价格远大于DRAM,所以SRAM一般只用于CPU内部的存储,而像我们电脑上外接的那几个G的内存条,都是动态DRAM类型的。


FMC介绍

我们来看下官方对FMC的介绍:

FMC灵活的存储控制器。FMC可连接SRAM(异步或同步)、SDRAM、NORFLASH、PC卡、NANDFLASH.支持突发模式,可编程时钟,8位、16位、32位宽的数据总线。FMC有6个存储区域,每个区域支持256MB的寻址空间。

FMC的特点:

  1. FMC的一大特点是支持不同位宽的异步读写操作。

  2. FMC同一时刻只能控制一个存储器外设 (因为fmc配置的地址线,数据线和控制线是共享的) ;每种存储区内都有自己的bank片选信号;

  3. FMC包含三种类型的存储控制器:NOR/PSRAM/SRAM存储控制器,NAND控制器,SDRAM控制器;

  4. FMC配置中未用到引脚均可以继续用作通用I/O模式或者其它复用功能,仅需不配置FMC复用即可。

  5. 每个片选下的存储器空间配置都是独立的,有专门的寄存器,互不影响

并行总线接口FMC

FMC(Flexible memory controller,灵活动态存储器)

H7中FMC的原理框图如下图所示:

1.

在框图的右侧是 FMC 外设相关的控制引脚,其中地址线 FMC_A 和数据线 FMC_D 是所有控制器都共用的。FMC_NBL数据掩码是SRAM共用的
这些 FMC不同存储器引脚具体对应的 GPIO 端口及引脚号可在《STM32H7xx 规格书》中搜索查找到,不在此列出。针对 SDRAM 控制器,以下的 FMC 与 SDRAM 引脚对应关系

FMC 的地址映射

2.

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

FMC可以分为6个区域,每个子区域有各自连接的存储器类型

  • 第一个区域用于NORFLASH、PSRAM、SRAM,可分为4个子区域,每个子区域有各自的片选信号,可连接4个器件

  • 区域2和3 用于NAND Flash,每个区域只能连接1个器件

  • 区域 4 用于连接PC卡

  • 区域5和6 用于SDRAM,每个区域只能连接1个器件

FMC重映射

与 F1 和 F4 不同,H7 系列的 FMC 总线接口支持重映射,也就是可以设置这几块存储器的位置。


根据 BMAP[0:1]设置的数值 00,01 或者 10,支持三种分配方式。默认情况下,使用 BMAP[0:1] = 00
的分配方式即可,也就是上面截图中的分配方式。

FMC时钟

3.

FMC 外设挂载在 AHB3 总线上,时钟信号来自于 HCLK(默认 200MHz),控制器的时钟输出就是
由它分频得到。还可以可以选择如下几种时钟源 HCLK3,PLL1Q,PLL2R 和 PER_CK

我们这里直接使用 HCLK3,配置 STM32H7 的主频为 400MHz 的时候,HCLK3 输出的 200MHz,这个速度是 FMC 支持的最高时钟

在SDRAM中,SDRAM 控制器的 FMC_SDCLK 引脚输出时钟频率,用于与 SDRAM 芯片进
行同步通讯,它的时钟频率可通过 FMC_SDCR1 寄存器的 SDCLK 位配置,可以配置为 HCLK 的
1/2 或 1/3,也就是说,与 SDRAM 通讯的同步时钟最高频率为 100MHz。

NOR/PSRAM/SRAM 块区。

这个块区用到的地方最多,像 NAND 和 SDRAM 块区基本只能接 NAND 和 SDRAM,而NOR/PSRAM/SRAM 区就不同了,除了能接这几种类型的存储器,还可以外接 TFTLCD,OLED,AD7606 等总线外设。这个块区有 4 路片选,分别是 FMC_NE1,FMC_NE2,FMC_NE3 和 FMC_NE4,这几个片选在芯片上都有对应的引脚,每个片选可以管理 64MB 的访问空间,这个是由 FMC 引出的 26路地址线 FMC_A[0:25]决定的,2^26 = 64MB。

FMC_NE1:首地址 0x6000 0000,可以管理的地址范围 0x6000 0000 到 0x63FF FFFF。
FMC_NE2:首地址 0x6400 0000,可以管理的地址范围 0x6400 0000 到 0x67FF FFFF。
FMC_NE3:首地址 0x6800 0000,可以管理的地址范围 0x6800 0000 到 0x6BFF FFFF。
FMC_NE4:首地址 0x6C00 0000,可以管理的地址范围 0x6C00 0000 到 0x6FFF FFFF。

STM32 FSMC/FMC原理保姆级讲解(一)

这一部分我们在这一篇已经讲解的很详细了,如果有不懂得请再看一下

这里我们再说一下SDRAM的存储配置

通过FMC地址框图我们可以看到STM32对于SDRAM分配了两个bank空间 Bank1 和 Bank2 ,这里的 Bank 与 SDRAM 芯片内部的Bank 是不一样的,这是FMC内部有2个物理Bank地址的意思,每个BANK都可以接一个SDRAM,可以理解为FMC支持连接2个SDRAM芯片, 实际使用的时候看下具体的接线选择是BANK1还是BANK2,

MCU通过不同的片选信号SDNE0和SDNE1来选择具体使用哪个片外RAM 通过SDCKE0和SDCKE1来确定使能那个BANK的时钟

BANK0对应的存储区域 1 的地址范围是 0xC000 0000-0xCFFF FFFF,
而BANK1 对应的存储区域 2 的地址范围是 0xD000 0000- 0xDFFF FFFF。

当程序里控制内核访问这些地址的存储空间时,FMC 外设会即会产生对应的时序,对它外接的 SDRAM 芯片进行读写


以上是关于STM32 FMC原理详解的主要内容,如果未能解决你的问题,请参考以下文章

STM32 FMC原理详解

STM32 FSMC/FMC原理保姆级讲解

STM32 FSMC/FMC原理保姆级讲解

STM32F429第二十四篇之SRAM原理

STM32F429第二十四篇之SRAM原理

STM32HAL库 STM32CubeMX教程十五---FMC-SDRAM