历史上的今天
返回首页

历史上的今天

今天是:2024年09月19日(星期四)

正在发生

2019年09月19日 | 第22章 常用存储器介绍—零死角玩转STM32-F429系列

2019-09-19 来源:eefocus

22.1 存储器种类

存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。基本的存储器种类见图 221。

图 221 基本存储器种类


存储器按其存储介质特性主要分为"易失性存储器"和"非易失性存储器"两大类。其中的"易失/非易失"是指存储器断电后,它存储的数据内容是否会丢失的特性。由于一般易失性存储器存取速度快,而非易失性存储器可长期保存数据,它们都在计算机中占据着重要角色。在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。


22.2 RAM存储器

RAM是"Random Access Memory"的缩写,被译为随机存储器。所谓"随机存取",指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。这个词的由来是因为早期计算机曾使用磁鼓作为存储器,磁鼓是顺序读写设备,而RAM可随读取其内部任意地址的数据,时间都是相同的,因此得名。实际上现在RAM已经专门用于指代作为计算机内存的易失性半导体存储器。


根据RAM的存储机制,又分为动态随机存储器DRAM(Dynamic RAM)以及静态随机存储器SRAM(Static RAM)两种。


22.2.1 DRAM

动态随机存储器DRAM的存储单元以电容的电荷来表示数据,有电荷代表1,无电荷代表0,见图 222。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,因此它需要定期刷新操作,这就是"动态(Dynamic)"一词所形容的特性。刷新操作会对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保证数据的正确性。


图 222 DRAM存储单元


1.    SDRAM

根据DRAM的通讯方式,又分为同步和异步两种,这两种方式根据通讯时是否需要使用时钟信号来区分。图 223是一种利用时钟进行同步的通讯时序,它在时钟的上升沿表示有效数据。


图 223 同步通讯时序图


由于使用时钟同步的通讯速度更快,所以同步DRAM使用更为广泛,这种DRAM被称为SDRAM(Synchronous DRAM)。


2.    DDR SDRAM

为了进一步提高SDRAM的通讯速度,人们设计了DDR SDRAM存储器(Double Data Rate SDRAM)。它的存储特性与SDRAM没有区别,但SDRAM只在上升沿表示有效数据,在1个时钟周期内,只能表示1个有数据;而DDR SDRAM在时钟的上升沿及下降沿各表示一个数据,也就是说在1个时钟周期内可以表示2数据,在时钟频率同样的情况下,提高了一倍的速度。至于DDRII和DDRIII,它们的通讯方式并没有区别,主要是通讯同步时钟的频率提高了。


当前个人计算机常用的内存条是DDRIII SDRAM存储器,在一个内存条上包含多个DDRIII SDRAM芯片。


22.2.2 SRAM

静态随机存储器SRAM的存储单元以锁存器来存储数据,见图 224。这种电路结构不需要定时刷新充电,就能保持状态(当然,如果断电了,数据还是会丢失的),所以这种存储器被称为"静态(Static)"RAM。

图 224 SRAM存储单元


同样地,SRAM根据其通讯方式也分为同步(SSRAM)和异步SRAM,相对来说,异步SDRAM用得较多。


22.2.3 DRAM与SRAM的应用场合

对比DRAM与SRAM的结构,可知DRAM的结构简单得多,所以生产相同容量的存储器,DRAM的成本要更低,且集成度更高。而DRAM中的电容结构则决定了它的存取速度不如SRAM,特性对比见表 221。


表 221 DRAM与SRAM对比

image.png?imageView2/2/w/550

所以在实际应用场合中,SRAM一般只用于CPU内部的高速缓存(Cache),而外部扩展的内存一般使用DRAM。


22.3 非易失性存储器

非易失性存储器种类非常多,半导体类的有ROM和FLASH,而其它的则包括光盘、软盘及机械硬盘。


22.3.1 ROM存储器

ROM是"Read Only Memory"的缩写,意为只能读的存储器。由于技术的发展,后来设计出了可以方便写入数据的ROM,而这个"Read Only Memory"的名称被沿用下来了,现在一般用于指代非易失性半导体存储器,包括后面介绍的FLASH存储器,有些人也把它归到ROM类里边。


1.    MASK ROM

MASK(掩膜) ROM就是正宗的"Read Only Memory",存储在它内部的数据是在出厂时使用特殊工艺固化的,生产后就不可修改,其主要优势是大批量生产时成本低。当前在生产量大,数据不需要修改的场合,还有应用。


2.    OTPROM

