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学习记录-SRAMMOSUI1994
翻译
关注
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 寄存器中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)