嵌入式开发人员,这些SRAM、SDRAM等存储技术,需要了解一下

        现在嵌入式处理器中的RAM内存类型主要为SRAM与SDRAM,微型处理器如Cortex-M内核系列MCU的RAM基本上是内置的,以SRAM为主,容量大小基本上为几K至几百K级别;而基于Cortex-A内核系列处理器,应用RAM需要外置,基本上采用SDRAM类型外部存储器,容量基本上达到几百M级别;而对于处理能力更强的电脑CPU,其内存以SRAM加SDRAM结合的方式,SRAM作为cache缓存(是CPU与SDRAM的中继),而SDRAM作为外部大容量的内存(如通用的DDR内存条)。

         现代RAM存储技术是在半导体技术发明,特别是晶体管与MOS管发明下的产物,而在半导体技术发明前,信息的存储技术经历过多个发展阶段,早期媒介记录(如纸张)、穿孔卡片、电子管技术、磁技术、半导体技术等,见下表:

 

一、早期媒介记录

         人类在通过媒介记录信息前,都是通过大脑记录信息,然后通过回忆来还原所需要的信息(人脑就是内存和硬盘),但是人脑容易遗忘,于是原始社会人类便开始了对信息存储的探索和使用,比如下面就是早期常用的记录方式:

1、结绳记事方法。

 

 2、雕刻的方法,将信息记录在石头、龟甲等坚硬的物体表面保存信息。例如:万年前的史前洞穴壁画,公元前1300年前商朝的甲骨文,及春秋战国时期的竹简等。

 3、古代帛书 ,西汉初期(公元前202年)造纸术的发明及东汉(105年)蔡伦对造纸术的改进,使得信息记录、传播和传承有了革命性的进步,这也极大促进了人类文明和文化传播。

公元四世纪,造纸术传到了高丽(今朝鲜);

公元610年,造纸术传到日本;

公元10世纪,造纸技术传到了阿拉伯地区,如现在叙利亚的大马士革、埃及的开罗和摩洛哥

欧洲人是通过阿拉伯人了解造纸技术的:

公元1150年,阿拉伯人将造纸术传到了西班牙;

公元1276年,意大利也有了造纸技术;

公元1348年,法国巴黎也建立了造纸厂;

公元14世纪,德国通过法国得到了造纸技术;

公元15世纪,英国因为与欧洲大陆有一海之隔,晚些才有造纸厂;

公元1573年,瑞典建立了最早的造纸厂;

公元1635年,丹麦也开始造纸;

公元1690年,挪威建立奥斯陆造纸厂;

到了17世纪欧洲各主要国家都有了自己的造纸业。

公元1690年,美国在独立之前,才在费城附近建立了第一家造纸厂。

二、穿孔卡片

         纸的发明使得历史信息能够被记录并且被传承,有了纸才有后面的穿孔卡片技术。随着18世纪工业革命的发起,机械化生产开始代替了人类手工操作,穿孔纸片/卡片就是这时候开始出现的,其利用在纸张上打上小孔,来控制“程序化”的织机和其他工业机器。

穿孔纸片的思路来源于织布机的原理,织布机由两条以上相互垂直的丝线,在 织机 上按照一定规律相互交织而形成的织物,纵向的纱线叫经纱,横向的纱线叫纬纱。

        在织机上,经纱在经轴上逐根排列,根据织物纹样的要求,部分经纱被抬起,另一部分经纱则保持不动 形成织口,纬纱从织口中引入,经纱抬起的规律不同以及纱线颜色的排列变化,就会给织物带来不同的纹样。

基于此,穿孔纸带技术首先开始应用于纺织行业,后面逐渐应用于电报及电脑行业,如下所示:

1725年,法国人布乔(Basile Bouchon)发明了穿孔卡,用于控制纺织机绘制图案;

