外部存储芯片(详细说明)

2023-10-09 23:30

本文主要是介绍外部存储芯片(详细说明),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

苔花若米小,也学牡丹开.

这里是各种存储芯片的简单描述,如有问题,敬请指正!

存储芯片简介

为什么需要外部的存储原器件

STM32控制芯片内部有一定大小的
SRAM以及Flash做为内存和程序存储器,
一般来说, 这个内部存储器是足够的, 但当程序较大的时候, 内存装不下的时候, 就需要在STM32芯片的外部扩展外存(外部扩展存储器).

例如, 你本来只有100毫升的水, 我用桶装绰绰有余, 但是一旦你有100升的水, 我的桶就装不下了, 就需要外部再加一个或者多个更大的桶来把水全部装进去.

存储数据只是外部芯片的一种应用,还有一种用途就是充当一个间界的缓存。

存储芯片是什么

存储芯片是由各类存储器的统称.
存储器是用来存储程序和各种数据信息的记忆部件

  • 许多存储单元的集合, 按单元号顺序排列. 每个单元由若干二进制位(8位 16位 32位)构成, 以表示存储单元中存放的数值.
  • 存储器的单元地址只有一个, 固定不变, 而存储在其中的数据可以改变.

以上的概念非常好理解, 就拿一个例子来举例吧, 你面前有一排柜子, 每个柜子的外面都有对应的序号, 每个柜子里面都可以装一定大小的东西, 至于装多大, 还得看你柜子里面的空间有多大.
这里的柜子就可以看成存储芯片, 序号就是对应的单元号, 用来寻找不同地方的内存, 而柜子里面的空间就可以看成位数, 8位就可以存放28, 16位就可以存放216, 32位就可以存放232.

这个有点类似于数组的东西, 数组的下标就是序号, 数组的元素的大小取决于位数, 一般电脑的int 型数组就是32位的.

为什么众厂商选择的是SDRAM

我的单片机是安富莱的f429的芯片, 它上板载的外部存储芯片是SDRAM芯片, 我查阅了众家(如野火, 正点原子等)板子上的外部存储芯片, 无一不是选用了SDRAM 芯片,为什么会有这样的情况,是什么原因导致的, 下面我将带来对于这个问题的分析…

难道是因为只有SDRAM芯片吗?

在这里插入图片描述

上面是我在cubemx中截的图, 从图中我们可以看出fmc配置中, 有很多种的存储类芯片可以选择,有下面几种():

  1. NOR Flash
  2. NAND Flash
  3. Compact Flash
  4. SDRAM

为什么这么多中的芯片, 最后却选择了SDRAM, 这背后定有其原因所在, 于是我打算从各个芯片的特点, 找到他们的异同, 做为我们的突破点.

突破点:存储芯片的类与别

首先芯片分为两个大类, 一种是易失性存储器,另一种是非易失性存储器.
其中易不易失的标准在于, 断电之后芯片是否还能保存原来的数据, 直白说就是, 易失就是断电之后数据就会丢失, 不易失就是芯片掉电之后数据还能保存.
既然, 都有非易失存储器了, 那我们还要易失存储器干嘛?
有句话说的好 : " 存在即合理. "
相对于非易失存储器, 易失存储器的存取速度快, 可以即拿即用, 而非易失存储器, 只能作为不易失的仓库使用了.

在这里插入图片描述

非易失存储器

有以下几种

  1. ROM
  2. Flash
  3. 光盘
  4. 软盘
  5. 机械硬盘

后三种我们不做讨论, 我们只用看前两种

ROM

ROM是Read Only Memory的缩写, 意思是只读存储器, 为什么叫这个名字, 这就要翻一翻ROM的历史了。

第一阶段 : ROM

在很久以前最古老的ROM是, 只能写入不可以读出的, ROM的数据通常都是在装机之前, 把内容写好固定死的, 之后就没办法改动了.

第二阶段 : PROM

后来为了方便用户自己的使用, 发展出了PROM, 这个芯片可以由用户编程一次, 之后的内容就是固定死了, 不可更改的了.

第三阶段 : EPROM

再后来, 只可编程一次的芯片也满足不了用户的需求了, 就发明出了EPROM, 可擦除可编程只读存储器, 可以多次写入内容, 在写入内容之前,必须先擦除,用紫外线光源和脉冲点流将原来的信息擦除。 缺点, 擦除太麻烦。

第四阶段: EEPROM

这个时候就发明出了至今为止最通用的一版ROM了, 就是EEPROM, 是一种随时可写入而无须擦除原先内容的存储器,其写操作比读操作时间要长得多,EEPROM把不易丢失数据和修改灵活的优点组合起来,修改时只需使用普通的控制、地址和数据总线.


Flash

Flash是快速闪存存储器 Flash memory 的简称,Flash容量大,速度高,价格便宜,擦除时,一般以多字节位单位,Flash内部是浮栅晶体管或浮栅MOSFET(FGMOS),MOSFET是用于放大或切换电子信号的晶体管浮栅晶体管是电气隔离的,也就是说,浮栅晶体管的控制端和输出端没有直接相连,至于为什么不相连,这里会进行说明,

对于下图的MOS来说,当晶体管的控制端(g的地方)这边要求输出端(s的地方)那边输出一个高电平,就会给g一个高电平,给d一个高电平,一但给g一个电平,P型半导体的电子通过电势能都汇集到了,两个N型半导体中间,形成一个电子通路,从而把d的电压传递到s那边的输出端去,根据图示,就会在s那边输出一个高点平。

  • 这里的g是栅极,s是源极,d是漏极。
  • 很好理解,g是门栅,控制开关;d要往外输出能量,要漏出去;s是输出极,对于外面就是能源。

