1. 存储基础知识
2. AUTOSAR存储
3. TC397 Flash编程
1、存储基础知识
RAM又称随机存取存储器,存储单元的内容可以按照需要随机取出或者存入,存取数据比较快。这种存储器在断电时,会丢失其存储内容,所以一般是CPU运行时会把程序从ROM拷贝到RAM里面执行。所以一般RAM是作为和CPU直接交换数据的内部存储器,也叫主存或者内存。
SRAM是Static RAM的缩写,它具有静态存取功能。静态随机存取存储器采取多重晶体管设计,不需要刷新电路即能保存它内部存储的数据,特点是高性能、低集成度、速度快,一般在MCU或者SOC会内置一小块SRAM。
DRAM是动态随机存取存储器,每隔一段时间固定对DRAM刷新充电一次,否则内部数据会消失。像现在的内存条DDR都属于DRAM。
ROM全称是Read Only Memory,顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器。ROM存储的数据掉电不会丢失,可以用来存储各种固化程序和数据。最初的ROM是不能编程的,出厂是什么内容就永远是什么内容,非常不灵活。后面出现了prom,可以自己写入一次,写错了,只能再换一片,后面又出现了可多次擦除写入的EPROM,每次擦除都要把芯片拿到紫外线上照一下。
EEPROM(Erasable Programmable Read-Only Memory)是在EPROM的基础上进一步发展形成的电可擦除可编程只读存储器,不需要擦除的时候去照紫外线,它可以按照字节操作,但是集成度不高、价格比较贵。
FLASH又称为闪存,属于广义的EEPROM,因为它也是电擦除的ROM,它和EEPROM最大的区别就是,FLASH只能按照扇区(block)操作,而EEPROM可以按照字节操作。FLASH的电路结构比较简单,同样容量占芯片面积较小,成本比EEPROM低很多。FALSH分为NOR FLASH 和 NAND FLASH。
NOR FLASH数据线和地址线分开,可以实现ram那样随机寻址功能,也就是说程序可以在norflash上面直接运行,不需要拷贝到ram中。
NAND FLASH同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。
2、AUTOSAR存储
图中是AUTOSAR的BSW整体架构,其中存储功能从下层到上层依次是存储驱动、存储硬件抽象、存储服务。
注意:Autosar的存储模块主要是针对用户存放data数据的,也就是那些会经常变化,需要实时存储起来的数据。比如一些故障码,当ECU检测到一些故障码就需要实时存储起来,在维修的时候就可以通过工具读取出来分析。
Autosar的存储模块介质主要是两种:EEPROM 和 FALSH仿EEPROM,分为片内和片外存储,因此就有2 * 2 = 4种存储方式:
- 主芯片片内FLASH仿EEPROM
- 主芯片片内EEPROM
- 板载片外FLASH仿EEPROM
- 板载片外EEPROM
注意:前面讲了EEPROM和FLASH最大的不同就是EEPROM可以操作的最小单位是字节,也就是可以直接擦除编程一个字节。FLASH的最小擦除单元是扇区,最小编程单元是page页,TC397芯片的DFLASH的逻辑扇区就有4K大小,page页大小是8字节。
当前AUTOSAR项目开发中,使用最多的就是TC397芯片,该芯片是使用397芯片的DFLASH来模拟EEPROM,用于NVM存储服务使用。
下图是AUTOSAR存储模块具体分层:
NVRAM Manager:简称NVM,是应用层访问非易失性数据的唯一接口,提供非易失数据的管理服务。这一层会统一按block编号,不关心底层是什么存储类型。
Memory Abstraction Interface:简称MemIf,主要作用就是将读写的信息解耦,分别分派给EEPROM或FLASH。
EEPROM Abstraction: 简称Ea,EEPROM的抽象层,主要作用就是进一步封装片外或片内EEPROM驱动,给上层提供统一的API接口。
Flash EEPROM Emulation: 简称Fee,Flash模拟EEPROM的抽象层。
EEPROM Drv: 片内EEPROM的驱动
Flash Drv: 简称fls,片内flash驱动
这个图很清晰的描述了AUTOSAR存储的几种情况:
片内存储:
1、NVM->MemIf->Ea->EEPROM Drv->EEPROM
2、NVM->MemIf->Fee->FLS->FLASH(TC397上使用的方案)
片外存储:
- NVM->MemIf->Ea->EEPROM Drv->SPI->EEPROM
- NVM->MemIf->Fee->FLS->SPI->FLASH
3、TC397的Flash编程
当前AUTOSAR项目用到的主要芯片是英飞凌的TC397芯片,介绍一下TC397芯片上面硬件FLASH相关知识。
- TC397芯片存储分为PFLASH(Program Flash Memory)和DFLASH(Data Flash memory)。
- TC397有5个3MB大小PFx(PF0...PF4)和一个1MB大小的PF5。每个PFx被划分为1024KB大小的物理扇区,每个物理扇区又被划分为16KB大小的逻辑扇区(Logical Sector)。
- TC397有两个数据闪存存储区DFLASH0和DFLASH1,就是用这个DFLASH来模拟eeprom,来作为autosar的存储服务使用的。DFLASH0还包含了用于数据保护的用户配置块(UCBs,User Configuration Blocks)和1个配置扇区(CFS),用户无法直接访问该配置扇区。
- DFLASH逻辑扇区可以配置4KB或者2KB,DFLASH的页有8字节组成,也就是DFLASH最小擦除单元为4/2K,最小编程单元为8字节。
- PFLASH逻辑扇区16KB,PFLASH的页有32字节组成,也就是PFLASH最小擦除单元为16K,最小编程单元为32字节。