1801年,Joseph Marie Jacquard将这种设计的打孔卡按照一定顺序捆绑,应用于提花织机;

        1846年,Alexander Bain发明了传真机和电传电报机,也使用了穿孔纸带来表示指令,纸带上每一行代表一个字符,利用二进制编码:带孔为1,无孔为0,经过光电扫描输入电脑,如下图:

         1890年,穿孔卡片由一位毕业于哥伦比亚大学的年轻人 赫尔曼·霍尔瑞斯 (Herman Hollerith)广泛应用于人口普查中的数据存储。

         在 人口普查中的穿孔卡片,一张卡片记录一个居民的信息,包括国籍、人种、性别、生日等;比如在卡片上用了两个孔位,表示男性就其中一处打孔,表示女性就在另一处打孔,表示12个月就是12个孔位,这就是早期穿孔卡片记录信息的方法,该方法虽然现在看起来很傻,但是这些在当时可以被机器识别的卡片是一个巨大的突破。通过穿孔有无来表示信息,也是现代计算机二进制1、0来表示数据的雏形。

         1896 年,霍尔瑞斯成立制表机公司,专注于穿孔卡片的改进与发展;1911 年,制表机公司与另外 3 家公司合并成立 CTR 公司;1924 年,CTR 更名为 国际商业机器公司(International Business Machines Corporation),就是现在大名鼎鼎的 IBM 公司

         IBM公司在1928年发明的12行80列的穿孔卡片,在当时成为信息记录的主流,特别是用于记录程序代码,每张卡片记录一行代码,如下图所示(黑色框表示已打孔):

        上图所示为12*80穿孔卡片,从上往下分别叫为第12行,第11行,第10行(或者第0行),第1,2,...,9行;其中红色方框的数字1-80表示80个列号。

         这样一张的穿孔卡片可以表示一行代码,每一列表示一个数字或字母,一张卡片可以表示80个数字或字母,规则如下:

 举例说明,还是以上图所示取5列说明每一列说代表的字母,如下图所示:

a.红色圈1是第2列,因为第12、11、10行没有打孔,只有第1行打黑色孔,代表数字1;

b.红色圈2是第3列,因为第12、11、10行没有打孔,只有第2行打黑色孔,代表数字2;

b.红色圈3是第7列,因为第11行打孔,第7也打孔,根据编码规则2,表示字母P;

c.红色圈4是第9列,因为第12行打孔,第6也打孔,根据编码规则1,表示字母F;

d.红色圈5是第18列,因为第10行打孔,第3也打孔,根据编码规则3,表示字母T;

         再举例一个,如下图所示,第1列至第36列的黑色打孔点,根据如上编码规则,分别表示数字0到9,字母A到Z,共36个数字和字母。

         穿孔卡片在当时应用非常广泛,20世纪初的IBM计算机,如IBM701就是使用穿孔卡片来保存程序数据,但那个年代的编程并不是手动在这些卡片上打孔,有个叫键盘打孔器(keypunch)的设备可以专门用来打孔,键盘上输入1, 就在当前列的第1行打一个孔,然后到下一列。负责用键盘打孔器打孔的操作员通常是女性,所以编程整体流程上是:

二、磁存储器

        利用穿孔卡形式的机械存储,信息的读取和写入,都依赖于纸带上孔的设计。随着电磁学的发展,从机械自动化逐步发展到电气自动化。存储核心是利用两个状态二进制来表征数据信息。磁性材料,利用磁矩的取向,也可以实现两态,从而替代机械打孔。并且表征每个态的体积相对于机械孔而言,可以做到更小,从而可以实现更高的存储密度。后续出现的磁带存储技术,一定程度上还保留着打孔卡设计的影子。

        磁性材料作为存储介质的存储类型有很多,包含有磁带、磁鼓、磁芯、磁阻、以及后面应用于计算机的磁盘等等。

2.1、磁带存储

        1928年,德国德雷斯诺工程师Fritz Pfleumer 发明了“会发声的纸”——录音磁带。其基本工作原理是:将粉碎的磁性颗粒用胶水粘在纸条上,制备成磁带。磁带在移动过程中,随着音频信号强弱,磁带被磁化程度也会发生变化,从而记录声音。利用该纸带可以存储模拟信号,这是利用磁性作为信息存储的最早记录。 

1951年,磁带开始广泛用于计算机。

2.2、磁鼓存储器

        1932年,IBM公司的奥地利裔工程师Gustav Tauschek发明了磁鼓存储器;它是利用铝鼓筒表面涂覆的磁性材料来存储数据的,由于鼓筒旋转速度很高,因此加快了存取速度。直到1953年,磁鼓存储器才开始应用于IBM701计算机,作为内存储器。 

