请问什么是fsmc?

请问什么是fsmc?,第1张

FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用的一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。

STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。

扩展资料

FSMC技术优势:

①支持多种静态存储器类型。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NANDFlash存储器的引脚直接相连。

②支持丰富的存储 *** 作方法。FSMC不仅支持多种数据宽度的异步读/写 *** 作,而且支持对NOR/PSRAM/NAND存储器的同步突发访问方式。

③支持同时扩展多种存储器。FSMC的映射地址空间中,不同的BANK是独立的,可用于扩展不同类型的存储器。当系统中扩展和使用多个外部存储器时,FSMC会通过总线悬空延迟时间参数的设置,防止各存储器对总线的访问冲突。

④支持更为广泛的存储器型号。通过对FSMC的时间参数设置,扩大了系统中可用存储器的速度范围,为用户提供了灵活的存储芯片选择空间。

⑤支持代码从FSMC扩展的外部存储器中直接运行,而不需要首先调入内部SRAM。

参考资料来源:百度百科-FSMC

参考资料来源:百度百科-静态存储器

FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是:

● 将AHB传输信号转换到适当的外部设备协议

● 满足访问外部设备的时序要求

所有的外部存储器共享控制器输出的地址、数据和控制信号,每个外部设备可以通过一个唯一

的片选信号加以区分。FSMC在任一时刻只访问一个外部设备。

FSMC具有下列主要功能:

● 具有静态存储器接口的器件包括:

─ 静态随机存储器(SRAM)

─ 只读存储器(ROM)

─NOR闪存

─PSRAM(4个存储器块)

● 两个NAND闪存块,支持硬件ECC并可检测多达8K字节数据

● 16位的PC卡兼容设备

● 支持对同步器件的成组(Burst)访问模式,如NOR闪存和PSRAM

● 8或16位数据总线

● 每一个存储器块都有独立的片选控制

● 每一个存储器块都可以独立配置

● 时序可编程以支持各种不同的器件:

─ 等待周期可编程(多达15个周期)

─ 总线恢复周期可编程(多达15个周期)

─ 输出使能和写使能延迟可编程(多达15周期)

─ 独立的读写时序和协议,可支持宽范围的存储器和时序

● PSRAM和SRAM器件使用的写使能和字节选择输出

● 将32位的AHB访问请求,转换到连续的16位或8位的,对外部16位或8位器件的访问

● 具有16个字,每个字32位宽的写入FIFO,允许在写入较慢存储器时释放AHB进行其它 ***

作。在开始一次新的FSMC *** 作前,FIFO要先被清空。

通常在系统复位或上电时,应该设置好所有定义外部存储器类型和特性的FSMC寄存器,并保持

它们的内容不变;当然,也可以在任何时候改变这些设置。

STM32 FSMC学习记录-SRAM

MOSUI1994

翻译

关注

1点赞·122人阅读

 

目录

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_NWE WE# 写入使能

FSMC_NOE OE# 输出使能 (读使能)

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_NORSRAM1 0x60000000-0x63FFFFFF

FSMC_Bank1_NORSRAM2 0x64000000-0x67FFFFFF

FSMC_Bank1_NORSRAM3 0x68000000-0x6BFFFFFF

FSMC_Bank1_NORSRAM4 0x6C000000-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 寄存器中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11362144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存