STM32之FMC—扩展外部 SDRAM

news2024/11/13 10:29:57

文章目录

  • 一、FMC外设介绍
  • 二、SDRAM 控制原理
    • 1、SDRAM关键参数
      • a、容量、分区
      • b、引脚
      • SDRAM 使用
    • 2、SDRAM芯片IS42S16400J
    • 3、SDRAM 控制引脚说明
    • 控制逻辑
    • 地址控制
    • SDRAM 的存储阵列
    • SDRAM 的命令
      • 预充电
      • 刷新
    • W9825G6KH:
      • W9825G6KH引脚
  • 三、STM32F429 FMC
  • 四、其他文章
    • 打开DMA2D

一、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*(213)*(29)*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 位地址标记)/

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dfb74417aeea40958563fc625698d3be.png
① 速度等级:当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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度

文章目录 项目四:回归分析实践目的实践平台实践内容 预测帕金森病病情的严重程度作业(一)数据读入及理解(二)数据准备(三)模型建立(四)模型预测(五&#xff0…

神经网络通俗理解学习笔记(4) 深度生成模型VAE、GAN

深度生成模型 什么是生成式模型蒙特卡洛方法变分推断Variational Inference变分自编码器VAE生成对抗网络Generative Adversarial NetworkDiffusion 扩散模型VAE和GAN 代码实现 什么是生成式模型 判别式和生成式模型 判别式:CNN/RNN/transformer;生成式:AE/VAE/GAN 判别式模型学…

Linux:RPM软件包管理以及Yum软件包仓库

挂载光驱设备 RPM软件包管理 RPM软件包简介 区分软件名和软件包名 软件名:firefox 软件包名:firefox-52.7.0-1.el7.centos.x86_64.rpm 查询软件信息 查询软件(参数为软件名) ]# rpm -qa #当前系统中所有已安装的软件包 ]# r…

Unity实战案例全解析 :PVZ 植物脚本分析

植物都继承了Pants脚本,但是我因为没注意听讲,把Pants也挂在植物上了,所以子类的PlantEnableUpdate和PlantDisableUpdate抢不过父类,无法正确触发动画,我还找不到哪里出了问题,所以就使用了携程加while强行…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接(文件-->新建连接-->MySQL) 进入到这个界面中: 【注意:密码是下载登录软件时设定过的】 创建一个连接完成(通过双击激活)。 2.在创建好的连接中创建数据库…

神经网络通俗理解学习笔记(5) 自然语言处理

自然语言处理 词嵌入和word2vec词义搜索和句意表示预训练模型Hugging Face库介绍经典NLP数据集代码案例-电影评论情感分析 词嵌入和word2vec 词嵌入是一种 将高维的数据表示映射到低维空间的方法 word embedding 是将语言中的词编码成向量便于后续的分析和处理 词嵌入和词向量…

感知器神经网络

1、原理 感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层结构,信息从输入层进入网络,逐层向前传递至输出层。根据感知器神经元变换函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的…

宿舍管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 宿舍管理系统拥有三个角色,分别为系统管理员、宿舍管理员以及学生。其功能如下: 管理员:宿舍管理员管理、学生管理、宿舍楼管理、缺勤记录管理、个人密…

django学习入门系列之第十点《A 案例: 员工管理系统8》

文章目录 10.6 重写样式10.7 判断数据是否合法10.8 保存内容至数据库10.9 修改入职时间10.10 错误提示10.11 重写错误信息往期回顾 10.6 重写样式 注意:因为他框架都已经给你写好了,所以如果要使用样式的话可能要自己重新定义框架来进行修改 他有两种方…

衣食住行的投资与消费

机器人工程课程与科研采取敏捷开发的弊端和反思_工业机器人适合敏捷开发吗-CSDN博客 →学历消费者←自我救赎↑2024↓(*Φ皿Φ*)-CSDN博客 大部分衣食住行相关的产品都是消费品,只有极少部分是能保值的资产。 物以稀为贵,量产供应的一般而言都是消费品…

第二百三十五节 JPA教程 - JPA Lob列示例

JPA教程 - JPA Lob列示例 以下代码显示了如何使用Lob注释将字节数组保存到数据库。 LOB在数据库中有两种类型:字符大对象(称为CLOB)和二进制大对象(或BLOB)。 CLOB列保存大字符序列,BLOB列可存储大字节序…

JDK的选择安装和下载

搭建Java开发环境 要使用Java首先必须搭建Java的开发环境;Java的产品叫JDK(Java Development Kit:Java开发工具包),必须安装JDK才能使用Java。 JDK发展史 那么这么多JDK,应该使用哪个版本,此处…

C# 比较对象新思路,利用反射技术打造更灵活的比较工具

前言 嘿,大家好!如果你之前看过我分享的文章《C# 7个方法比较两个对象是否相等》,你可能会意识到对象比较在实际业务中经常出现的场景。今天,我想继续与大家分享一个在实际项目中遇到的问题。 有一次,我接手了一个别…

LLVM PASS-PWN-前置

文章目录 参考环境搭建基础知识![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/dced705dcbb045ceb8df2237c9b0fd71.png)LLVM IR实例1. **.ll 格式(人类可读的文本格式)**2. **.bc 格式(二进制格式)**3. **内存表示** …

无心剑英译张九龄《望月怀远》

望月怀远 Watching the Moon and Missing You Far Away 张九龄 By Zhang Jiuling 海上生明月,天涯共此时 情人怨遥夜,竟夕起相思 灭烛怜光满,披衣觉露滋 不堪盈手赠,还寝梦佳期 The bright moon rises from the sea, So far apart…

【宠物小精灵之收服(待更新)】

题目 代码 #include <bits/stdc.h> using namespace std; int f[1010][510]; int main() {int n, m, k;cin >> n >> m >> k;int c 0;for(int i 1; i < k; i){int cost, hp;cin >> cost >> hp;for(int j n; j > cost; j--){for(i…

java技术栈介绍

Java技术栈是一个庞大而丰富的生态系统&#xff0c;它包含了从基础语言特性到高级框架、库和工具的整个集合。这个技术栈为开发者提供了构建各种类型应用&#xff08;包括企业级应用、Web应用、移动应用、大数据应用等&#xff09;所需的全部组件。以下是对Java技术栈的一个更详…

【webpack4系列】编写可维护的webpack构建配置(四)

文章目录 构建配置包设计功能模块设计和目录结构设计功能模块设计目录结构设计 使用ESLint规范构建脚本冒烟测试介绍和实际运用冒烟测试 (smoke testing)冒烟测试执行判断构建是否成功判断基本功能是否正常 单元测试和测试覆盖率测试框架编写单元测试用例单元测试接入测试覆盖率…

新发布!Streamlab X系列第二版:短视频电影直播全能主题,赋能苹果CMS

Streamlab X系列第二版强势登陆&#xff0c;专为苹果CMS设计的短视频与电影直播融合的多功能主题模板震撼首发&#xff01; 这款主题以其非凡的适应性和极致的视觉效果&#xff0c;重新定义了网站构建的边界。采用独家精心研发的框架&#xff0c;它能够无缝跨越从移动设备到超…

在实际LabVIEW开发中,哪些算法是常用的?

在LabVIEW的实际开发中&#xff0c;常用的算法主要集中在数据处理、控制系统、信号处理、图像处理等领域。以下是一些常用算法的介绍&#xff1a; 1. PID控制算法 PID&#xff08;比例-积分-微分&#xff09;控制是LabVIEW中常用的算法之一&#xff0c;广泛应用于工业自动化和…