STM32之FMC—扩展外部 SDRAM

文章目录

一、FMC外设介绍

STM32自带的FSMC功能,就是专门为这类存储器设计的,在STM32上,有一些引脚被专门设计成地址线,还有一些被专门设计成数据线,还有一些被设计成控制线,然后这些地址线和数据线对应着固定的地址,只要外部的DRAM等存储器将对应的数据线连接到STM32这些对应的引脚上,引脚功能设置为复用模式,通过配置FSMC ,可以直接给上面那个固定的地址赋值 ,其他操作STM32都会自动给你完成,就可以把数据存储到SDRAM

配置好直接赋值就行,就像操作内部RAM,其他的STM32内部外设自动操作。
极大的方便了我们的程序编写,其实这就好比软件IIC SPI 跟硬件IIC SPI 一样 我们不需要关心协议本身的时序,这些都由STM32内部来设置,我们只需要发送和读取数据就可以,STM32跟外部存储器通信,使用硬件方式就是FMC,这样就很容易理解了
FSMC 连接好外部的存储器并初始化后,就可以直接通过访问地址来读写数据 其中这部分在内存中有着固定的存储地址,存储单元是映射到 STM32 的内部寻址空间的;在程序里,定义一个指向这些地址的指针,然后就可以通过指针直接修改该存储单元的内容,FSMC 外设会自动完成数据访问过程,读写命令之类的操作不需要程序控制。

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

具体是选择那个小快,由地址线(ADDR[27:26])寻址确定

二、SDRAM 控制原理

STM32 控制器芯片内部有一定大小的 SRAM 及 FLASH 作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在 STM32 芯片的外部扩展存储器了。

STM32F429 系列芯片扩展内存时可以选择 SRAM 和 SDRAM,由于 SDRAM 的"容量/价格"比较高,即使用 SDRAM 要比 SRAM 要划算得多。

给 STM32 芯片扩展内存与给 PC 扩展内存的原理是一样的,只是 PC 上一般以内存条的形式扩展,内存条实质是由多个内存颗粒(即 SDRAM 芯片)组成的通用标准模块,而STM32 直接与 SDRAM 芯片连接。

MT48LC4M32B2 的SDRAM 芯片内部结构框图,以它为模型进行学习。

1、SDRAM关键参数

a、容量、分区

标准的 SDRAM 一般都是 4 个 BANK,这个芯片也不例外,芯片的总容量:1Mbit x 32bit x 4bank = 128Mbit 。

每个 BANK 由 4096rows x 256columns x 32bits 组成。这个比较重要,配置的时候要用到,也就是 12 行 8 列。

片选采用的 SDNE0,那么 SDRAM 的首地址是 0xC000 000,控制 16MB 的空间。

b、引脚

SDRAM 使用

像使用内部 SRAM 一样使用 SDRAM

2、SDRAM芯片IS42S16400J

IS42S16400J是一款64Mb的SDRAM芯片,常用于嵌入式系统。在STM32中使用需配置FSMC为SDRAM模式,包括预充电、初始化和时序设置。文章详细介绍了SDRAM的引脚定义、命令如自我刷新、自动刷新、激活、预充电等。

IS42S16400J是一种高速同步动态随机存储器(SDRAM),64Mb的存储容量,采用4个bank,每个bank大小为16Mb,总线宽度为16位,工作电压为3.3V。它是一种常用的存储器芯片,广泛应用于嵌入式系统、通信设备、计算机等领域。

同步:指其时钟频率域CPU总线的系统时钟频率相同;

动态:指SDRAM存储阵列需要不断的刷新来保持数据不丢失;

随机:指数据不是线性依次存储,而是自由的指定地址进行数据的读写;

3、SDRAM 控制引脚说明

控制逻辑

SDRAM 内部的"控制逻辑"指挥着整个系统的运行,外部可通过 CS、WE、CAS、RAS 以及地址线来向控制逻辑输入命令,命令经过"命令器译码器"译码,并将控制参数保存到"模式寄存器中",控制逻辑依此运行。

地址控制

SDRAM 包含有"A"以及"BA"两类地址线,A 类地址线是行(Row)与列(Column)共用的地址总线,BA 地址线是独立的用于指定 SDRAM 内部存储阵列号(Bank)。在命令模式下,A 类地址线还用于某些命令输入参数。

SDRAM 的存储阵列

要了解 SDRAM 的储存单元寻址以及"A"、"BA"线的具体运用,需要先熟悉它内

部存储阵列的结构

