单片机FMC外设详细使用方法1【超级详细教程】

单片机的FMC

1 FMC是什么,有什么用

FMC是存储器控制器,它能自动产生控制存储器的逻辑时序,有了它就不用自己去写复杂的控制时序。

FSMC和FMC的区别是什么?

FSMC的功能比FMC少了一个功能,就是FSMC只支持静态,不支持动态。

  • SRAM 静态存储器
  • DRAM 动态存储器
  • SDRAM 是同步动态存储器,不是静态和动态的组合。
  • FMC是一个片上外设,类似I2C,SPI之类的外设,所以要用它就要知道它的引脚分布,哪些引脚有FMC功能。

    下面以都STM32F407为例

    FMC能产生时序的控制器
    

    1-FMC是硬件外设

    如下所示的FSMC的地址线,数据线,控制线。

    2-在这里插入图片描述3-在这里插入图片描述4-在这里插入图片描述

    2 FMC引脚说明

    FSMC驱动不同的外设需要不同的引脚功能,如下所示:

    5-在这里插入图片描述

    在SDRAM控制器的FMC如下:

    6-在这里插入图片描述

    FSMC控制不同的存储器要用到不同的引脚,其中:

    FSMC_A 是地址线,所有器件公用

    FSMC_D 是数据线,所有器件公用

    NOR/PSRAM 是NOR和PSRAM类型的控制信号。

    NAND/PC 是NAND和PC卡类型的控制信号。

    注意: 前缀“N”表示相关的信号为低电平有效。

    NOR Flash信号:

    7-在这里插入图片描述

    PSRAM/SRAM信号:

    8-在这里插入图片描述

    NOR Flash ,PSRAM存储器采用 16 位字寻址。最大容量为 512 Mb( 26 个地址线)

    3 FMC外部器件地址映射

    外部存储器被划分为 4 个固定大小的存储区域Bank,每个存储区域的大小为256 MB

    9-在这里插入图片描述

    代SDRAM控制器的FMC如下,有两个专用bank:

    10-在这里插入图片描述

  • 存储区域1可连接多达4个NOR Flash 或 PSRAM 存储器器件,带4 个专用片选信号。
  • 存储区域 2 和 3 用于连接 NAND Flash 器件(每个存储区域一个器件)
  • 存储区域 4 用于连接 PC 卡设备
  • 3.1 NOR FLASH 和 PSRAM的地址映射

    NOR flash和PSRAM这两种都带有SRAM的接口,使用方法相同。

    ​ 例如要控制一个NOR或者SRAM存储器,就要选择Bank1的存储区域,而每个Bank区域内部又分了4个小块,每一个小块的片选信号连接着对应的片选引脚FSMC_NE1/2/3/4。

    ​ 当 STM32 访问0x60000000-0x63FFFFFF 地址空间时,FSMC_NE1 引脚会自动设置为低电平。

    Bank1的256M字节空间由(ADDR[27:0])寻址28根地址线 。这里ADDR 是内部AHB地址总线,其中ADDR[25:0]对应外部存储器地址FSMC_A[25:0],而HADDR[26:27]对内部4个小块进行寻址:

    11-在这里插入图片描述

    ​ 向地址线上发送的地址数据对应这外部存储器内的地址,Bank1的一小块大小是64MB。

    ​ 而26根地址总线正好是64MB,即2^26=67 108 864=65 536KB = 64MB,这样FSMC的64MB每个bit位映射着存储器64MB的每个字节。可以这样理解,地址线上发的地址数据每变化一个bit位(或者地址数据每曾加一次),对应存储器内的一个字节地址。^(也可以这样理解,读数据时发送的地址增加了1,它返回了1个8bit位数据。 ) 这样能访问的bit位就是64MB*8=512Mbit。

    由于HADDR 为单字节地址,所以存储器寻址是8bit位宽时就很操作, 当存储器只能按16bit位寻址或者按字寻址时就很麻烦了。为了方便操作,FSMC输出地址时将地址数值右移了一位,从FSMC的bit1开始计数。
    

    12-在这里插入图片描述

    当存储器是双字节寻址时,向FSMC地址线上发送的地址数据会被自动右移一位,变成了偶数,实际输出到地址线的数据就是偶数。

    虽然是从FSMC_A[1]开始计数的,单FSMC_A[0]不能省略,必须链接到存储器的A[0]上。因为地址依然是16bit位的,只是只计偶数,地址线A[0]上一直是0。

    当存储器是按字寻址(32位)时,按照上面的方法地址数据会被自动右移两位,实际输出到地址线的数据就是4的倍数。

    13-在这里插入图片描述

    3.2 NAND FLASH和PC卡地址映射

    NAND FLASH和PC卡使用的接口相同,这里FSMC的使用方法也相同。

    NAND/PC卡的FSMC地址映射区域有三个bank2,bank3,bank4。

    14-在这里插入图片描述

    对于控制NAND Flash的Bank2,Bank3区域,其中的每个特性区,通用区又分为三个部分,数据区域,命令区域,地址区域。

    15-在这里插入图片描述

    4 FMC寄存器

  • NOR/PSRAM具有SRAM接口的都使用相同的控制器
  • NAND/PC卡具有NAND Flash接口的使用相同的控制器
  • 控制NOR Flash的寄存器有:

    寄存器 名称 功能
    FSMC_BCR1/2/3/4 控制寄存器 存储器类型,数据宽度,信号极性
    FSMC_BTR11/2/3/4 片选时序寄存器 数据时序,信号保持时间
    FSMC_BWTR1/2/3/4 写时序寄存器 专用于写时序的时间控制

    5 FMC时钟

    FSMC挂在在AHB总线上,时钟信号来自于HCLK(stm32f407 默认168MHz),FMC控制存储器的同步时钟输出由此分频得到。

    16-在这里插入图片描述

  • FSMC的时钟频率可以通过**FSMC_BTR **寄存器的 **CLKDIV **位配置,分频系数可以是2~16,也就是说,若它与同步类型的 SRAM 通讯时,同步时钟最高频率为84MHz。
  • 同步时钟仅使用于同步存储器,对异步类型的存储器不起作用。
  • 17-在这里插入图片描述

    18-在这里插入图片描述

    5.1 FSMC控制异步存储器的时序规则:

    同步模式(读或写),所有输出信号均在HCLK的上升沿变化。

    NOEL NWEL NEL NADVL NADVH NBLL  地址有效输出在 FMC_CLK 时钟的下降沿变化。
    NOEH NWEH NEH NOEH  	  NBLH  地址有效输出在 FMC_CLK 时钟的上升沿变化。  
    

    当存储器为异步类型时,不使用同步时钟信号,所以时钟分频配置不起作用。

    ​ 根据异步存储器的特点,FSMC又扩展了种时序模式,模式A,模式B,模式C,模式D。也可以使用混合模式来操作,例如模式A读,模式B写。

    ​ 如果禁用扩展模式,FSMC可以在两种模式下工作,模式1和模式2
    如果选择的存储类型是SRAM、PSRAM类型的,模式1为默认模式,
    如果选择的存储类型是NOR存储器类型的,模式2为默认模式

    19-在这里插入图片描述

    20-在这里插入图片描述

    比较以上模式时序

    时序模式类型 特性描述 与其它模式的异同
    模式1 适用于SRAM/PSRAM (CRAM) 访问阶段需要两个持续时间
    模式A 适用于SRAM/PSRAM (CRAM)
    NOE在读数据时在第二个保持时间为低电平
    (数据线由存储器控制发出数据时NOE为低)
    访问阶段需要两个持续时间
    模式2(B) 适用于NOR Flash 时序,
    有NADV信号,没有NBL信号。
    模式2和模式B的读取访问相同,写入访问不同,
    模式1FSMC向数据线发数据时NWE为低。
    模式B的FSMC向数据线发数据时为高。
    访问阶段需要两个持续时间
    模式C 适用于NOR Flash 时序,写入访问和和模式2相同。
    读取访问与模式2不同的是在两个持续时间之间
    NOE发生了切换(由高向的跳变)
    访问阶段需要两个持续时间
    模式D 和模式C相同,
    就是在第一和第二保持时间之间多了一个中间时间
    访问阶段需要三个持续时间

    再理解一下上面的地址映射:

    Bank是大区域,每个Bank内又分了4个小区域
    不同的存储器类型对应着不同的,例如这个寄存器BankFMC_BCR[1……4],后面的数字对应着4个Bank,库函数里是根据存储器类型来选择对应的Bank的。
    而HADDR[26:27]选择是每个Bank中的小区域,同时也对应着MCU外部的4个FSMC_NE引脚。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 单片机FMC外设详细使用方法1【超级详细教程】

    发表评论