2.3、磁芯存储器

1948年,华裔王安发明了磁芯存储器,最初的磁芯存储器只有几百个字节的容量。

1.磁芯存储器的写入原理是:一个铁氧体磁芯中间穿过一根导线,当导线中的电流向下时,根据右手螺旋法则产生了顺时针方向的磁场。反之,电流向上时则会产生逆时针方向的磁场。这里,可以把顺时针的磁场记做0。假如磁芯中已经记录了0,只要反向电流够大,就可以擦除掉这个0重新写入1。

2. 磁芯存储器的读出原理是:假设我们不知道某个磁芯中存储的是什么数据,那就强行向其中写入“0”。如果磁芯中记载的是1,电流会强制写入逆向的磁场,同时激发出一个感应电流。利用一根感应线路,就可以探测到这个感应电流。如果磁芯本来就记载着0,就不会产生电流。要想让磁芯存储数据,需要立刻进行重新写入。 

        磁芯搭建内存需要将磁性排布成阵列,早期的线选法通常和3度4线法(3D4W)配合,它需要使用四根线路。分别是互相垂直的x、y线(也可以叫行、列),禁止线z线,还有读取线,每颗磁芯都会同时穿过4根导线。读取线呈45°穿过所有磁芯的读取线,这种排列方式是为了尽可能减少干扰。写入数据时,在相应的x和y线上分别加载一半功率脉冲。这样只有在两条线重合点处的磁芯受叠加脉冲影响记录数据。读出时则如上文所述,强行写入数据1,如果读出线产生了感应脉冲,说明这颗磁芯原本记载为0,如果没有感应脉冲,说明原本记载的为1。读取进程结束后,如果原本记载为0时,因为读取时写入了1,需要进行重写进程,强行写回数据0。

下图为由磁芯板组成的磁芯阵列:

        在50年代到70年代之间,磁芯存储器基本统治着内存领域。由于磁性存储器的存储速率上限为10MHz,在高存储容量时体积无法做小,且容易干扰,最终为磁性存储器的发展画上句号的是1970年发明的集成电路随机存储器件(SDRAM)。

2.4、硬盘(磁盘)存储器

        1956年,IBM完成了世界上的第一款硬盘设计。这款名为IBM350 RAMAC(Random Access Method of Accounting and Control)的硬盘产品体积十分庞大,总共使用了50张24英寸的碟片,但容量仅为5MB。磁盘两面都可以利用存储,利用率要高于磁鼓。因此,当磁盘出现后,磁鼓就被淘汰了。

 后面,随着技术的发展,磁盘作为计算机的主要存储介质,容量越来越大,体积反而越来越小。

三、其他类型存储器

         为了数据存储,人们费尽了心血,几乎所有能利用的物理现象,电、光、声、磁都被探索过来,除了上面介绍的磁性材料外,还有许多其他的存储介质,如基于电子管的威廉姆斯管,基于水银延迟线的易失性存储器等。

3.1、电子管-威廉姆斯管

1946年,基于威廉姆斯管的内存是由弗雷迪·威廉姆斯(Freddie Williams)与汤姆·基尔伯恩(Tom Kilburn)发明的,它是一种由阴极射线管(CRT)构成的储存装置。工作原理是一股电子射到CRT表面上,它会自动创建一个正电荷,这代表了一个位的数据,因为电荷流失有时限性,因此,数据必须定期刷新。威廉姆斯kilburn管则要求高精度的光束控制技术,这使他们温度敏感和更容易失效。这些设备的存储能力可达1024位,IBM 701计算机就使用过。

电子管由于功耗大,效率低,稳定性差,不易于集成,后续完全被磁芯存储器给替代。