OTPROM(One Time Programable ROM)是一次可编程存储器。这种存储器出厂时内部并没有资料,用户可以使用专用的编程器将自己的资料写入,但只能写入一次,被写入过后,它的内容也不可再修改。在NXP公司生产的控制器芯片中常使用OTPROM来存储密钥;STM32F429系列的芯片内部也包含有一部分的OTPROM空间。


3.    EPROM

EPROM(Erasable Programmable ROM)是可重复擦写的存储器,它解决了PROM芯片只能写入一次的问题。这种存储器使用紫外线照射芯片内部擦除数据,擦除和写入都要专用的设备。现在这种存储器基本淘汰,被EEPROM取代。


4.    EEPROM

EEPROM(Electrically Erasable Programmable ROM)是电可擦除存储器。EEPROM可以重复擦写,它的擦除和写入都是直接使用电路控制,不需要再使用外部设备来擦写。而且可以按字节为单位修改数据,无需整个芯片擦除。现在主要使用的ROM芯片都是EEPROM。


22.3.2 FLASH存储器

FLASH存储器又称为闪存,它也是可重复擦写的储器,部分书籍会把FLASH存储器称为FLASH ROM,但它的容量一般比EEPROM大得多,且在擦除时,一般以多个字节为单位。如有的FLASH存储器以4096个字节为扇区,最小的擦除单位为一个扇区。根据存储单元电路的不同,FLASH存储器又分为NOR FLASH和NAND FLASH,见表 222。


表 222 NOR FLASH 与NAND FLASH特性对比

image.png?imageView2/2/w/550

NOR与NAND的共性是在数据写入前都需要有擦除操作,而擦除操作一般是以"扇区/块"为单位的。而NOR与NAND特性的差别,主要是由于其内部"地址/数据线"是否分开导致的。


由于NOR的地址线和数据线分开,它可以按"字节"读写数据,符合CPU的指令译码执行要求,所以假如NOR上存储了代码指令,CPU给NOR一个地址,NOR就能向CPU返回一个数据让CPU执行,中间不需要额外的处理操作。


而由于NAND的数据和地址线共用,只能按"块"来读写数据,假如NAND上存储了代码指令,CPU给NAND地址后,它无法直接返回该地址的数据,所以不符合指令译码要求。表 222中的最后一项"是否支持XIP"描述的就是这种立即执行的特性(eXecute In Place)。


若代码存储在NAND上,可以把它先加载到RAM存储器上,再由CPU执行。所以在功能上可以认为NOR是一种断电后数据不丢失的RAM,但它的擦除单位与RAM有区别,且读写速度比RAM要慢得多。


另外,FLASH的擦除次数都是有限的(现在普遍是10万次左右),当它的使用接近寿命的时候,可能会出现写操作失败。由于NAND通常是整块擦写,块内有一位失效整个块就会失效,这被称为坏块,而且由于擦写过程复杂,从整体来说NOR块块更少,寿命更长。由于可能存在坏块,所以FLASH存储器需要"探测/错误更正(EDC/ECC)"算法来确保数据的正确性。


由于两种FLASH存储器特性的差异,NOR FLASH一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间。而NAND FLASH一般应用在大数据量存储的场合,包括SD卡、U盘以及固态硬盘等,都是NAND FLASH类型的。


在本教程中会对如何使用RAM、EEPROM、FLASH存储器进行实例讲解。


推荐阅读

史海拾趣

Deltron公司的发展小趣事

Deltron公司成立于XXXX年,初期以生产基础电子元器件为主。创始人XXX凭借其对电子技术的深刻理解和对市场趋势的敏锐洞察,带领团队进行了一系列技术创新。通过引进先进的生产设备和研发技术,Deltron成功开发出了一系列具有竞争力的产品,逐渐在电子行业中崭露头角。

All Sensors公司的发展小趣事

在过去的30年里,All Sensors一直致力于为OEM客户设计定制各种经典的传感器。这些传感器不仅具有高精度、高可靠性和高灵敏度,还广泛应用于航天航空、医疗设备、环保仪器等多个领域。凭借卓越的产品性能,All Sensors的部分经典产品甚至被业界某大公司收购并发扬光大,进一步扩大了其在电子行业的影响力。

Acculin Inc公司的发展小趣事

Acculin Inc最初是一家专注于电子元器件研发的小型企业。随着物联网和智能家居的兴起,公司敏锐地捕捉到了市场的机遇,开始研发一款低功耗、高集成度的传感器芯片。经过数年的努力,Acculin成功推出了这款芯片,并凭借出色的性能获得了市场的认可。随后,公司逐渐扩大了产品线,涵盖了多个电子领域,成为行业内技术创新的领军者。

