FSMC —— 扩展外部 SRAN!

本文详细介绍了STM32如何通过FSMC外设扩展SRAM,包括SRAM的控制原理、引脚功能、读写流程以及FSMC的地址映射和时序控制。STM32F1系列不支持SDRAM扩展,仅支持使用FSMC扩展SRAM,而扩展SRAM时需要配置FSMC_BCR和FSMC_BTR寄存器以设定时序参数。地址映射使得外部SRAM可以直接被STM32内部寻址,简化了数据读写的操作流程。
摘要由CSDN通过智能技术生成

1. SRAM 控制原理
  STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了。
  扩展内存时一般使用SRAM和SDRAM存储器,但STM32F1系列的芯片不支持扩展SDRAM(STM32F429系列支持),它仅支持使用FSMC外设扩展SRAM,我们以 SRAM为例讲解如何为STM32扩展内存。由于引脚数量的限制,只有STM32F103ZE或以上型号的芯片才可以扩展外部SRAM。
  在这里插入图片描述

2. SRAM控制引脚说明

信号线类型说明
A0-A18I地址输入
I/O0-I/O7I/O数据输入输出信号,低字节
I/O8-I/O15I/O数据输入输出信号,高字节
CS和CS1#I片选信号,CS2高电平有效,CS1#低电平有效,部分芯片只有其中一个引脚
OE#I输出使能信号,低电平有效
WE#I写入使能,低电平有效
UB#I数据掩码信号Upper Byte,高位字节允许访问,低电平有效
LB#I数据掩码信号Lower Byte,低位字节允许访问,低电平有效

3. SRAM 的读写流程
在这里插入图片描述
在这里插入图片描述
读写时序的流程很类似,下面我们统一解说:
(1)主机使用地址信号线发出要访问的存储器目标地址;
(2)控制片选信号 CS1# 及 CS2# 时能存储芯片;
(3)若是要进行读操作,则控制读使能信号 OE# 表示要读数据,若进行写操作则控制写使能信号 WE# 表示要写数据;
(4)使用掩码信号 LB# 与 UB# 指示要访问目标地址的高、低字节部分;
(5)若是读取过程,存储器会通过数据线向主机输出目标数据,若是写入过程,主要使用数据线向存储器传输目标数据。

3. FSMC 框图剖析
STM32 的 FSMC 外设内部结构图:
在这里插入图片描述
① 通讯引脚
  在框图的右侧是FSMC外设相关的控制引脚,由于控制不同类型存储器的时候会有一些不同的引脚,看起来有非常多,其中地址线FSMC_A和数据线FSMC_D是所有控制器都共用的。这些FSMC引脚具体对应的GPIO端口及引脚号可在《STM32F103规格书》中搜索查找到,不在此列出。针对本示例中的SRAM控制器,我们整理出以下的FSMC与SRAM引脚对照表。
在这里插入图片描述
FSMC_NE是用于控制SRAM芯片的片选控制信号线,STM32具有FSMC_NE1/2/3/4号引脚,不同的引脚对应STM32内部不同的地址区域。

② 存储器控制器
  上面不同类型的引脚是连接到FSMC内部对应的存储控制器中的。NOR/PSRAM/SRAM设备使用相同的控制器,NAND/PC卡设备使用相同的控制器,不同的控制器有专用的寄存器用于配置其工作模式。
  控制SRAM的有FSMC_BCR1/2/3/4控制寄存器、FSMC_BTR1/2/3/4片选时序寄存器以及FSMC_BWTR1/2/3/4写时序寄存器。每种寄存器都有4个,分别对应于4个不同的存储区域,各种寄存器介绍如下:

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

③ 时钟控制逻辑
  FSMC外设挂载在AHB总线上,时钟信号来自于HCLK(默认72MHz),控制器的同步时钟输出就是由它分频得到。例如,NOR控制器的FSMC_CLK引脚输出的时钟,它可用于与同步类型的SRAM芯片进行同步通讯,它的时钟频率可通过FSMC_BTR寄存器的CLKDIV位配置,可以配置为HCLK的1/2或1/3,也就是说,若它与同步类型的SRAM通讯时,同步时钟最高频率为36MHz。本示例中的SRAM为异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。

4. FSMC的地址映射
  FSMC连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据,这种地址访问与I2C EEPROM、SPI FLASH的不一样,后两种方式都需要控制I2C或SPI总线给存储器发送地址,然后获取数据;在程序里,这个地址和数据都需要分开使用不同的变量存储,并且访问时还需要使用代码控制发送读写命令。而使用FSMC外接存储器时,其存储单元是映射到STM32的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。FSMC的地址映射见图。
在这里插入图片描述
  图中左侧的是Cortex-M3内核的存储空间分配,右侧是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小块地址区域,见图 27-8,当STM32访问0x68000000-0x6BFFFFFF地址空间时,会访问到Bank1的第3小块区域,相应的FSMC_NE3信号线会输出控制信号。
在这里插入图片描述
5. FSMC控制SRAM的时序
  FSMC外设支持输出多种不同的时序以便于控制不同的存储器,它具有ABCD四种模式,下面我们仅针对控制SRAM使用的模式A进行讲解。

FSMC模式A的读时序

在这里插入图片描述

FSMC模式A的写时序

在这里插入图片描述
  当内核发出访问某个指向外部存储器地址时,FSMC外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部SRAM时FSMC外设的读写时序。
  以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及2个HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给FSMC,FSMC把它交给内核。
  写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值