存储器的类型将决定整个嵌入式系统的操作和性能,因此存储器的选择是一个非常重要的决策。无论系统是采用电池供电还是由市电供电,应用需求都将决定存储器的类型(易失性或非易失性)及使用目的(存储代码、数据或者两者兼有)。另外,在选择过程中,存储器的尺寸和成本也是需要考虑的重要因素。对于较小的系统,微控制器自带的存储器就有可能满足系统要求,而较大的系统可能要求增加外部存储器。为嵌入式系统选择存储器类型时,需要考虑一些设计参数,包括微控制器的选择、电压范围、电池寿命、读写速度、存储器尺寸、存储器的特性、擦除/写入的耐久性及系统总成本。
(1)内部存储器与外部存储器
一般情况下,当确定了存储程序代码和数据所需要的存储空间之后,设计工程师将决定是采用内部存储器还是外部存储器。通常情况下,内部存储器的性价比最高但灵活性最低,因此设计工程师必须确定对存储的需求将来是否会增长,以及是否有某种途径可以升级到代码空间更大的微控制器。基于成本考虑,人们通常选择能满足应用要求的、存储器容量最小的微控制器,因此在预测代码规模的时候必须要特别小心,因为代码规模增大可能要求更换微控制器。
市场上存在各种规模的外部存储器器件,我们很容易通过增加存储器来适应代码规模的增加。有时这意味着以封装尺寸相同但容量更大的存储器替代现有的存储器,或者在总线上增加存储器。即使微控制器带有内部存储器,也可以通过增加外部串行EEPROM或闪存来满足系统对非易失性存储器的需求。
(2)引导存储器
在较大的微控制器系统或基于单片机的系统中,设计工程师可以利用引导代码进行初始化。应用本身通常决定了是否需要引导代码,以及是否需要专门的引导存储器。例如,如果没有外部的寻址总线或串行引导接口,通常使用内部存储器,而不需要专门的引导器件。但在一些没有内部程序存储器的系统中,初始化是操作代码的一部分,因此所有代码都将驻留在同一个外部程序存储器中。某些微控制器既有内部存储器也有外部寻址总线,在这种情况下,引导代码将驻留在内部存储器中,而操作代码在外部存储器中。这很可能是最安全的方法,因为改变操作代码时不会出现意外地修改引导代码。在所有情况下,引导存储器都必须是非易失性存储器。
(3)配置存储器
对于现场可编程门阵列(FPGA)或片上系统(SoC),人们使用存储器来存储配置信息。这种存储器必须是非易失性EPROM、EEPROM或闪存。大多数情况下,FPGA采用SPI接口,但一些较老的器件仍采用FPGA串行接口。串行EEPROM或闪存器件最常用,EPROM用得较少。
(4)程序存储器
所有带单片机的系统都采用程序存储器,但设计工程师必须决定这个存储器是位于单片机内部还是外部。在做出这个决策之后,设计工程师才能进一步确定存储器的容量和类型。当然有的时候,微控制器既有内部程序存储器也有外部寻址总线,此时设计工程师可以选择使用它们当中的任何一个,或者两者都使用。这就是为什么为某个应用选择最佳存储器的问题,常常由于微控制器的选择变得复杂起来,以及为什么改变存储器的规模也将导致改变微控制器的选择的原因。
如果微控制器既利用内部存储器也利用外部存储器,则内部存储器通常被用来存储不常改变的代码,而外部存储器用于存储更新比较频繁的代码和数据。设计工程师也需要考虑存储器是否将被在线重新编程或用新的可编程器件替代。对于需要重编程功能的应用,人们通常选用带有内部闪存的微控制器,但带有内部OTP或ROM和外部闪存或EEPROM的微控制器也满足这个要求。为降低成本,外部闪存可用来存储代码和数据,但在存储数据时必须小心,避免意外修改代码。
在大多数嵌入式系统中,人们利用闪存存储程序以便在线升级固件。代码稳定的较老的应用系统仍可以使用ROM和OTP存储器,但由于闪存的通用性,越来越多的应用系统正转向闪存。
(5)数据存储器
与程序存储器类似,数据存储器可以位于微控制器内部,或者外部,但这两种情况存在一些差别。有时微控制器内部包含SRAM(易失性)和EEPROM(非易失)两种数据存储器,但有时不包含内部EEPROM,在这种情况下,当需要存储大量数据时,设计工程师可以选择外部的串行EEPROM或串行闪存器件。当然,也可以使用并行EEPROM或闪存,但通常它们只被用作程序存储器。
当需要外部高速数据存储器时,通常选择并行SRAM,并使用外部串行EEPROM器件来满足对非易失性存储器的要求。一些设计还将闪存器件用作程序存储器,但保留一个扇区作为数据存储区。这种方法可以降低成本、空间,并提供非易失性数据存储器。
针对非易失性存储器要求,串行EEPROM器件支持I 2 C、SPI或微线(Microwire)通信总线,而串行闪存通常使用SPI总线。由于写入速度很快,且带有I 2 C和SPI串行接口,FRAM在一些系统中得到应用。
(6)易失性和非易失性存储器
存储器可分成易失性存储器和非易失性存储器,前者在断电后将丢失数据,而后者在断电后仍可保持数据。设计工程师有时将易失性存储器与后备电池一起使用,使其表现犹如非易失性器件,但这可能比简单地使用非易失性存储器更加昂贵。然而,对要求存储器容量非常大的系统而言,带有后备电池的DRAM(动态随机存取存储器)可能是满足设计要求且性价比很高的一种方法。
在有连续能量供给的系统中,易失性或非易失性存储器都可以使用,但必须基于断电的可能性做出最终决策。如果存储器中的信息可以在电力恢复时从另一个信源中恢复出来,则可以使用易失性存储器。
选择易失性存储器与电池一起使用的另一个原因是速度。尽管非易失存储器件可以在断电时保持数据,但写入数据(一个字节、页或扇区)的时间较长。
(7)串行存储器和并行存储器
在定义了应用系统之后,微控制器的选择是决定选择串行或并行存储器的一个因素。对于较大的应用系统,微控制器通常没有足够大的内部存储器,这时必须使用外部存储器,因为外部寻址总线通常是并行的,所以外部的程序存储器和数据存储器也将是并行的。
较小的应用系统通常使用带有内部存储器但没有外部地址总线的微控制器。如果需要额外的数据存储器,外部串行存储器件是最佳选择。大多数情况下,这个额外的外部数据存储器是非易失性的。
根据不同的设计,引导存储器可以是串行的也可以是并行的。如果微控制器没有内部存储器,那么并行的非易失性存储器件对大多数应用系统而言是正确的选择。但对一些高速应用,可以使用外部的非易失性串行存储器件来引导微控制器,并允许主代码存储在内部或外部高速SRAM中。
(8)EEPROM与闪存
存储器技术的成熟使得RAM和ROM之间的界限变得很模糊,如今有一些类型的存储器(如EEPROM和闪存)组合了两者的特性。这些器件像RAM一样进行读写,并像ROM一样在断电时保持数据,它们都可电擦除且可编程,各自有其优缺点。
从软件角度看,独立的EEPROM和闪存器件是类似的,两者之间的主要差别是EEPROM器件可以逐字节地修改,而闪存器件只支持扇区擦除及对被擦除单元的字、页或扇区进行编程。对闪存的重新编程还需要使用SRAM,因此它要求更长的时间内有更多的器件在工作,从而需要消耗更多的电池能量。设计工程师也必须确认在修改数据时有足够容量的SRAM可用。
存储器密度是决定选择串行EEPROM或者闪存的另一个因素。市场上可用的独立串行EEPROM器件的容量在128KB或以下,独立闪存器件的容量在32KB或以上。
如果把多个器件级联在一起,可以用串行EEPROM实现高于128KB的容量。很高的擦除/写入耐久性要求促使设计工程师选择EEPROM,因为典型的串行EEPROM可擦除/写入100万次。闪存一般可擦除/写入1万次,只有少数几种器件能达到10万次。
当今,大多数闪存器件的电压范围为2.7~3.6V。如果不要求字节寻址能力或很高的擦除/写入耐久性,在这个电压范围内的应用系统采用闪存可以使成本相对较低。
(9)EEPROM与FRAM
EEPROM和FRAM的设计参数类似,但FRAM的可读写次数非常高且写入速度较快,然而通常情况下,用户仍会选择EEPROM而不是FRAM,其主要原因是成本(FRAM较昂贵)、质量水平和供货情况。设计工程师常使用成本较低的串行EEPROM,除非耐久性或速度是强制性的系统要求。
DRAM和SRAM都是易失性存储器,尽管这两种类型的存储器都可以用作程序存储器和数据存储器,但SRAM主要用于数据存储器。DRAM与SRAM之间的主要差别是数据存储的寿命。只要不断电,SRAM就能保持其数据,但DRAM只有极短的数据寿命,通常为4ms左右。
与SRAM相比,DRAM似乎是毫无用处的,但位于微控制器内部的DRAM控制器使DRAM的性能表现与SRAM一样。DRAM控制器在数据消失之前周期性地刷新所存储的数据,所以存储器的内容可以根据需要保持长时间。
由于“位(比特)”成本低,DRAM通常用作程序存储器,所以有庞大存储要求的应用可以从DRAM获益。它的最大缺点是速度慢,但计算机系统可以使用高速SRAM作为高速缓冲存储器来弥补DRAM的速度缺陷。
(10)云储存
和传统存储相比,云存储系统具有如下优势:
①优异性能支持高并发、带宽饱和利用。云存储系统将控制流和数据流分离,数据访问时多个存储服务器同时对外提供服务,实现高并发访问。
②自动均衡负载,将不同客户端的访问负载均衡到不同的存储服务器上。系统性能随节点规模的增加呈线性增长。系统的规模越大,云存储系统的优势越明显,没有性能瓶颈。
③高度可靠:针对小文件采用多个数据块副本的方式实现冗余可靠,数据在不同的存储节点上具有多个块副本,任意节点发生故障,系统将自动复制数据块副本到新的存储节点上,数据不丢失,实现数据的完整、可靠;针对大文件采用超安存(S3)编/解码算法的方式实现高度可靠,任意同时损坏多个存储节点,数据可通过超安存算法解码自动恢复。该特性可适用于对数据安全级别极高的场合,同时相对于副本冗余的可靠性实现方式大大提高了磁盘空间利用率,不到40%的磁盘冗余即可实现任意同时损坏三个存储节点而不丢失数据。
④元数据管理节点采用双机镜像热备份的高可用方式容错,其中一台服务器故障,可无缝自动切换到另一台服务器,服务不间断。整个系统无单点故障,硬件故障自动屏蔽。
⑤在线伸缩可以在不停止服务的情况下,动态加入新的存储节点,无需任何操作,即可实现系统容量从TB级向PB级平滑扩展;也可以摘下任意节点,系统自动缩小规模而不丢失数据,并自动将再下的节点上的数据备份到其他节点上,保证整个系统数据的冗余数。
⑥超大规模支持超大规模集群,理论容量为1024×1024×1024PB。简单通用支持POSIX接口规范,支持Windows/Linux/Mac OS X,用户当成海量磁盘使用,无需修改应用。同时系统也对外提供专用的API访问接口。
⑦智能管理一键式安装,智能化自适应管理,简单方便的监控界面,无需学习即可使用。云存储系统所有管理工作由云存储系统管理监控中心完成,使用人员无需任何专业知识便可以轻松地管理整个系统。通过专业的分布式集群监控子系统对所有节点实行无间断监控,用户通过界面可以清楚地了解到每一个节点的运行情况。