3.2、水银延迟线存储器

         它是利用声音在水银介质上传输的时延来储存信息。举例,将一块石头掷入水中,形成波浪,波头经过一段时间才能传播到远方某处,在这一段时间的波浪用于存储信息,水银延迟线的就是利用这个工作原理。

         1951年,计算机UNIVAC-1使用的水银延迟线是一根直径10mm、长150cm的管子,内部充满水银,两端各有一个转换器分别进行电-声转换和声-电转换,这样,脉冲信号从管子的一端进入,转换成超声波,960ms后超声波到达管子的另一端,然后再转换成电信号输出。

         不过,要实现存储功能,还需要一些额外的电路:经调制的脉冲信号从管子的一端进入,960ms后从管子的另一端输出,由变换器接收后,经检测、放大、整形和再生,重新反馈到发送端。一个延迟线电路称作一个通道(channel),每个通道可存储10个91位的字,UNIVAC系统中共有100个这样的通道,可以存储99Kb的信息。

        总之,在半导体技术之前,主存储器(即内存)有磁心存储器、水银延迟线存储器、电子管静电存储器等类型,磁鼓和磁盘用作主要的辅助存储器(即硬盘)。

        在半导体技术出现后,主存储器开始采用SRAM/SDRAM(即内存),磁盘/ROM/FLASH开始用作主要的辅助存储器(即硬盘)。

四、半导体存储器

         上世纪60年代,随着晶体管与CMOS技术的发明,及集成电路的发展,半导体存储器开始应用发展,除了出现了ROM存储外,RAM内存技术也同时发展,主要分为两个方向:SRAM与SDRAM。它们的区别主要在于存储单元的原理不同,如下图所示:

        其中SRAM使用六个晶体管电路和锁存器存储一个bit,如果系统通电,SRAM会保留存储的数据而无需重复充电,但是掉电SRAM则数据丢失,因此是易失性存储器;而SDRAM使用一个晶体管另加一个电容器来存储一个bit,因为电容器不可避免地存在漏电现象,因此SDRAM每个单元必须周期性地进行刷新(预充电),同样DRAM也是易失性的。

        由于以上存储单元结构的不同,它们的主要区别是SRAM访问速度更快,但是成本更高,而SDRAM存储密度更高,并且成本低;因此SRAM一般是小容量,比如几个KB~几个MB之间大小,主要用于CPU的缓存cache或MCU的内部RAM;而SDRAM容量比较大,比如几个MB~几百个MB甚至几个GB大小,主要用于CPU的内存条或ARM等芯片的外置RAM。

4.1、SRAM

        SRAM可以随机的读取任意一个地址空间内的数据,因此其采用的地址线与数据线分离的接口方式,比如以IS62WV51216这颗SRAM芯片为例简单介绍其接口与工作时序。

 

 该芯片是一颗16位数据宽度,1MB大小的SRAM,芯片的内部框图图下图所示:

 

 各个相关引脚的功能描述如下表所示:

1、地址线为A0~A18,共19根地址线,因此可以访问的地址大小就是,2^19=524288=512KB,因为其数据总线为16bit,因此每个地址可以输出2个字节数据,所以容量为512KB*2=1MB。

2、数据线为I/O0~I/O15,共16个数据线,通过UB/LB可以选择高/低字节。

3、CS1/CS2为片选信号,低电平有效。

4、OE是输出使能信号(即读信号),低电平有效。

5、WE是写使能信号,也是低电平有效。

读数据时序图(具体可参考IS62WV数据手册):

 写数据时序图:

4.2、DRAM

        DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失。而SDRAM是Synchronous DRAM,在DRAM的基础上增加同步时钟,这样CPU可以准确的知道数据的读写时间。

         DRAM经过多年的发展,大致经历过几个演进过程,早期使用的普通内存,使用的是FPA DRAM(FAST PAGE MODE DRAM),即快速页面模式随机存取存储器,它是每三个脉冲周期传送一次数据;然后EDO DRAM( EXTENDED DATA OUT DRAM),即扩展数据输出随机存取存储器,它是每二个脉冲周期传送一次数据,比FPA DRAM数据速率提高了30%;随着SDRAM的出现,它是每一个脉冲周期传送一次数据,又比EDO DRAM提高了50%,后面慢慢出现了DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM,目前最新的为DDR5 SDRAM。

         每一代的SDRAM内存升级,速率都翻倍提升,而工作电压越来越低,同时随着制造工艺的改进,存储容量也不断提升。目前动态存储器主要以SDRAM为主,在嵌入式MCU中,主要是外置SDRAM芯片来扩展内存,因为MCU内部的SRAM通常比较小;而在嵌入式ARM Cortex A系列处理器,其内部通常没有RAM供用户使用的,因此一般使用DDR-DDR3作为外置SDRAM;对于电脑处理器CPU而言,目前主要使用的是DDR4和DDR5。

         在2008年前后,随着智能手机的兴起,面向移动电子产品的SDRAM应运而生,如LPDDR,即(Low Power Double Data Rate SDRAM),是DDR SDRAM的一种,又称为 mDDR(Mobile DDR SDRAM),是美国JEDEC固态技术协会(JEDEC Solid State Technology Association)面向低功耗内存而制定的通信标准,以低功耗和小体积著称。

        LPDDR应用与手机和平板电脑中,工作电压1.1V,LPDDR5的I/O速率可达到6400MT/s,目前最新的小米11手机等都应用了LPDDR5内存,最高容量可达16GB。

