存储知识和AutoSAR存储架构

一、存储基础知识

  RAM又称随机存取存储器,存储单元的内容可以按照需要随机取出或者存入,存取速度比较快。这种存储器在断电时,会丢失其存储内容,所以一般是CPU运行时会把程序从ROM拷贝到RAM里面执行。所以一般RAM是作为和CPU直接交换数据的内部存储器,也叫主存或者内存。

  SRAM是Static RAM的缩写,它具有静态存取功能。静态随机存取存储器采取多重晶体管设计,不需要刷新电路即能保存它内部存储的数据,特点是高性能、低集成度、速度快,一般在MCU或者SOC会内置一小块SRAM。

  DRAM是动态随机存取存储器,每隔一段时间固定对DRAM刷新充电一次,否则内部数据会消失。像现在的内存条DDR都属于DRAM。

  ROM全称是Read Only Menory,顾名思义,它是一种只能读出事先所存的数据的固态半导体存储器。ROM存储的数据掉电不会丢失,可以用来存储各种固化程序和数据。最初的ROM是不能编程的,出厂是什么内容就永远是什么内容,非常不灵活。后面出现了prom,可以自己写入一次,写错了,只能再换一片,后面又出现了可多次擦除写入的EPROM,每次擦除都要把芯片拿到紫外线上照一下。

  EEPROM(Erasable Programmable Read-Only Memory)是在EPROM的基础上进一步发展形成的电可擦除可编程只读存储器,不需要擦除的时候去照紫外线,它可以按照字节操作,但是集成度不高、价格比较贵。

  FLASH又称为闪存,属于广义的EEPROM,因为它也是电擦除的ROM,它和EEPROM最大的区别就是,FLASH只能按照扇区(block)操作,而EEPROM可以按照字节操作。FLASH的电路结构比较简单,同样容量占芯片面积较小,成本比EEPROM低很多。FLASH分为NOR FLASH和NAND FLASH。

  NOR FLASH 数据线和地址线分开,可以实现ram那样随机寻址功能,也就是说程序可以在norflash上面直接运行,不需要拷贝到ram中。

  NAND FLASH同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。

二、AutoSAR存储架构

  图中是AUTOSAR的BSW整体架构,其中存储功能从下层到上层依次是存储驱动、存储硬件抽象、存储服务。

  注意:AutoSAR的存储模块主要是针对用户存放data数据的,也就是那些会经常变化,需要实时存储起来的数据。比如一些故障码,当ECU检测到一些故障码就需要实时存储起来,在维修的时候就可以通过工具读取出来分析。

  AutoSAR的存储模块介质主要是两种:EEPROM和FLASH仿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的驱动,可直接操作寄存器,如果是片外,就需要用到SPI

  Flash Drv:简称fls,片内flash驱动,可直接操作寄存器,如果是片外,就需要用到SPI

  这个图很清晰的描述了AUTOSAR存储的几种情况:

  片内存储:

  1、NVM->MemIf->Ea->EEPROM Drv->EEPROM

  2、NVM->MemIf->Fee->FLS->FLASH(TC397上使用的方案)

  片外存储:

  1、NVM->MemIf->Ea->EEPROM Drv->SPI->EEPROM

  2、NVM->MemIf->Fee->FLS->SPI->FLASH

三、TC397的Flash编程案例

  当前AUTOSAR项目用到的主要芯片是英飞凌的TC397芯片,介绍一下TC397芯片上面硬件FLASH相关知识。

  TC397芯片存储分为PFLASH(Program Flash Memory)和DFLASH(Data Flash Memory)。

  PFLASH和DFLASH的区别

  用途区别:

  PFLASH:专门存放固件程序、启动代码和常量数据,CPU 直接从这里取指令执行。

  DFLASH:用来存配置参数、校准数据、运行日志等需要频繁修改的信息。‌‌‌

  擦写寿命区别:

  PFLASH:擦写次数较少,通常 1 万到 10 万次,因为代码很少更新。

  DFLASH:擦写寿命更长,可达10万次以上,支持更频繁的数据更新。

  操作方式区别:

  PFlash‌:擦除单位较大(常见 1KB-128KB 扇区),编程最小单位 8 字节,读取速度快。

  DFlash‌:擦除单位较小(常见 256 字节 -4KB),编程最小单位 2 字节,适合小块数据频繁修改。‌‌‌

  简单说,PFlash 像"只读光盘"存程序,DFlash 像"可写硬盘"存数据,分开设计是为了让代码更稳定、数据更新更灵活。‌‌‌

  TC397有5个3MB大小PFx(PF0...PF4)和一个1MB大小的PF5。每个PFx被划分为1024KB(1MB)大小的物理扇区,每个物理扇区又被划分为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字节。

  TC397的PFLASH结构如下图,总共有16M的PFLASH。

  编译后的可执行文件,烧录到PFLASH里面去的,用户存DTC故障码是存到DFLASH里面去的,用DFLASH来模拟EEPROM,给用户实时使用FLASH的读写