STM32 FSMC学习记录-SRAM

 

目录

FSMC简介

FSMC-SRAM引脚分析

SRAM读写时序

 SRAM读写步骤

FSMC寄存器

FSMC时钟控制逻辑(时钟信号)

FSMC 的地址映射

FSMC控制SRAM时序​编辑

FSMC-SRAM结构体​编辑

 1.FSMC_NORSRAMTimingInitTypeDef

1.FSMC_NORSRAMInitTypeDef

​编辑


FSMC简介

 

FSMC-SRAM引脚分析

1.地址线 FSMC_A 和数据线 FSMC_D 是所有控制器都共用的。

接 SRAM

FSMC_A[18:0]A[18:0]行地址线
FSMC_D[15:0]I/O[15:0]数据线

2.FSMC_NE   接 SRAM CE#

FSMC_NE[1:4]CE#片选信号

是用于控制 SRAM 芯片的片选控制信号线, STM32 具有
FSMC_NE1/2/3/4 号引脚,不同的引脚对应 STM32 内部不同的地址区域。例如,当 STM32 访
问 0x6C000000-0x6FFFFFFF 地址空间时, FSMC_NE3 引脚会自动设置为低电平,由于它连接
到 SRAM 的 CE# 引脚,所以 SRAM 的片选被使能,而访问 0x60000000-0x63FFFFFF 地址时,
FSMC_NE1 会输出低电平。当使用不同的 FSMC_NE 引脚连接外部存储器时, STM32 访问 SRAM的地址不一样,从而达到控制多块 SRAM 芯片的目的。

3.地址译码器UB# 或 LB

FSMC_NBL[1:0]LB#、 UB#数据掩码信号

访问时,使用 UB# 或 LB# 线控制数据宽度,例如,当要访
问宽度为 16 位的数据时,使用行地址线指出地址,然后把 UB# 和 LB# 线都设置为低电平,那
么 I/O0-I/O15 线都有效,它们一起输出该地址的 16 位数据 (或者接收 16 位数据到该地址);当要
访问宽度为 8 位的数据时,使用行地址线指出地址,然后把 UB# 或 LB# 其中一个设置为低电平,
I/O 会对应输出该地址的高 8 位和低 8 位数据,因此它们被称为数据掩码信号。

4.读写使能

FSMC_NWEWE#写入使能
FSMC_NOEOE#输出使能 (读使能)

SRAM读写时序

 SRAM读写步骤


(1) 主机使用地址信号线发出要访问的存储器目标地址;
(2) 控制片选信号 CS1# 及 CS2# 使能存储器芯片;
(3) 若是要进行读操作,则控制读使能信号 OE# 表示要读数据,若进行写操作则控制写使能信
号 WE# 表示要写数据;
(4) 使用掩码信号 LB# 与 UB# 指示要访问目标地址的高、低字节部分;
(5) 若是读取过程,存储器会通过数据线向主机输出目标数据,若是写入过程,主要使用数据
线向存储器传输目标数据

 

上面不同类型的引脚是连接到 FSMC 内部对应的存储控制器中的。

1、NOR/PSRAM/SRAM 设备使用相同的控制器

2、NAND/PC 卡设备使用相同的控制器

不同的控制器有专用的寄存器用于配置其工作模式

FSMC寄存器

控制 SRAM 的寄存器

1、FSMC_BCR1/2/3/4 控制寄存器

•FSMC_BCR 控制寄存器可配置要控制的存储器类型、数据线宽度以及信号有效极性能参数。

2、FSMC_BTR1/2/3/4 片选时序寄存器

• FMC_BTR 时序寄存器用于配置 SRAM 访问时的各种时间延迟,如数据保持时间、地址保
持时间等

3、FSMC_BWTR1/2/3/4 写时序寄存器。
• FMC_BWTR 写时序寄存器与 FMC_BTR 寄存器控制的参数类似,它专门用于控制写时序
的时间参数。


FSMC时钟控制逻辑(时钟信号)

1、FSMC 外设挂载在 AHB 总线上,时钟信号来自于 HCLK(默认 168MHz)
2、NOR 控制器的 FSMC_CLK 的时钟频率可通过 FSMC_BTR 寄存器的 CLKDIV 位配置,可以配置为 HCLK 的 1/2 或 1/3。

原文:NOR 控制器的 FSMC_CLK 引脚输出的时钟,它可用于与同步类型的SRAM 芯片进行同步通讯,它的时钟频率可通过 FSMC_BTR 寄存器的 CLKDIV 位配置,可以配置为 HCLK 的 1/2 或 1/3,也就是说,若它与同步类型的 SRAM 通讯时,同步时钟最高频率为84MHz。

本示例中的 SRAM 为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不
起作用。
 

FSMC 的地址映射


