# FSMC

# In one word

可变静态存储控制器

通过它能够读写外部存储器,相当于把外部存储器连接到了内核 External RAM 的地址,可直接访问

配置时有多种时序模型

参考资料:https://blog.csdn.net/as480133937/article/details/123740365 与 探索者开发指南

本文主要讨论 NOR/PSRAM/SRAM 控制器 即块 1

# 对外部存储器的划分

四个存储块(Bank),大小 256MB

存储块下分四个区,即每个区 64MB

# 寻址

# Intro

问:Bank1 的 256MB 空间,怎么去寻址?

答:通过 28 根地址线 HADDR [27:0]

HADDR 是 内部 AHB 的地址总线

# 寻址的过程

[27:26] 决定了选区(1-4)控制 NEx 信号

[25:0] 对应外部存储器地址 2^26 = 2^6 M = 64M FSMC_A [25:0] 外部存储器的地址总线

每个地址是 1Byte 数据

# 不同宽度数据总线

其中对应不同宽度的数据总线,HADDR 与 FSMC_A 的关系略有不同

(此处是考虑这种情况,比方说只支持 16 位写入的 16 位 NOR FLASH)

16 位:HADDR [25:1] —> FSMC_A [24:0]

8 位:HADDR [25:0] —> FSMC_A [25:0]

存储空间的一个验证性计算:

  • 16 位,总空间:地址数 2^25 * 数据位宽 16 \ 字节位数 8 = 2^26 = 64M
  • 8 位,总空间:地址数 2^26 * 数据位宽 8 \ 字节位数 8 = 2^26 = 64M

# NOR/PSRAM/SRAM 控制器的寄存器配置

# 概括

控制 NOR FLASH 的有 FSMC_BCR1/2/3/4 控制寄存器、FSMC_BTR1/2/3/4 片选时序寄存器以及 FSMC_BWTR1/2/3/4 写时序寄存器。
每种寄存器都有 4 个,分别对应于 4 个不同的存储区域,x=1-4 对应四个区

FSMC_BCR 控制寄存器可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。
FMC_BTR 时序寄存器用于配置 SRAM 访问时的各种时间延迟,如数据保持时间、地址保持时间等。
FMC_BWTR 写时序寄存器与 FMC_BTR 寄存器控制的参数类似,它专门用于控制写时序的时间参数

# FSMC_BCRx:控制寄存器

几个比较关键的位

  • EXTMOD 扩展模式使能(是否允许读写不同的时序)
  • WREN 写入使能(控制能否在存储区域写入)
  • MWID 配置存储器的数据总线宽度(8 位或者 16 位)
  • MTYP 配置存储器类型
  • MBKEN 存储区域使能(控制能否访问该存储区域)

EXTMOD 使能后,分别控制 FSMC_BTRx, FSMC_BWTRx

# FSMC_BTRx:片选时序寄存器

配置读操作的时序

  • ACCMOD 配置异步访问模式(共 4 种)
  • DATAST 配置数据的持续时间
  • ADDSET 配置地址的持续时间

# FSMC_BWTRx:写时序寄存器

与 FSMC_BTRx 类似,但是配置的是写操作的时序

  • ACCMOD DATAST ADDSET

这三个寄存器可以设置 FSMC 访问外部存储器的时序参数

# FSMC 时钟

挂载在 AHB 总线,时钟 = HCLK,同步时钟输出就是由它分频得到

# 两种访问方式

同步突发访问与异步突发访问

  • 同步:
    • 需要提供时钟信号,将 HCLK 分频后作为 FSMC_CLK 输出
    • 设置分频系数(CLKDIV)和等待延迟(DATLAT)
  • 异步:
    • 4 种模型 ModeA~D
    • 参数主要有:地址建立时间,数据建立时间,地址保持时间
    • 实际中需要根据选用的存储器确定时序模型

# ModeA 读写时序

# 相关信号的定义:

  • A [25:0] 地址总线
  • D [15:0] 数据总线
  • NBL [1:0] 数据掩码 一共有 4 种组合,32 位对应 4 字节,然而存储器的数据总线 8 或 16 位,因此要多次传输,需要一个数据掩码标注传输的是哪一部分的数据

下面的全部低电平有效

  • NEx 单个存储块内部的某一个区的片选信号 NE 一共有 4 位,对应 4 个区
  • NOE 输出使能
  • NWE 写使能

# 工作的过程(如何访问外部存储器)

当 FSMC 外设被配置成正常工作,并且外部接了 PSRAM,若向 0x60000000 地址写入数据
如 0xABCD,FSMC 会自动在各信号线上产生相应的电平信号,写入数据。FSMC 会控制片选
信号 NE1 输出低电平,相应的 PSRAM 芯片被片选激活,然后使用地址线 A [25:0] 输出
0x60000000,在 NWE 写使能信号线上发出低电平的写使能信号,而要写入的数据信号 0xABCD
则从数据线 D [15:0] 输出,然后数据就被保存到 PSRAM 中了。

经过正确配置,外部存储器的存储单元映射到 External RAM,这之后,程序可以对这个地址直接进行读写操作,与外部存储器交互的过程即实际的操作(地址、数据、时序)由 FSMC 外设自动完成

正点原子 TFT 屏

正点原子 TFT 屏移植 CubeMX

Edited on Views times