存储器的类型将决定整个嵌入式系统的操作和性能,因此存储器的选择是一个非常重要的决策。
无论系统是采用电池供电还是由市电供电,应用需求将决定存储器的类型(易失性或非易失性)以及使用目的(存储代码、数据或者两者兼有)。另外,在选择过程中,存储器的尺寸和成本也是需要考虑的重要因素。对于较小的系统,微控制器自带的存储器就有可能满足系统要求控制工程网版权所有,而较大的系统可能要求增加外部存储器。为嵌入式系统选择存储器类型时,需要考虑一些设计参数,包括微控制器的选择、电压范围、电池寿命、读写速度、存储器尺寸、存储器的特性、擦除/写入的耐久性以及系统总成本。
图1列出了在嵌入式应用系统中最常用的存储器类型。下面讨论在选择存储器时应遵循的基本原则。
选择存储器时应遵循的基本原则
1.内部存储器与外部存储器
一般情况下,当确定了存储程序代码和数据所需要的存储空间之后,设计工程师将决定是采用内部存储器还是外部存储器。通常情况下,内部存储器的性价比最高但灵活性最低,因此设计工程师必须确定对存储的需求将来是否会增长,以及是否有某种途径可以升级到代码空间更大的微控制器。基于成本考虑
,人们通常
目前市场上存在各种规模的外部存储器器件,我们很容易通过增加存储器来适应代码规模的增加。有时这意味着以封装尺寸相同但容量更大的存储器替代现有的存储器,或者在总线上增加存储器。即使微控制器带有内部存储器,也可以通过增加外部串行EEPROM或闪存来满足系统对非易失性存储器的需求。
2.引导存储器
在较大的微控制器系统或基于处理器的系统中,设计工程师可以利用引导代码进行初始化。应用本身通常决定了是否需要引导代码,以及是否需要专门的引导存储器。例如www.cechina.cn,如果没有外部的寻址总线或串行引导接口,通常使用内部存储器,而不需要专门的引导器件。但在一些没有内部程序存储器的系统中CONTROL ENGINEERING China版权所有,初始化是操作代码的一部分,因此所有代码都将驻留在同一个外部程序存储器中。某些微控制器既有内部存储器也有外部寻址总线,在这种情况下,引导代码将驻留在内部存储器中,而操作代码在外部存储器中。这很可能是最安全的方法,因为改变操作代码时不会出现意外地修改引导代码。在所有情况下,引导存储器都必须是非易失性存储器。
3.配置存储器
对于现场可编程门阵列(FPGA)或片上系统(SoC),人们使用存储器来存储配置信息。这种存储器必须是非易失性EPROM、EEPROM或闪存。大多数情况下,FPGA采用SPI接口,但一些较老的器件仍采用FPGA串行接口。串行EEPROM或闪存器件最为常用,EPROM用得较少。
4.程序存储器
所有带处理器的系统都采用程序存储器,但设计工程师必须决定这个存储器是位于处理器内部还是外部。在做出了这个决策之后,设计工程师才能进一步确定存储器的容量和类型。当然有的时候,微控制器既有内部程序存储器也有外部寻址总线CONTROL ENGINEERING China版权所有,此时设计工程师可以选择使用它们当中的任何一个,或者两者都使用。这就是为什么为某个应用选择最佳存储器的问题,常常由于微控制器的选择变得复杂起来,以及为什么改变存储器的规模也将导致改变微控制器的选择的原因。
如果微控制器既利用内部存储器也利用外部存储器,则内部存储器通常被用来存储不常改变的代码,而外部存储器用于存储更新比较频繁的代码和数据。设计工程师也需要考虑存储器是否将被在线重新编程或用新的可编程器件替代。对于需要重编程功能的应用,人们通常选用带有内部闪存的微控制器,但带有内部OTP或ROM和外部闪存或EEPROM的微控制器也满足这个要求。为降低成本,外部闪存可用来存储代码和数据,但在存储数据时必须小心避免意外修改代码。
在大多数嵌入式系统中,人们利用闪存存储程序以便在线升级固件。代码稳定的较老的应用系统仍可以使用ROM和OTP存储器,但由于闪存的通用性,越来越多的应用系统正转向闪存。表1给出了程序存储器类型的参数比较。
5.数据存储器
与程序存储器类似,数据存储器可以位于微控制器内部,或者是外部器件,但这两种情况存在一些差别。有时微控制器内部包含SRAM(易失性)和EEPROM(非易失)两种数据存储器,但有时不包含内部EEPROMCONTROL ENGINEERING China版权所有,在这种情况下,当需要存储大量数据时,设计工程师可以选择外部的串行EEPROM或串行闪存器件。当然,也可以使用并行EEPROM或闪存,但通常它们只被用作程序存储器。
当需要外部高速数据存储器时,通常选择并行SRAM并使用外部串行EEPROM器件来满足对非易失性存储器的要求。一些设计还将闪存器件用作程序存储器,但保留一个扇区作为数据存储区。这种方法可以降低成本、空间并提供非易失性数据