最近工作比较忙,下班到家都快十点了,实在是没有多余的精力输出,但整理写作的过程我一直觉得就是与自己对话的过程,一场一个人的修行,通过这个过程让自己对知识点的理解更加清晰、成体系,所以我一直在坚持,成人达己,也希望能对阅读的伙伴带来收获。
本篇是整理的Autosar存储入门系列第一篇文章,算是开个头,后面会结合学习经验与总结不断更新,需要说明的一点是我对存储这块也是一直有了解但可能还不太深刻,希望能从学习者的角度把存储相关的知识点梳理一遍,这个过程中如果大家觉得有讲得不对或者不够清晰的地方,还请一定指出来,一起探讨,加深学习。
另外根据本人多年的开发经验,做了一些AutosarMCAL配置,通信,诊断,模式管理等实战总结,如果您有需求可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读
缩写 | 含义 |
---|---|
NVM | Non-Volatile Ram Memory,管理NVRAM数据,NVM层只对Block进行操作,不区分内外置EEP |
MemIf | Memory Abstraction Interface ,Autosar架构中的memory抽象层接口,由MemIf层对内外置EEP进行区分 |
FEE | Flash EEPROM Emulation,即Flash模拟EEP的抽象层 |
EA | EEPROMAbstraction,属于BSW,向NVM提供进行外置EEP操作(读/写/擦)的接口函数 |
FLS | Flash,分PFlsh及DFlash,一般会使用DFlash作为内置模拟EEP |
EEPROM | (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器 |
在项目NVM部分的开发中,我们会有两种存储路径即:内置模拟EEPROM及外置EEPROM,对应在Autosar中的存储架构如下:
一般提到的内置模拟EEPROM指MCU内部的DFlash模拟的EEPROM,例如在英飞凌TC39x的芯片手册中就写明,该芯片有高达1MByte的DFlash可用于模拟EEPROM
除1Mbyte的DF0外,在英飞凌TC39x其DFlash可以再划分为如下几个部分:
– Data Flash Memory for CPU EEPROM (DF0)
– User Configuration Blocks (DF0)
– Configuration Sector (DF0)
– Data Flash Memory for HSM EEPROM (DF1)
对应的内存大小及地址如下表:
擦写寿命
对于使用DFlash做模拟 EEPROM,其寿命一般在几十万次,例如对于英飞凌的TC3xx系列在芯片手册中有如下描述:
注:对于DFlash,逻辑扇区的划分有两种模式:Single Ended Mode(单端模式)及Complement Sensing Mode。
Single Ended Mode:每个逻辑扇区大小为4Kbyte;
Complement Sensing Mode:每个逻辑扇区大小为2Kbyte。
外挂EPROM是指在MCU之外增加一个芯片用于NVM存储,例如ST的M95640芯片,其大小为8KByte,通过SPI与MCU进行数据交换。
其擦写寿命在-45℃~20℃可达到4 million次,在+85℃可达到1.2 million次,并且其数据保存寿命可超过200年,相对于Flash的擦写次数及保存时间均有明显优势。
综上可以看出内置模拟与外挂的EEPROM区别如下:
DFLASH在MCU内部读/写速度快,EEPROM通过SPI通信,其读/写速度更慢;
内置FLASH存储擦写次数低,外挂EEPROM,擦/写寿命长,可达到百万次级别;
内置FLASH数据存储时间短,一般≥20年,而EEPROM数据存储时间一般≥100年,像ST的M95640芯片可达到200年;
DFLASH价格低,容量大,而EEPROM价格高,容量小;这个也是从项目成本及实际需求考虑决定是否使用需要考虑的一件事。
一般如果内部从项目成本考虑,内部DFLASH能满足需求可能就不会再外挂一个芯片了。
Sector即扇区,可分为 physical sector(物理扇区)及 logical sector(逻辑扇区)。逻辑扇区是单次擦写的最小单位,在英飞凌TC3xx芯片手册中有如下定义:
如下图在英飞凌TC3xx中,可以将3Mbyte的PFlash分成3个物理扇区,每个物理扇区可继续分为64个逻辑扇区,每个逻辑扇区的大小为16Byte:
在DFlash中物理扇区与逻辑扇区的对应关系根据是Single Ended模式或Complement sensing模式划分如下:
在Single Ended模式下,1M的物理扇区划分为256个逻辑扇区,每个逻辑扇区的大小为4KByte。
在Complement sensing模式下,划分为256个逻辑扇区,每个逻辑扇区的大小为2KByte:
Page为可编程的最小单元,在英飞凌TC3xx中PFlash一个page大小为32Byte,DFlash一个page为8Byte。
逻辑扇区是一次擦除的最小数量的闪存,扇区大小取决于硬件,例如在英飞凌TC3xx中DFlash一个逻辑扇区在Single Ended模式下大小为4KByte。
此外,在英飞凌TC3xx使用DFlash做模拟EEPROM时,会将其分为几个Page,例如划分为Page0及Page1两个页,开始时会现在Page0上存储,当Page0存储满后会切页到Page2,并将Page0上的有效信息复制到Page1,这个后续可以再详细聊聊。
Block是需要存NVM的模块可以调用的最小的可擦写单元,即使需要写入的数据只是Block的一小部分,仍然需要对整个Block进行擦写,其由一个或多个虚拟Page组成,虚拟Page是上述的可编程的最小单元,例如在英飞凌TC3xx中使用DFlash做模拟EEPROM时一个Block的大小最小为8Byte。
在项目开发中会根据存储数据写入时机、写入频率,数据大小等进行Block划分。
本文先介绍了NVM中的一些基本概念,例如内置模拟EEEPROM,外挂EEPROM,两者区别及联系,对存储中的Sector,Page,Block也进行了简单介绍,让大家先有一个初步的印象,后面会逐步带入TC3xx芯片的翻页写机制,Autosar架构下的Nvm存储逻辑,工程中的实际应用及注意事项等,相信一路走下去我们都会有收获。