【STM32】FSMC—扩展外部 SRAM 初步使用 1

基于野火指南者《零死角玩转 STM32F103---指南者》的学习

STM32F103系列

FSMC Flexible Static Memory Controller简介

1.详细功能参看《STM32F10x参考手册》,这边是概述

是一个外设,挂载在AHB总线下。

可以用于驱动包括 SRAMNOR FLASH 以及 NAND FLSAH 类型的存储器,不能驱动如 SDRAM 这种动态的存储器

STM32F429 系列的控制器中,它具有 FMC 外设,支持控制 SDRAM 存储器。

简单来说类似于GPMC,可以以直接寻址的方式操作外置的存储设备,比如挂载一块SRAM在0x6000 0000处,不需要再像操作外置存储设备那样使用相关协议写一个字节,直接*(char)0x6000 0000 = 0x01就可以了。

2.根据外接的存储设备选引脚

2.1 控制不同类型存储器 的时候会有一些不同的引脚,看起来有非常多

2.2 不同模式使用不同引脚,根据框图分为NOR/PSRAM ,NANDPC卡信号三类

2.3 FSMC_A 和数据线 FSMC_D是所有控制器都共用

3. 对于同一种类的存储器也可以有不同模式,以NOR/PSRAM模式为例子

我们需要操作的是NOR型存储器,所以选择NOR型模式,

复用模式和非复用模式依照实际情况选择(也就是地址线和数据线是否复用)
复用引脚和非复用

FSMC 信号名称 信号方向 功能
CLK 输出 时钟(同步突发模式使用);;
NE[x] 输出 片选,x = 1...4
NADV 输出 地址、数据线复用时作锁存信号
A[25:0] 输出 地址总线
D[15:0] 输入/输出 双向数据总线
NOE 输出 输出使能
NWE 输出 写使能
NWAIT 输入 NOR 闪存要求 FSMC 等待的信号
NBL[1] 输出 高字节使能(存储器信号名称为:NUB) PSRAM使用
NBL[0] 输出 低字节使能(存储器信号名称为:NLB) PSRAM使用

N表示低有效

其他型号的存储器引脚分配详见资料手册

4.地址映射 与 地址线

地址映射 分配给FSMC的地址是哪里?

FSMC 连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据 其中这部分在内存中有着固定的存储地址,存储单元是映射到 STM32 的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC 外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。

0x6000 0000 至 0x9FFF FFFF用于FSMC。

FSMC 把整个 存储区域分成了 4 个 Bank 区域,NOR 及 SRAM 存储器只能使用 Bank1 的地址,在每个 Bank 的内部又分成了 4 个小块,每个小块有相应的控制引脚用于连接片选信号FSMC_NE1/2/3/4

当 STM32 访问0x60000000-0x63FF FFFF 地址空间时,其实就是访问FSMC BANK1的第1块区域,FSMC_NE1 引脚会自动设置为低电平

0x60000000-0x6FFF FFFF这片地址也就是Bank1的256M字节空间,在芯片内部由AHB总线上的28根地址线(ADDR[27:0])寻址。这里ADDR 是内部AHB地址总线,其中ADDR[25:0]对应外部存储器地址FSMC_A[25:0],而HADDR[26:27]对应4个区.

ADDR[25:0],有26根地址线,也就是可以进行2**26地址范围的寻址,(也就是0x400 0000)。

HADDR[26:27]对4个区进行寻址.

四个区对应二进制,红色部分就是bit HADDR[26:27]:

Bank1:0110-0000 0000-0000 0000-0000 0000-0000 ,即 60 00 00 00;

Bank2:0110-0100 0000-0000 0000-0000 0000-0000 ,即 64 00 00 00;

Bank3:0110-1000 0000-0000 0000-0000 0000-0000 ,即 68 00 00 00;

Bank4:0110-1100 0000-0000 0000-0000 0000-0000 ,即 6c 00 00 00;