Cree(科瑞)公司的发展小趣事

随着全球LED市场的日益成熟,竞争也日趋激烈。面对这一形势,Cree通过收购和出售的方式,逐渐调整了其在LED市场的主要业务。这一战略调整使得Cree能够专注于更高端、更具技术含量的LED产品研发和生产,从而保持了其在行业内的领先地位。

Elcoma公司的发展小趣事

面对日益变化的市场环境和客户需求,Elcoma公司始终保持创新的精神。他们不断投入研发资金,引进高端人才,加强技术创新和产品研发。同时,Elcoma还积极探索新的商业模式和市场机会,以适应市场变化并抓住发展机遇。这种创新驱动的发展策略使Elcoma在电子行业中保持领先地位,并为企业的未来发展奠定了坚实的基础。

Advanced Electronic Packaging公司的发展小趣事

随着国内市场的逐渐饱和,Advanced Electronic Packaging公司开始将目光投向海外市场。公司积极参与国际电子展会和技术交流活动,展示其先进的封装技术和优质产品。同时,公司还加大了对海外市场的宣传力度,通过线上线下相结合的方式提升品牌知名度和影响力。在不懈的努力下,公司的产品和服务逐渐赢得了国际市场的认可和青睐,海外市场份额逐年攀升。

问答坊 | AI 解惑

PAC的优缺点点评

缺点: 1、价格高,相对于PLC来说 2、可靠性低,这一点不要再争论,已争论很多次了,与体系架构相关系 3、体积大 4、对模拟量处理的精度和抗干扰能力低,与内部的结构和接口相关系 5、系统的抗干扰能力弱,因为自身内部的频率太高,体系是为商 ...…

查看全部问答>

下载有问题找版主!

新手的话可能新币不够用,下载不了,由于一些后续的工作还没有做好,利用现有的条件,建议直接找版主,因为版主下载附件不要芯币,也可以直接给你评分,直接加芯币就完事啦!看到新手抱怨下不了的帖子太多了,有点麻木了! 至于其他的现在还在考虑 ...…

查看全部问答>

找不到理想的器件,大家知道的话帮提个建议。

用avr做一个4位的led的动态显示,选了fdc6330l作为控制com端的开关。 结果显示1234的时候,第一位除了显示1,还显示2,只不过2的亮度很暗,后面这几位也是。 我认为是fdc6330l的响应速度太慢了。 所以想换个开关,开关要求耐压12v,5v的控制 ...…

查看全部问答>

如何用程序控制I/O口使得输出低电平以开启SIM300模块?

各位大虾:    今遇到一棘手问题:程序在使用SIM300模块进行通信的时候,发现SIM300模块开启的时候需要给它的PWRKEY引脚供低电平2秒钟,我怎么写程序能控制PWRKEY引脚呢?我用的是2440,硬件的连接我不清楚,但我估计应该是使用通用I/O ...…

查看全部问答>

我的1602不亮了,是怎么回事啊

我的1602不亮了,是怎么回事啊…

查看全部问答>

SIM300C使用简单串口,上网时出现收发数据问题,谢谢

我使用的是SIM300C模块,用三线的简单串口与S3C2410连接。 现在网络是通上了,也能正常与服务器端进行发送接收! 当我向SIM300C发送命令的时候,他会反馈一些字符信息。 问题是当我正在向SIM300C发送命令、数据的时候,服务器端下发的数据也从串 ...…

查看全部问答>

请教:IIS和UDA1341工作原理

L3-interface用来控制音量,低音等,怎么控制的,控制信号是什么信号?PWM脉冲波?还是其他的 …

查看全部问答>

SOURCES书写问题。。

看门狗驱动程序 程序部分:                 PHYSICAL_ADDRESS RegPA; if (v_pWTDregs == NULL) {    RegPA.QuadPart = WDTIM_BASE;    v_pWTDregs = (volatile WDT_REGS_T *)MmM ...…

查看全部问答>

STM32定时器与PWM快速使用入门

STM32  定时器与 PWM 快速使用入门要求:在 万利的开发板 EK-STM32F 上产生 周期为1秒,占空比分别为 50% 10%的 PWM       并且点亮 板上 ...…

查看全部问答>

button(中断)驱动程序中 错误原因!

/home/wq/linux_drv/int_key/int_key_drv.c:69: warning: initialization from incompatible pointer type /home/wq/linux_drv/int_key/int_key_drv.c:72:25: error: macro \"key_init\" passed 1 arguments, but takes just 0 /home/wq/linux_dr ...…

查看全部问答>