FSMC 连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据,这种地址访问与
I2C EEPROM、 SPI FLASH 的不一样,后两种方式都需要控制 I2C 或 SPI 总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。而使用 FSMC 外接存储器时,其存储单元是映射到 STM32 的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单
元的内容, FSMC 外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。

 图中左侧的是 Cortex-M4 内核的存储空间分配,右侧是 STM32 FSMC 外设的地址映射。可以看到FSMC 的 NOR/PSRAM/SRAM/NAND FLASH 以及 PC 卡的地址都在 External RAM 地址空间内。
正是因为存在这样的地址映射,使得访问 FSMC 控制的存储器时,就跟访问 STM32 的片上外设
寄存器一样 (片上外设的地址映射即图中左侧的“Peripheral”区域)。
FSMC 把整个 External RAM 存储区域分成了 4 个 Bank 区域,并分配了地址范围及适用的存储器
类型,
如 NOR 及 SRAM 存储器只能使用 Bank1 的地址。在每个 Bank 的内部又分成了 4 个小块,每个小块有相应的控制引脚用于连接片选信号,如 FSMC_NE[4:1] 信号线可用于选择 BANK1 内部的 4 小块地址区域,见图 26_8,当 STM32 访问 0x6C000000-0x6FFFFFFF 地址空间时,会访问到 Bank1 的第 3 小块区域,相应的 FSMC_NE3 信号线会输出控制信号。

FSMC控制SRAM时序

 

FSMC-SRAM结构体

 1.FSMC_NORSRAMTimingInitTypeDef

这个结构体成员定义的都是 SRAM 读写时序中的各项时间参数,这些成员的的参数都与
FSMC_BRT 及 FSMC_BWTR 寄存器配置对应

 (1) FSMC_AddressSetupTime
本成员设置地址建立时间,即 FSMC 读写时序图 26_9 中的 ADDSET 值,它可以被
设置为 0-0xF 个 HCLK 周期数,按 STM32HAL 库的默认配置, HCLK 的时钟频率为
168MHz,即一个 HCLK 周期为 1/168 微秒。
(2) FSMC_AddressHoldTime
本成员设置地址保持时间,它可以被设置为 0-0xF 个 HCLK 周期数

(3) FSMC_DataSetupTime
本成员设置数据建立时间,即 FSMC 读写时序图 26_10 中的 DATAST 值,它可以被设
置为 0-0xF 个 HCLK 周期数。
(4) FSMC_BusTurnAroundDuration
本成员设置总线转换周期,在 NOR FLASH 存储器中,地址线与数据线可以分时复用,
总线转换周期就是指总线在这两种状态间切换需要的延时,防止冲突。控制其它存储
器时这个参数无效,配置为 0 即可。
(5) FSMC_CLKDivision
本成员用于设置时钟分频,它以 HCLK 时钟作为输入,经过 FSMC_CLKDivision 分频
后输出到 FSMC_CLK 引脚作为通讯使用的同步时钟。控制其它异步通讯的存储器时
这个参数无效,配置为 0 即可。
(6) FSMC_DataLatency
本成员设置数据保持时间,它表示在读取第一个数据之前要等待的周期数,该周期指
同步时钟的周期,本参数仅用于同步 NOR FLASH 类型的存储器,控制其它类型的存
储器时,本参数无效。
(7) FSMC_AccessMode
本成员设置存储器访问模式,不同的模式下 FSMC 访问存储器地址时引脚输出的时
序不一样,可选 FSMC_ACCESS_MODE_A/B/C/D 模式。一般来说控制 SRAM 时使用
A 模式。
这个 FSMC_NORSRAM_TimingTypeDef 时序结构体配置的延时参数,将作为下一节的 FSMC
SRAM 初始化结构体的一个成员。

1.FSMC_NORSRAMInitTypeDef

 

 这个结构体,除最后两个成员是上一小节讲解的时序配置外,其它结构体成员的配置都对应到
FSMC_BCR 中的寄存器位。各个成员意义介绍如下,括号中的是 STM32HAL 库定义的宏:
(1) NSBank
本成员用于选择 FSMC 映射的存储区域,它的可选参数以及相应的内核地址映射范
围见表 26‑4。
表 26‑4 可以选择的存储器区域及区域对应的地址范围

可以输入的宏对应的地址区域
FSMC_Bank1_NORSRAM10x60000000-0x63FFFFFF
FSMC_Bank1_NORSRAM20x64000000-0x67FFFFFF
FSMC_Bank1_NORSRAM30x68000000-0x6BFFFFFF
FSMC_Bank1_NORSRAM40x6C000000-0x6FFFFFFF