SDRAM 内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。

和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是

SDRAM 芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为

存储阵列(Bank),目前设计的 SDRAM 芯片基本上内部都包含有 4 个这样的 Bank,寻址时

指定 Bank 号以及行地址,然后再指定列地址即可寻找到目标存储单元。

SDRAM 的命令

控制 SDRAM 需要用到一系列的命令,见表 26-2。各种信号线状态组合产生不同的控制命令。

预充电

SDRAM 的寻址具有独占性,所以在进行完读写操作后,如果要对同一个 Bank 的另

一行进行寻址,就要将原来有效(ACTIVE)的行关闭,重新发送行/列地址。Bank 关闭当前工作行,准备打开新行的操作就是预充电(Precharge)。

预充电可以通过独立的命令控制,也可以在每次发送读写命令的同时使用"A10"线

控制自动进行预充电。实际上,预充电是一种对工作行中所有存储阵列进行数据重写,并对行地址进行复位,以准备新行的工作。

独立的预充电命令时序见图 26-6。该命令配合使用 A10 线控制,若 A10 为高电平时,所有 Bank 都预充电;A10 为低电平时,使用 BA 线选择要预充电的 Bank。

刷新

SDRAM 要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作本质是一样的。

但因为预充电是对一个或所有 Bank 中的工作行操作,并且不定期,而刷新则是有固定的周期,依次对所有行进行操作,以保证那些久久没被访问的存储单元数据正确。

刷新操作分为两种:"自动刷新"(Auto Refresh)与"自我刷新"(Self Refresh),发

送命令后 CKE 时钟为有效时(低电平),使用自动刷新操作,否则使用自我刷新操作。不论

是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

W9825G6KH:

芯片有4个bank,每个bank13行,9列,数据位为16bit,所以整体大小为:4*(2^13)*(2^9)*16=32M。

板载一片SDRAM,型号为 W9825G6KH,大小为 32 MB。

W9825G6KH引脚

数据总线位宽使用了16bit:FMC D0 - FMC D15;

地址总线位宽使用了13bit:FMC A0 - FMC A12;

BANK选择信号线有两条:FMC BA0 和 FMC BA1;

时钟使能信号使用FMC SDCKE0,片选信号使能使用FMC SDME0,可以看出使用SDRAM区域1;

其它通用信号线:FMC SDNWE、FMC SDNCAS、FMC SDNRAS、FMC SDCLK;

数据掩码信号线使用 FMC NBL0 和 FMC NBL1,分别控制输出高8位还是低8位;

三、STM32F429 FMC

接口的 SDRAM控制器,具有如下特点:

两个 SDRAM 存储区域,可独立配置

支持 8 位、 16 位和 32 位数据总线宽度

支持 13 位行地址, 11 位列地址, 4 个内部存储区域: 4x16Mx32bit (256MB)、

4x16Mx16bit(128 MB)、 4x16Mx8bit (64 MB)

支持字、半字和字节访问

自动进行行和存储区域边界管理

多存储区域乒乓访问

可编程时序参数

支持自动刷新操作,可编程刷新速率

自刷新模式

读 FIFO 可缓存,支持 6 行 x32 位深度( 6 x14 位地址标记)/

① 速度等级:当CL=3时最高速度为166Mhz。因为STM32F767的HCLK=216Mhz,所以需要进行二分频,使SDRAM的时钟频率为108Mhz。

② 行地址宽度和列地址宽度:有A0-A12 总共13条行地址线,有A0-A8总共9条列地址线。

四、其他文章

使用RGB屏幕前提是配置好SDRAM,因为需要缓冲区是建立在SDRAM上面, 如何配置请看我这个文章https://blog.csdn.net/a2267542848/article/details/110944197

打开DMA2D

https://blog.csdn.net/as480133937/article/details/123740365

相关推荐
美式小田2 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
兰_博2 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
时光の尘2 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
嵌入式大圣4 小时前
单片机结合OpenCV
单片机·嵌入式硬件·opencv
日晨难再5 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件
yufengxinpian6 小时前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件
__基本操作__7 小时前
历遍单片机下的IIC设备[ESP--0]
单片机·嵌入式硬件
网易独家音乐人Mike Zhou13 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
zy张起灵13 小时前
48v72v-100v转12v 10A大功率转换电源方案CSM3100SK
经验分享·嵌入式硬件·硬件工程
PegasusYu16 小时前
STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组
stm32·教程·rtos·stm32cubeide·free-rtos·eventgroup·时间标志组