当前位置:   article > 正文

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

stm32 外接 ram

基于野火指南者《零死角玩转 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;

在这里插入图片描述
总结对于存储块BANK1cpu给他分配的地址是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的使用与配置

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/155949
推荐阅读
相关标签
  

闽ICP备14008679号