4.2.1、SDRAM芯片

         在嵌入式Cortex-M内核开发时,如果需要扩展大容量的内存,可以外挂一片SDRAM,以华邦W9825G6KH为例说明接口与时序。

         W9825G6KH是一款16位宽,32MB的SDRAM,速率一般为133MHz、166MHz、200MHz。其内部框图如下:

 其每个引脚功能描述如下表所示:

 

其中:

1、CLK就是SDRAM的同步时钟信号,CLE为时钟信号的使能线;CS为片选信号;

2、SDRAM与SRAM不同,其地址线与数据线共用,如上A0~A15,而地址选通有分为行选通信号RAS,及列选通信号CAS,通过行、列地址来指定读写的位置;

3、地址线A0~A12中,W9825G6KH芯片中行地址使用了A0~A12,共13位;列地址使用了A0~A8共8位;因此可寻址范围为:(2^9)*(2^13)=4194304=4MB;而数据总线宽度为16位,因此每个BANK的大小为4MB*2=8MB;由于该芯片可以通过BS1/BS0来选择4个BANK,每个BANK容量为8MB,因此总容量为8MB*4=32MB。

4、LDQM/UDQM也是其用于选择低/高字节使能信号。

4.2.2、DDR芯片

         在嵌入式Cortex-A内核开发时,一般需要外置SDRAM,比如DDRx内存,现在以NT5CC256M16EP为例说明DDR3内存的接口功能。

         该芯片是一款容量512MB大小,16位宽,1.35V,传输速率为1866MT/S的DDR3L芯片,功能款图如下所示:

 

其中:

1、该DDR3L与之前的SDRAM一致,地址与数据共用总线,通过行信号RAS与列信号CAS进行选通具体位置。同时还是有CS片选信号及CKE时钟使能信号,但是因为其时钟频率较高,避免干扰影响,时钟采用的差分信号线CK/CK#,所有控制信号与地址信号均在CK/CK#上升沿与下降沿交叉处被采集。

2、地址线为A0~A14,共15根地址线,其中用于行地址的为A0~A14,共15根;用于列地址的为A0~A9,共10根;因此一个BANK的大小为(2^10)*(2^15)*2=64MB,由于该芯片有BS2、BS1、BS0可选择8个BANK,所以该DDR3L芯片的容量为64×8=512MB。

3、该芯片也有UDQS/LDQS用于选择高/低字节有效信号。

DDRx在应用前需要配置一些关键的时间参数,如下表所示:

 a>、tRCD参数

 

 b>、CL参数

 

 c>、AL参数

 

d>、tRC参数

tRC参数是两个ACTIVE命令,或者ACTIVE命令到REFRESH命令之间的周期,可参考DDR3L数据手册。

e>、tRAS参数

tRAS参数是ACTIVE命令到PRECHARGE命令之间的最小时间,DDR3L数据手册会给出该时间值。

以上DDR3L的读写时序还是比较复杂,一般MCU或ARM处理器有专门的控制器实现读写操作,比如ARM Cortex-M系列的FMC/FSMC控制器,可以连接外置的SRAM或SDRAM;而对于ARM Cortex-A系列的MMDC控制器,可以连接外置的DDRx,软件上只需配置相应的寄存器即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值