RAM(Random Access Memory,随机存取存储器):RAM是计算机用于临时存储数据和程序的主要内存类型,可以被读取和写入,并且数据在断电后会丢失
ROM(Read-Only Memory,只读存储器):ROM是一种只能读取而无法写入或修改的存储器,通常用于存储固定的数据和程序,如并且数据在下电后不丢失
Cache(Cache Memory,快取存储器):快取存储器是位于CPU和主内存之间的高速缓存,用于加快对常用数据的访问速度,可认为RAM的一种类型
EEPROM(Electrically Erasable Programmable Read-Only Memory): 一种可擦写的可编程只读存储器,与传统的只读存储器(ROM)不同,EEPROM允许在电路上进行擦除和编程操作,以更新存储的数据,实现单字节数据擦写,较Flash更为昂贵
Flash(Flash Memory, 闪存存储器):闪存存储器是一种非易失性存储器,常用于存储固件、操作系统、移动设备的应用程序以及个人数据等,具有快速读写速度和低功耗的特点,结合了RAM以及ROM的优点,汽车电子中常用的存储类型,一般擦写只能按较大的块进行,较为便宜
WOM(Write-Only Memory,只写存储器):只写存储器是一种只能写入而无法读取的存储器,通常用于特定的控制系统或加密应用
##注意事项:
1.以上仅为车载控制器中常用 类别,存在其他类别(可自行了解)
2.也可简单认为下电丢失为ROM,下电不丢失为RAM,因为其他性质与具体芯片功能设计相关,对于常用场景关注属性为读、写、擦除速度(主要与芯片设计相关,如地址、数据总线设计以及内存本身设计限制,更具体的原理性内容对于使用意义不大)以及下电是否丢失
3.考虑到价格因素等,在车载MCU芯片使用的内存一般为Flash + RAM,需要存储的非易失性数据会存储在Flash(用来模拟EEPROM)
针对以上描述,下面简单说明汽车电子行业广泛使用的芯片TC3XX(参考TC3XX手册)
如上图(TC397系统架构图),可以看出存在以下几类存储:
PF(Program Flash):主要用于存放代码等,CPU可直接进行取指执行
DMU(Data Memory Unit):UCB、FEE(模拟EEPROM)等功能相关
– Data Flash Memory for CPU EEPROM (DF0)
– User Configuration Blocks (DF0)
– Configuration Sector (DF0)
– Data Flash Memory for HSM EEPROM (DF1)
内核直接关联存储:可用于堆栈、全局变量等
– Program Scratch-Pad SRAM (PSPR)
– Data Scratch-Pad SRAM (DSPR)
– Program Cache (P-Cache)
– Data Cache (D-Cache)
– Local Memory Unit (DLMU)
Local Memory Unit (LMU)
– LMU SRAM (CPU DLMU or LMU LMURAM)
– DAM SRAM (DAMRAM)
Boot ROM (BROM)
## 注意事项:
1.存在同一块存储,不同的内核访问经过的总线不一致的情况,因此执行效率存在差异,故在优化代码、数据存放位置时可从此处入手
2.简单进行区分(下电丢失为RAM、下电不丢失为ROM),DF0—DF1、PF0—PF5、BROM则为ROM,其余内存可认为RAM
3.开发中常用的存储,如PF0—PF5(代码存储等),DF0(UCB(AB分区),DFLASH(不常用的配置数据,版本号等内容),FEE(常用非易失数据)),DLMU、PSPR、DSPR、LMU可用于全局变量或者栈的存储
4.除此之外需要注意内存基本结构,不同的内存类型也不同(如Dflash、Pflash的扇区以及页大小不一样),这影响读、写、擦除等操作
简单来说,代码执行逻辑:
从上述过程,可知知道代码、数据分开进行存储,因此在生成可执行程序时需要分开指定代码、数据的存储位置
SRI(Shared Resource Interconnect): 共享资源互联,用于访问内部共享寄存器
SPB (System Peripheral Bus): 系统外部总线,用于访问外设寄存器等
注意事项:SRI以及SPB为功能划分名称,不指示具体功能总线
正如我们所知的,嵌入式软件最后的可执行文件生成大概分为四步:预编译,编译,汇编,链接。对于内存分配(代码放置的位置,数据放置的位置等),都在最后链接环节进行。对于链接过程,主要依据链接文件的定义进行(比如tasking的后缀为.lsl文件、HighTech的后缀为.ld文件等),即通过链接文件可以指定对应文件的代码、数据、堆栈等存放位置,也就实现了对内存管理。
注意事项:
1.通过排列和压缩代码段、数据段和堆栈段的位置,可最大化合理利用内存
2.通过指定到合理的内存位置,也可提高内存访问效率,如TC397存在内核直接访问的内存区域,访问自身该区域的内存与访问其他核的该类型内存经过的总线不一样,因此也造成了访问效率上的差异
非易失性数据(Non-volatile data)是指在断电或系统重启之后,仍然能够保持原有数据内容的信息。与之相对的是易失性数据(Volatile data),在断电或系统重启时会丢失其中的数据。
对于车载控制器一般存在存储一些下电不允许丢失的数据的要求(如控制器复位原因、故障数据等),对于常见的存储类性为EEPROM、Flash,下面对比下两种存储类型。
EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器):一种非易失性存储器,使用电场效应晶体管(FET)来存储数据,EEPROM可以通过在特定区域施加高电压来擦除数据,并通过将电荷注入晶体管来编程数据,擦写和编程操作可以在特定的存储区域进行,而不会影响其他存储区域的数据
相对FLASH存在以下优点:
1.采用电擦除的方式,可以单独擦除其中的数据
2.可单字节地进行编程,存储数据使用方便
3.适用于需要频繁擦写和更新数据的应用,如配置存储、校准数据等
相对FLASH存在以下缺点:
1.电路更为复杂,因此成本更高
2.成本原因,一般芯片没有内置,使用需要额外成本
FLASH:一种基于闪存技术的非易失性存储器,使用浮动栅晶体管(Floating Gate FET)来存储数据,由页(Page)构成扇区(Sector),然后扇区构成整个内存块,擦除操作必须在整个扇区(Sector)上进行,编程/写入操作基于整个页(Page)。
相对于EEPROM优点:
1.价格便宜,一般MCU芯片存在内置芯片(用于模拟EE的存储,如TC397的DF0,相对于存储代码的区域Sector以及Page会更小一点,方便操作速度以及灵活度)
2.适合更大块连续数据存储
3.一般为内置存储,不需要外设总线操作
相对于EEPROM缺点:
1.操作复杂,页内其他数据,需要通过软件操作避免其他数据写入影响
上一篇 | 返回主目录 | 下一篇