FMC和FSMC

FMC/FSMC

FMC 灵活存储控制器

FSMC 灵活静态存储控制器

FMC是STM32F429/439专有的,因为驱动SDRAM时需要定时刷新,而FSMC存在于F1和F4中我们常用的芯片中。

看名字就知道,既然是存储控制器,就是用来控制存储器的。

RAM有两大类:静态RAM(SRAM) 和 动态RAM(DRAM)

静态RAM(SRAM):

不需要刷新电路,掉电丢失数据,而且一般不是行列地址复用的

动态RAM(DRAM):

需要每隔一段时间刷新一次数据,才能保存数据,掉电丢失数据,是行列地址复用的,许多都有页模式。

同步动态存储器(SDRAM)

数据的读写需要时钟来同步。

存储单元不是线性排列的,是分页的。

DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度不如SRAM。

FMC驱动LCD屏

        正点原子在STM32F429阿波罗开发指南中提到,

        STM32F429 的 FMC 将外部设备分为 3 类:NOR/PSRAM 设备、NAND 设备和 SDRAM 设备。他们共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备,比如外设 TFTLCD 就是用的 FMC_NE1 做片选,其实就是将 TFTLCD 当成 SRAM 来控制。

之所以可以将LCD屏当作SRAM来控制,是因为外部SRAM的控制一般有:

        地址线(A0~A18),数据线(D0~D15),写信号 WE,读信号 OE,片选信号 CS,

        如果SRAM支持字节控制,那么还有高/低字节 UB/LB信号。

而 TFTLCD 的信号包括:

        数据线D0~D15、命令/数据选择信号 RS、写信号 WR、读信号RD 和 片选信号CS

RS,寄存器选择信号,又被称为命令/数据选择信号

        FMC 支持 8/16/32位数据宽度,LCD一般是16位宽度的

        FMC 将外部存储器划分为 6 个固定大小为 256M 字节的存储块,也就是总共管理 1.5GB 空间。每个块又被分为 4 个区,一个区 64 M。

        STM32 将

        0x6000 0000 ~0x9FFF FFFF

        0xC000 0000~ 0xDFFF FFFF

        这1.5G 地址作为外部存储器地址。

        0x6000 0000~0x6FFF FFFF       BANK1     SRAM使用

        0x7000 0000~0x7FFF FFFF       BANK2    

        0x8000 0000~0x8FFF FFFF       BANK3     FLASH使用

        0x9000 0000~0x9FFF FFFF       BANK4     PC卡使用

        0xC000 0000~0xCFFF FFFF BANK5 

        0xD000 0000~0xDFFF FFFF BANK6        SDRAM使用 

将 TFTLCD 当作SRAM设备来用,需要用到的 FMC 存储块是 BANK1。

BANK1 的 256M 字节空间由 28 根地址线 ADDR[27:0] 寻址,地址线是 AHB 地址总线,

其中ADDR[27:26]用于对 4 个区进行寻址

       ADDR[25:0] 来自外部存储器地址 FMC_A[25:0]

ADDR[25:0] 位为外部存储器地址,

由于 ADDR 按字节寻址,存储器可以按字寻址,

根据存储器数据宽度的不同,向存储器发送的地址也有所不同。

由于 TFT 屏使用的是16位数据宽度,因此 ADDR[0] 并没有用到

相当于 ADDR[25:1] 用来寻址存储器的 FMC_A[24:0],以16bit为单位的空间

至于于 ADDR[27:26] 的设置,当使用 FMC_NE1 来连接外部设备的时候,是直接在寄存器中配置区域1 的寄存器组。

FMC 的 SRAM/NOR FLASH 控制器支持同步突发访问异步突发访问两种方式。

同步突发访问:

        FMC 将 系统时钟HCLK 分频后,发送给外部存储器作为 同步时钟信号FMC_CLK。此时需要设置的时间参数有时钟分频系数(CLKDIV)获取第1个数据所需要的等待延迟(DATLAT)

异步突发访问:

        FMC 主要设置 3 个时间参数:

        地址建立时间(ADDSET)数据建立时间(DATAST) 地址保持时间(ADDHLD)

        FMC综合了 SRAM、PSRAM和 NOR Flash 产品的信号特点,定义了 4 种不同的异步时序模型。选用不同的时序模型时,需要设置不同的时序参数。

具体的读写时序就不放了,时序一确定,把 FMC 当作桥梁,访问 LCD 外设。
 

FMC寄存器

BANK控制寄存器 BCR1/2/3/4

32位寄存器,

EXTMOD:扩展模式使能。是否允许读写时序分开控制(是否启用BWTR)。

WREN:写使能位

MTYP[1:0]: 存储器类型。00 SRAM  01 PSRAM  10  FLASH  11 保留

MBKEN:存储块使能位

BANK时序寄存器 BTR1/2/3/4

        时序寄存器包含了每个存储器块的控制信息。如果 BCR 中设置了 扩展模式使能EXTMOD,则有 时序寄存器BTR 用来读 和 写时序寄存器BWTR 用来写。

控制读操作的相关时序,需要用到:

ACCMOD[1:0]:访问模式A/B/C/D。

DATAST[7:0]:数据保持时间。0为保留设置。其他设置代表保存时间多少个HCLK时钟周期。最大255个时钟周期。其实就是时序中读信号RD的持续时间。

ADDSET[3:0]:地址建立时间。最大15个HCLK周期。其实就是RD高电平持续时间。

BANK写时序寄存器 BWTR1/2/3/4

写时序寄存器BWTR 和 时序寄存器WTR 类似,也是 访问模式、数据保持时间、地址建立时间 这三个设置。数据保持时间和地址建立时间对应的是 WR 高/低电平的持续时间。

注意事项

MDK将FMC的寄存器组合成 BTCR[8]寄存器组,他们的对应关系如下:
BTCR[0]对应 FMC_BCR1,BTCR[1]对应 FMC_BTR1 
BTCR[2]对应 FMC_BCR2,BTCR[3]对应 FMC_BTR2 
BTCR[4]对应 FMC_BCR3,BTCR[5]对应 FMC_BTR3 
BTCR[6]对应 FMC_BCR4,BTCR[7]对应 FMC_BTR4

FSMC和FMC的区别

这是 FMC接口 的存储器映射图像。

FSMC 只支持   

        0x6000 0000 ~ 0x6FFF FFFF,    

        0x7000 0000 ~ 0x7FFF FFFF,                (SRAM)

        0x8000 0000 ~ 0x8FFF FFFF,                (FLASH)

        0x9000 0000 ~ 0x9FFF FFFF                 (PC)          

4 个256M 的块。

FMC 可以额外支持    (SDRAM)

        0xC000 0000 ~ 0xCFFF FFFF

        0xD000 0000 ~ 0xDFFF FFFF

2 个256M 的块 

STM32F429芯片带有LTDC控制器,可以直接外接RGB屏,实现液晶驱动。

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值