总结对于存储块BANK1 cpu给他分配的地址是0x60000000-0x6FFF FFFF,那么cpu对他寻址的话是使用32根地址线,其中低ADDR[25:0]根可以外接到外部存储器进行0x400 0000范围的寻址,ADDR[27:26]根可以在Bank中的四部分选择一个。

外部存储器宽度

默认情况下存储器的一个地址对应的是1个byte,那么可以正常当作cpu上内部存储一样读取。如果存储器地址数据为16位,32位,也就是两个字节一个地址,四个字节一个地址,那么控制16位,32位宽度的存储设备,且不支持单字节访问就比较麻烦了。

存储器地址数据为16位,32位的这种类型的存储器,我们本来对应64M个的byte的地址,就变成了32M个的双字节byte的地址,也就是最后一位ADDR[bit0]无效了,因为地址一次要加2


HADDR[27:0]:AHB总线对外设FSMC寻址的地址线,AHB总线与FSMC的连接
FSMC_A[25:0]:FSMC外设对外部扩展存储的寻址线。

不同类型的存储器 不同类型的控制方式

根据类型选择模式:FSMC可以控制很多类型的器件,模式1 ------ SRAM/CRAM

类型模式下还有模式ABCD : 对于模式1还有ABCD四种模式,这里选择模式B进行说明

FSMC 控制异步 NOR FLASH 的时序

FSMC 读 NOR FLASH 的时序图(模式 B)

当内核发出访问某个指向外部存储器地址时,FSMC 外设会根据配置控制信号线产生时序访问存储器,上图中的是访问外部异步 NOR FLASH(模式 B)时 FSMC外设的读写时序。

以读时序为例,该图表示一个存储器操作周期由地址建立周期(ADDSET)、数据建立周期(DATAST)以及 2个 HCLK周期组成。在地址建立周期中,地址线发出要访问的地址,数据掩码信号线指示出要读取地址的高、低字节部分,片选信号使能存储器芯片;地址建立周期结束后读使能信号线发出读使能信号,接着存储器通过数据信号线把目标数据传输给 FSMC,FSMC 把它交给内核。

FSMC 写 NOR FLASH 的时序图(模式 B)

写时序类似,区别是它的一个存储器操作周期仅由地址建立周期(ADDSET)和数据建立周期(DATAST)组成,且在数据建立周期期间写使能信号线发出写信号,接着FSMC把数据通过数据线传输到存储器中。

FSMC寄存器

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

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

控制 NOR FLASH 的有 FSMC_BCR1/2/3/4 控制寄存器、FSMC_BTR1/2/3/4 片选时序寄存器以及 FSMC_BWTR1/2/3/4 写时序寄存器。

FSMC时钟

FSMC 外设挂载在 AHB 总线上,时钟信号来自于 HCLK(默认 72MHz),控制器的同步时钟输出就是由它分频得到。

它的时钟频率可通过 FSMC_BTR 寄存器的 CLKDIV 位配置,HCLK 与 FSMC_CLK 的分频系数(CLKDIV),可以为 2~16 分频

它可用于与同步类型的 NOR FLASH 芯片通过FSMC_CLK 引脚输出进行同步通讯。

对于异步类型的存储器,不使用同步时钟信号,所以时钟分频配置不起作用。

其他资料

收集参考资料: keil中扩展RAM的使用与配置

相关推荐
blessing。。4 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
嵌新程1 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
Lin2012302 小时前
STM32 Keil5 attribute 关键字的用法
stm32·单片机·嵌入式硬件
电工小王(全国可飞)2 小时前
STM32 RAM在Memory Map中被分为3个区域
stm32·单片机·嵌入式硬件
maxiumII2 小时前
Diving into the STM32 HAL-----DAC笔记
笔记·stm32·嵌入式硬件
美式小田5 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
兰_博5 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
时光の尘6 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
嵌入式大圣7 小时前
单片机结合OpenCV
单片机·嵌入式硬件·opencv
日晨难再9 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件