小猫爪:嵌入式小知识01-存储器
1 前言2 存储器的种类2.1 易失性存储器2.1.1 SRAM2.1.2 DRAM2.1.3 SRAM和DRAM的对比2.2 非易失性存储器2.2.1 ROM2.2.2 FLASH2.2.3 SD卡和TF卡2.2.4 其他存储器1 前言
我们在介绍i.MX RT1050的启动时(文章链接:小猫爪:i.MX RT1050学习笔记1-启动)提到了RT1050支持多种启动存储设备,那在这里对存储器相关知识进行一个简单的总结。
2 存储器的种类
大家都知道存储器就是用来存储数据的,按照存储介质的特性或者说按照掉电后存储器中内容会不会丢失则可以分成两大类,易失性存储器”和“非易失性存储器。从名字中就可以看出两者的区别,这里则不再赘述,两者又会细分很多种,每一种都有着自己的优点和缺点,世界通用定理:没有好不好,只有适不适合。基本的存储器种类见下图(本图截自野火教程)。
下面针对每一种存储器进行介绍。
2.1 易失性存储器
RAM(Random Access Memory)即随机存储器。所谓“随机存取”,意思就是当
存储器中的数据被读取或写入时,所需要的时间与这段数据所在的位置无关,因此得名,后来经过发展,RAM慢慢成为易失性存储器的代名词,也就是说现在我们口中的RAM就相当于易失性存储器,特点就是读写次数接近无限,读写速度快。根据RAM的存储特性,RAM又分成两大类,SRAM和DRAM。
2.1.1 SRAM
SRAM(Static RAM)即静态RAM,它的基本存储单元是通过锁存器来实现的,一般我们接触的MCU内嵌的RAM就是SRAM,SRAM根据其通讯方式又可以细分为异步SRAM和同步SRAM,其中异步最为通用。
2.1.2 DRAM
DRAM(Dynamic RAM)即动态RAM,DRAM的基本存储单元是通过一个小电容来实现的,通过让这个小电容充电和放电来实现其内部有电荷和无电荷两个状态,分别对应二进制的1和0,由于电容自身会充放电,所以每隔一段时间就需要对每一个存储单元刷新一遍来确保数据的准确性。其根据通讯方式也可分别同步和异步两种。因为同步DRAM速度快,所以同步DRAM最为通用,也就是我们常说的SDRAM(Synchronous DRAM)。
为了进一步提高SDRAM的速度,后来又出现了DDR SDRAM(Double Data
Rate SDRAM),从名字上就可以看出这是SRAM的升级版,传统的SDRAM只在时钟线的上升沿进行采样,也就是说在一个时钟周期只能传输一位数据,而DDR SDRAM则可以在时钟线的上升沿和下降沿同时采样,也就是说在一个时钟周期内可以传输两位数据,所以整体速度提高一倍,故取double rate。后来因为该技术的继续发展,后来又出现DDR2, DDR3,还有近年出现的夸张的DDR4,原理上都差不多,区别嘛就是更加高级,更加完善。
下面是四代SDRAM技术速度的对比:
2.1.3 SRAM和DRAM的对比
上面对SRAM和DRAM进行了介绍,下面来讲两者进行一下对比:
从上面的对比就可以看出来,两者的使用场合了,大家自行体会。所以一般MCU内嵌SRAM会让片子的价格欻欻歘往上涨。
2.2 非易失性存储器
相比较易失性存储器,非易失性存储器的种类就可以说是五花八门,花里胡哨了,下面我们慢慢的来介绍。
2.2.1 ROM
ROM(Read Only Memory)即只读存储器,简单明了,也就是是这种存储器只能读,在一开始真的是这样,所以才会有这个名字,可是后来随着半导体科技的发展,ROM也可以进行写了,但是这个名字却留用了下来,因为ROM的存储介质是半导体,所以现在大家嘴里的ROM则大多数指代非易失性半导体存储器。目前常见的ROM有以下几种:
① MASK ROM
MASK(掩膜) ROM就是正宗的“Read Only Memory”,存储在它内部的数据是在出厂时使用特殊工艺固化的,生产后就不可修改,其主要优势是大批量生产时成本低。当前在生产量大,数据不需要修改的场合,还有应用。
②OTPROM
OTPROM(One Time Programable ROM)是一次可编程存储器。这种存储器出厂时内部并没有资料,用户可以使用专用的编程器将自己的资料写入,但只能写入一次,被写入过后,它的内容也不可再修改。在NXP 公司生产的控制器芯片中常使用OTPROM 来存储密钥。
③EPROM
EPROM(Erasable Programmable ROM)是可重复擦写的存储器,它解决了PROM芯片只能写入一次的问题。这种存储器使用紫外线照射芯片内部擦除数据,擦除和写入都要专用的设备。现在这种存储器基本淘汰,被EEPROM取代。
④EEPROM
EEPROM(Electrically Erasable Programmable ROM)是电可擦除存储器。EEPROM 可以重复擦写,它的擦除和写入都是直接使用电路控制,不需要再使用外部设备来擦写。而且可以按字节为单位修改数据,无需整个芯片擦除。现在主要使用的ROM 芯片都是EEPROM。
2.2.2 FLASH
FLASH也就是闪存嘛,大家对于这个词真的是非常非常的熟悉了,有些时候也会把FLASH 存储器称为FLASH ROM,但它的容量一般比EEPROM大得多,且在擦除时,一般以多个字节为单位。比如有的FLASH 以4096 个字节为扇区,最小的擦除单位为一个扇区。根据存储单元电路的不同,FLASH 存储器又分为NOR FLASH 和NAND FLASH,两者的特征对比如下表:
在这里我们重点看一下表格的最后一项“是否支持XIP”,首先搞清楚XIP是什么,XIP是eXecute In Place的缩写,意思就是原地执行的意思,说到这里,我们不得不再介绍一下目前嵌入式系统中程序运行的方式,有三种,分别是:
①完全映射(fully shadowed)。嵌入式系统程序运行时,将所有的代码从非易失存储器(Flash、ROM等)复制到RAM中运行。
②按需分页(demand paging)。只复制部分代码到RAM中。这种方法对RAM中的页进行导入/导出管理,如果访问位于虚存中但不在物理RAM中会产生页错误,这时才将代码和数据映射到RAM中。
③ eXecute In Place (XIP)。在系统启动时,不将代码复制到RAM,而是直接在非易失性存储位置执行,RAM中只存放需要不断变化的数据部分。
为什么NOR FLASH支持XIP,而NAND FLASH不支持XIP呢,我们可以从下面两个方面去看:
①首先NOR的地址线和数据线分开,单独有自己的接口,这就可以使得NOR可以按照字节去读写数据,符合CPU的指令译码执行要求;而NAND则是地址线和数据线共用一个接口,而且只能按照“块”来读写数据,读取数据的速度较之NOR较慢。
②因为两者的基本存储单元的电气结构不同,导致了NAND的坏块比较多,而NOR则是很少具有坏块。芯片内执行主要是是看芯片可不可以线性存储代码(假如硬件支持芯片接口),只要能保证芯片的存储空间是线性的(也就是无坏块),理论上都可以支持XIP。正因为NAND的这种属性,为了减少数据读写错误,现在NAND产家都会在NAND芯片里集成EDC/ECC校验算法。
(补充:但是并不是说NAND就绝对不能XIP,你只要加上校验算法保证数据的准确性,修改CPU读取指令的硬件接口,NAND也是可以支持XIP的,不过NAND的属性就决定了它不适合去进行XIP,所以现在也就没必要做这种吃力不讨好的事情,所以现在NAND就是不支持XIP)。
由于两种FLASH 存储器特性的差异,NOR FLASH 一般应用在代码存储的场合,如嵌
入式控制器内部的程序存储空间。而NAND FLASH 一般应用在大数据量存储的场合,包
括SD卡、U 盘以及固态硬盘等,都是NAND FLASH 类型的。
2.2.3 SD卡和TF卡
大家听到这两个名字是不是感觉虎躯一震,感觉有点怪异,接下来就说一说两者的前世今生。
①SD卡
MMC(Multi-Media Card,多媒体卡)由西门子公司Siemens和SanDisk于1997年推出。由于它的封装技术较为先进,7针引脚,体积小、重量轻、非常符合移动存储的需要。MMC支持1bit模式,20MHz时钟,采用总线结构。不久的几年后,SD(Secure Digital Memory Card)卡由松下电器、东芝和SanDisk联合推出,1999年8月发布,其是在MMC卡基础上研发,之后更是替代了MMC卡,成为了几乎一切便携式数码产品的存储卡格式。
②TF卡
TF的原名是Trans-flash Card(TF卡),正式更名为Micro SD Card,由SanDisk(闪迪)公司发明,主要用于移动电话。从这里大家可能就看出来了,TF卡和SD卡其实是一个东西,更像是父子的关系,TF卡套一个SD卡套就可以摇身一变成为SD卡,从这里我们就可以推断出来两者的接口协议是多么的雷同。
2.2.4 其他存储器
说到这里,大部分的存储器都介绍完了,还有几种大家生活常见的存储器相信大家都很熟悉。
①机械硬盘
磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。信息通过离磁性表面很近的磁头,由电磁流来改变极性方式被电磁流写到磁盘上,信息可以通过相反的方式读取。这种机械结构就决定了其读写速度是与数据存储位置有关系的,机械硬盘的存储原理决定了其皮实耐用的特点,数据不容易丢失。
说到这里不得不提一下固态硬盘,固态硬盘的本质就是FLASH。
②光盘
光盘是利用激光原理进行读、写的设备,是迅速发展的一种辅助存储器,可以存放各种文字、声音、图形、图像和动画等多媒体数字信息。这个东西实在是和嵌入式关联不大,大家感兴趣的自己可以去学习一波。
END