Flash又分为NOR Flash 和 NAND Flash
1. NOR Flash

NOR Flash是Intel于1988年开发出来的第一代Flash,一经出现就打破了原先EPROM和EEPROM一统天下的局面。
NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。

2. NAND Flash

1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。
NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理需要特殊的系统接口。

3. NOR 和NAND的比较

通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多。

在这里插入图片描述

4. CF(Compact Flash)卡

其实除了以上两种Flash,还有一种从NAND Flash延申出来的Flash,CF卡(Compact Flash)最初是一种用于便携式电子设备的数据存储设备。初期的CF卡确实是NAND Flash 规格的,经过后来的发展逐渐有了自己的的规格,如CF+规格。CF卡现今主要用作于摄像头的存储芯片。


易失存储器

先介绍一波RAM,
–> RAM(Random Access Memory)随机访问存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。

RAM有两大分类,一个是SRAM(Static RAM) 静态的随机访问存储器,一个是DRAM(Dynamic RAM)动态的随机访问存储器。

1. SRAM

利用双稳态电路进行存储。即使有干扰对稳态电路也没影响,所以有双稳态性,“静态”是指只要不掉电,存储在SRAM中的数据就可以一直保存,只要有电,SRAM中的数据就不会有变化。加电情况下,不需要一直刷新,数据不会丢失,SRAM 的存储单元以锁存器来存储数据,种电路结构不需要定时刷新充电,就能保持状态。


双稳态,意味着可以稳定的状态有两种。
锁存,意味着可以一直保持一个状态,直到下次刷新才能改变。
在这里插入图片描述


2. DRAM

需要不断的刷新,才能保存数据。主要的作用原理,是利用电容中存储电荷的多少来判断,是二进制中的0还是1。但是由于电荷会有漏电的现象,导致数据的失真,所以需要不断给电容周期性的充电,否则无法长期保持记忆。
DRAM的另外一个特性就是,读取DRAM的电平,会导致单元行的电容的快速漏电,也就是说我们当前的读取会使下次读取不出正确的数据,所以一般对于DRAM的行读取操作后,会把行数据重新写回读取行中,这个写回的操作叫预充电,是行上的最后一项操作,完成这个操作之后,才能访问新的行,这一操作叫做,关闭打开的行。

DRAM的一种 --> SDRAM

SDRAM是DRAM的一种,也就是Synchronous DRAM,同步的DRAM。

他在时钟的上升沿表示有效数据,如图所示。

  • 同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;
  • 动态是指存储阵列需要不断的刷新来保证数据不丢失;
  • 随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。

有的SDRAM是只有行地址,直接找到行地址,就可以直接把数据存入。
而有的SDRAM的存储,是通过存储矩阵来存储的,你可以把他想象成一个表格。我们在向这个表格中写入数据的时候,需要先指定一个行地址,然后指定一个列地址,就可以精确的找到目标单元格的位置,从而把数据存储进去。

SDRAM的容量计算

SDRAM由几个Bank组成,每个Bank有固定的大小。

只有行地址的情况:
Bank数 * 2行数 * 存储单元容量

行列矩阵的情况:
Bank数 * 2行数 * 2列数 * 存储单元容量

混杂的情况:
只有行Bank数 * 2行数 * 存储单元容量 + 行列都有Bank数 * 2行数 * 2列数 * 存储单元容量

拿安富莱的STM32F429的板子上面的SDRAM (MT48LC4M32B2)来举例:
大小为16MB = 4 * 212 * 28 * 32bit = 128Mbit = 16MB

在这里插入图片描述

SDRAM的刷新时间对于CPU时钟周期的要求计算

刷新速率 = SDRAM自动刷新时间 / 2行数

CPU时钟周期 = 刷新速率 * CPU运行频率

可靠运行的CPU时钟周期 = CPU时钟周期 - 20

拿安富莱的STM32F429的板子上面的SDRAM (MT48LC4M32B2)来举例:
这里设置CPU为(180MHz / 2) = 90MHz

在这里插入图片描述
刷新速率 = 64ms / 212 = 15.625us

CPU时钟周期 = 15.625us * 90MHz = 1406.25

可靠运行的CPU时钟周期 = 1406.25 - 20 = 1386.25

最后后向下取整 = 1386

SRAM与DRAM比较

SRAM的速度非常快,在快速读取和刷新时能够保 持数据完整性。SRAM内部采用的是双稳态电路的形式来存储数据。所以SRAM的电路结构非常复杂。制造相同容量的SRAM比DRAM的成本高的多。正因为如此,才使其发展受到了限制。因此目前SRAM基本上只用于CPU 内部的一级缓存以及内置的二级缓存。

总结比较

由于各个开发板厂商,用外部的芯片主要使用来传输数据,不是用来存储数据的,所以快的RAM比慢的ROM好,Flash的使用需要擦除浪费时间,所以用RAM,而DRAM比SRAM提供更高的存储空间且加个低廉,所以选用DRAM,而SDRAM因为其同步的时钟信号,可以保证数据传输的可靠,所以选择了SDRAM。

参考文档

FMC—扩展外部 SDRAM

SDRAM、DRAM及DDR FLASH ROM概念详解

什么是MOS管?结构原理图解

NOR Flash

MT48LC4M32B2中文数据手册

总结

这篇关于外部存储芯片(详细说明)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176344

相关文章

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优