0 引言
单片机(硬件)的存储结构分为程序存储器ROM和数据存储器RAM。(单片机的全称是单片微型计算机,也是计算机的一种,也是由CPU+存储器等结构组成,在这里着重讨论存储器!)
1 RAM
RAM(Random Access Memory),随机存取存储器,是与CPU直接交换数据的内部存储器,也叫内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介,即用于存储缓存数据,当电源关闭时RAM不能保留数据。之所以叫随机存储器,是因为当对RAM中的数据读取或写入的时候,花费的时间和这段数据所在的地址无关。RAM主要分为两大类,SRAM和DRAM。
SRAM是静态RAM,静态指的是不需要刷新电路即能保存数据。SRAM速度非常快,是目前读写最快的存储设备了。但是集成度较低,非常昂贵,多用于CPU的一级缓存,二级缓存(L1/L2 Cache)。
DRAM是动态RAM,动态指的是由于DRAM保留数据的时间很短,所以每隔一段时间就要刷新一次数据,才能保存数据,速度比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。 DRAM具体的刷新过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的准确性。
DRAM也分为很多种,这里介绍其中的一种SDRAM。SDRAM是同步DRAM,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准。SDRAM也分很多种,这里主要了解其中的一种DDR RAM。
DDR RAM(Double Date Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了,这是目前电脑中用得最多的内存。DDR、DDR2、DDR3、DDR4都属于DDR RAM。
2 ROM
ROM(Read-Only Memory),只读存储器。所谓只读,从字面上理解那就是只可以从里面读出数据,而不能写数据。在单片机中,ROM就是用来存放程序的地方,下载到单片机的程序代码就放在这个地方。但是只读只是针对在正常工作情况下而言,即数据在正常应用的时候,只能读不能写,可以理解为单片机正在运行程序的时候,程序只能被读出执行但是不能修改。但是当程序没有运行时,则可以将原来的程序擦除,再写入新的程序进去。ROM里面的数据即使断电后,也可以保留,但是存储速度不如RAM。
EEPROM是电可擦除可编程的ROM,按字节进行删除和重写。写入时间很长,写入很慢,现在多用作NVM。特点是可以访问和修改其中的任何一个字节,可以往每个bit中写入0或者1。其具有较高的可靠性,但是电路复杂,成本也高,因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。
3 FLASH
FLASH存储器又称闪存,是一种NVM。它结合了ROM和RAM的长处,不仅具备电子可擦除可编程的性能,还不会断电丢失数据,同时可以快速读取数据。U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储
以及操作系统或者程序代码或者直接当硬盘使用(U盘)。FLASH属于广义上的ROM,和EEPROM的最大区别是FLASH按扇区操作,相对于EEPROM的改进就是擦除时不再以字节为单位,而是以块为单位,因此简化了电路,数据密度更高,降低了成本。上M大小的ROM一般都是FLASH。而EEPROM则按字节操作。目前Flash主要有两种NOR Flash和NADN Flash。Bootloader
NOR Flash:NOR FLASH读取速度比NAND FLASH快,价格比NAND FLASH高。NOR Flash的读取和SDRAM的读取是一样,应用程序可以直接在NOR FLSAH内运行,不必再把代码读到系统RAM中,这样可以减少SRAM的容量从而节约成本。一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息。NOR FLASH数据线和地址线分开,可以实现RAM一样的随机寻址功能,可以读取任何一个字节,但是擦除仍要按块来擦。
NADN Flash:NAND FLASH读取速度比NOR FLASH慢,价格比NOR FLASH低,存储颗粒密度比NOR FLASH大,可以作为大数据的存储,但应用程序不能直接在NAND FLASH内运行。其没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的”闪盘”,可以在线擦除。NAND FLASH同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页(扇区)来读取。(NAND FLASH按块来擦除,按页来读,NOR FLASH没有页)。由于NAND FLASH引脚复用,因此读取速度比NOR FLASH慢一点,但是擦除和写入速度比NOR FLASH快很多。NAND FLASH内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是NAND FLASH型的。小容量的2~12M的Flash多是NOR FLASH型的。
FLASH工作原理:Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),Flash的内部存储是MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。数据在Flash内存单元中是以电荷(electrical charge)形式存储的。存储电荷的多少,取决于外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。 对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0;对于nand Flash的数据的写入1,就是控制External Gate去充电,使得存储的电荷够多,超过阈值Vth,就表示1了。而对于写入0,就是将其放电,电荷减少到小于Vth,就表示0了。
4 硬盘
HDD:硬盘驱动器(Hard Disk Drive),最基本的电脑存储器,也就是机械硬盘,靠磁场存储信息,故也称为磁盘。
SSD:固态硬盘(Solid State Drives),简称固盘。由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘的存储介质分为两种,一种是采用闪存(FLASH芯片)作为存储介质,另外一种是采用DRAM作为存储介质。U盘也是FLASH类型的存储器,应该是基于NAND FLASH。
基于DRAM类:采用DRAM作为存储介质,应用范围较窄。它仿效传统硬盘的设计,可被绝大部分操作系统的文件系统工具进行卷设置和管理,并提供工业标准的PCI和FC接口用于连接主机或者服务器。应用方式可分为SSD硬盘和SSD硬盘阵列两种。它是一种高性能的存储器,而且使用寿命很长,美中不足的是需要独立电源来保护数据安全。DRAM固态硬盘属于比较非主流的设备。
基于闪存类:基于闪存的固态硬盘采用FLASH芯片作为存储介质,这也是通常所说的SSD。它的外观可以被制成笔记本硬盘、微硬盘、存储卡、U盘等样式。 固态硬盘SSD内主体其实就是一块PCB板,而这块PCB板上最基本的配件就是控制芯片+缓存芯片(部分低端硬盘无缓存芯片)+用于存储数据的闪存芯片。
缓存芯片:主控芯片旁边是缓存芯片,固态硬盘和传统硬盘一样需要高速的缓存芯片辅助主控芯片进行数据处理。这里需要注意的是,有一些廉价固态硬盘方案为了节省成本,省去了这块缓存芯片,这样对于使用时的性能会有一定的影响。
闪存芯片:除了主控芯片和缓存芯片以外,PCB板上其余的大部分位置都是NAND Flash闪存芯片了。
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据。 另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失。