(2) DataAddressMux
本成员用于设置地址总线与数据总线是否复用 (FSMC_DATA_ADDRESS_MUX_DISABLE
/DISABLE),在控制 NOR FLASH 时,可以地址总线与数据总线可以分时复用,以减
少使用 STM32 信号线的数量。
(3) MemoryType
本成员用于设置要控制的存储器类型,它支持控制的存储器类型为 SRAM、 PSRAM
以及 NOR FLASH(FSMC_MEMORY_TYPE_SRAM/PSRAM/NOR)。
(4) MemoryDataWidth
本 成 员 用 于 设 置 要 控 制 的 存 储 器 的 数 据 宽 度, 可 选 择 设 置 成 8 或 16 位
(FSMC_NORSRAM_MEM_BUS_WIDTH_8/16/32)。
(5) BurstAccessMode
本成员用于设置是否使用突发访问模式 (FSMC_BURST_ACCESS_MODE_DISABLE
/DISABLE),突发访问模式是指发送一个地址后连续访问多个数据,非突发模式下
每访问一个数据都需要输入一个地址,仅在控制同步类型的存储器时才能使用突发
模式。
(6) AsynchronousWait
本 成 员 用 于 设 置 是 否 使 能 在 同 步 传 输 时 使 用 的 等 待 信 号
(FSMC_ASYNCHRONOUS_WAIT_DISABLE /DISABLE),在控制同步类型的 NOR 或
PSRAM 时,存储器可以使用 FSMC_NWAIT 引脚通知 STM32 需要等待。
(7) WaitSignalPolarity
本成员用于设置等待信号的有效极性,即要求等待时,使用高电平还是低电平
(FSMC_WAIT_SIGNAL_POLARITY_LOW /HIGH)。
(8) FSMC_WrapMode
本成员用于设置是否支持把非对齐的 AHB 突发操作分割成 2 次线性操作
(FSMC_WRAP_MODE_DISABLE /ENABLE),该配置仅在突发模式下有效。
(9) WaitSignalActive
本成员用于配置在突发传输模式时,决定存储器是在等待状态之前的一个
数据周期有效还是在等待状态期间有效
(FSMC_WAIT_TIMING_BEFORE_WS /
FSMC_WAIT_TIMING_DURING_WS)。
(10) WriteOperation
这个成员用于设置是否写使能 (FSMC_WRITE_OPERATION_DISABLE /ENABLE),禁
止写使能的话 FSMC 只能从存储器中读取数据,不能写入。
(11) WaitSignal
本成员用于设置当存储器处于突发传输模式时,是否允许通过 NWAIT 信号插入等待
状态
(FSMC_WAIT_SIGNAL_ENABLE /DISABLE)。
(12) ExtendedMode
本成员用于设置是否使用扩展模式 (FSMC_EXTENDED_MODE_ENABLE /DISABLE),
在非扩展模式下,对存储器读写的时序都只使用 FSMC_BCR 寄存器中的配置,即下
面的 FSMC_ReadWriteTimingStruct 结构体成员;在扩展模式下,对存储器的读写时序
可以分开配置,读时序使用 FSMC_BCR 寄存器,写时序使用 FSMC_BWTR 寄存器的
配置,即下面的 FSMC_WriteTimingStruct 结构体。
对本结构体赋值完成后,调用 FSMC_NORSRAMInit 库函数即可把配置参数写入到 FSMC_BCR
及 FSMC_BTR/BWTR 寄存器中。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 FSMC(Flexible Static Memory Controller)是STM32系列微控制器中的一个外设,它允许STM32与各种静态存储器进行数据交换。FSMC可以通过引脚连接SRAM、ROM、PSRAM、Nor Flash和Nand Flash等存储器。 在STM32F407或STM32F417系列芯片中,都带有FSMC接口。 要配置FSMC,具体的步骤和特性如下所示: 1. 配置FSMC引脚:根据具体的STM32型号和外部存储器的类型,选择合适的引脚进行连接,并将这些引脚设置为FSMC模式。 2. 配置FSMC控制器:设置FSMC控制器的控制寄存器来配置存储器类型、数据宽度、时序等参数。 3. 配置存储器:根据外部存储器的要求,设置相应的存储器控制寄存器来配置存储器的时序和操作模式。 4. 初始化FSMC:根据存储器的特性和需求,编写初始化函数来设置FSMC控制器和存储器的寄存器值,以确保正确的数据交换和访问。 FSMC的特点包括: - 灵活性:通过FSMCSTM32可以连接多种静态存储器,包括SRAM、ROM、PSRAM、Nor Flash和Nand Flash等。 - 高速数据交换:FSMC支持高速数据交换,可以实现快速的存储器读写操作。 - 多种操作模式:FSMC支持多种操作模式,包括异步模式和同步模式,以适应不同的存储器需求。 - 强大的时序配置:FSMC可以根据存储器的要求,灵活配置时序参数,以实现最佳的数据传输性能。 总之,STM32 FSMC是一种强大的外设,可以实现STM32与各种静态存储器之间的数据交换。通过配置FSMC引脚和控制器,并初始化FSMC,可以实现高速、灵活的存储器访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STM32 FSMC/FMC原理保姆级讲解(一)](https://blog.csdn.net/as480133937/article/details/123740365)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【STM32FSMC概述](https://blog.csdn.net/dengjin20104042056/article/details/108449814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值