图解AUTOSAR_SWS_FlashEEPROMEmulation

AUTOSAR Flash EEPROM Emulation (FEE) 详解

基于AUTOSAR规范的Flash EEPROM Emulation模块分析

目录


1. 概述

Flash EEPROM Emulation (FEE) 模块是AUTOSAR内存硬件抽象层的重要组成部分,其主要目的是在Flash存储器上模拟EEPROM的功能。由于Flash存储器和EEPROM工作原理不同,FEE模块通过特殊的管理策略解决了Flash有限擦写次数的问题,为上层软件提供了一种虚拟的、几乎无限次擦写的数据存储机制。

FEE模块为非易失性数据管理提供了关键服务,包括数据的读取、写入、擦除和块管理等操作。它是连接上层NVRAM管理器(NVM)和底层Flash驱动(Fls)的桥梁,使应用软件能够以统一的方式存储重要配置信息和运行时数据。


2. 架构设计

2.1 模块位置与接口

在这里插入图片描述

图2.1 AUTOSAR内存存储架构中的FEE模块

AUTOSAR存储架构主要分为四个层次:

  1. 应用层 - 包含各种应用软件组件,它们需要存储和读取非易失性数据

    • 应用软件通过标准接口与NVRAM管理器交互
  2. 服务层 - 包含NVRAM管理器(NvM)

    • NVRAM管理器:负责管理非易失性数据、处理冗余和CRC校验、调用底层Memory服务
    • 为应用层提供统一的数据管理接口
    • 处理数据备份、校验和版本控制
  3. 内存硬件抽象层 - 包含多个模块:

    • 内存抽象接口(MemIf):提供统一访问接口,支持多种底层内存实现
    • Flash EEPROM Emulation(FEE):提供虚拟地址方案和分段、"虚拟"无限擦写次数、块管理功能
    • EEPROM抽象(EA):处理真实EEPROM设备的抽象
  4. 驱动层 - 包含具体存储设备的驱动:

    • Flash驱动(Fls):直接控制Flash设备的读写操作
    • EEPROM驱动:控制物理EEPROM设备
    • 厂商特定库:提供特定硬件的底层支持

FEE模块通过内存抽象接口(MemIf)与上层NVRAM管理器连接,并且直接与Flash驱动交互,实现了对Flash设备的间接访问,同时隐藏了Flash存储器可擦写次数有限的特性。

2.2 内部状态管理

在这里插入图片描述

图2.2 FEE模块的状态机

FEE模块内部实现了一个状态机,用于管理模块的运行状态和操作流程。状态机包含四个主要状态:

  1. MEMIF_UNINIT - 未初始化状态

    • 模块尚未初始化
    • Fee_Init()外的API调用将报错
    • 模块启动后的初始状态
  2. MEMIF_IDLE - 空闲状态

    • 模块已初始化且空闲
    • 可以接受新的请求
    • 可以开始内部管理操作
  3. MEMIF_BUSY - 忙状态

    • 正在处理用户请求(如读取、写入、擦除等)
    • 拒绝新请求(返回E_NOT_OK)
    • 可以接受取消请求
  4. MEMIF_BUSY_INTERNAL - 内部忙状态

    • 执行内部管理操作(如垃圾回收、块整理等)
    • 可以接受新用户请求
    • 会延迟内部操作以执行用户请求

状态转换由以下触发条件控制:

  • Fee_Init() - 将模块从UNINIT转换到IDLE状态
  • 用户请求 - 如Fee_Read()、Fee_Write()等,将模块从IDLE转换到BUSY状态
  • 内部操作 - 由模块自身触发,将模块从IDLE转换到BUSY_INTERNAL状态
  • 操作完成 - 将模块从BUSY或BUSY_INTERNAL转换回IDLE状态
  • Fee_Cancel() - 可以将模块从BUSY状态强制转换为IDLE状态

状态管理机制确保了FEE模块能够正确处理并发请求,避免资源冲突,同时保证数据一致性。

2.3 配置结构

在这里插入图片描述

图2.3 FEE模块的配置结构

FEE模块的配置系统包含多个层次的配置参数:

  1. Fee_ConfigType - 顶层配置类型

    • 包含指向块配置的指针
    • 可能包含其他平台相关配置
  2. Fee_BlockConfigType - 块配置类型

    • BlockNumber:块编号(范围0x0001-0xFFFE,0x0000和0xFFFF为保留值)
    • BlockSize:块大小(整数字节)
    • ImmediateData:是否为即时数据块
    • NumberOfWriteCycles:写入周期数
    • DeviceIndex:设备索引
  3. 模块常量配置参数

    • FeeDevErrorDetect:是否启用开发错误检测
    • FeeVersionInfoApi:是否提供版本信息API
    • FeeMainFunctionPeriod:主函数周期(秒)
    • FeeVirtualPageSize:虚拟页大小,用于内部管理
    • FeeMaximumBlockingTime:最大阻塞时间
    • FeeIndex:FEE模块索引

配置结构允许用户定义多个数据块,每个数据块具有不同的大小和属性。系统集成商可以根据应用需求配置不同的块参数,以优化存储空间使用和性能表现。


3. API接口

3.1 接口功能分类

在这里插入图片描述

图3.1 FEE模块的API接口分类

FEE模块提供了一系列API函数,可以按功能分为以下几类:

  1. 初始化与配置

    • void Fee_Init(const Fee_ConfigType* ConfigPtr):初始化FEE模块
    • void Fee_SetMode(MemIf_ModeType Mode):设置底层Flash驱动的模式
  2. 数据操作

    • Std_ReturnType Fee_Read(uint16 BlockNumber, uint16 BlockOffset, uint8* DataBufferPtr, uint16 Length):读取数据
    • Std_ReturnType Fee_Write(uint16 BlockNumber, const uint8* DataBufferPtr):写入数据
    • Std_ReturnType Fee_InvalidateBlock(uint16 BlockNumber):使块无效
    • Std_ReturnType Fee_EraseImmediateBlock(uint16 BlockNumber):擦除即时块
    • void Fee_Cancel(void):取消当前操作
  3. 状态获取

    • MemIf_StatusType Fee_GetStatus(void):获取模块状态
    • MemIf_JobResultType Fee_GetJobResult(void):获取作业结果
    • void Fee_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr):获取版本信息
  4. 调度

    • void Fee_MainFunction(void):FEE主函数,由操作系统周期性调用

此外,FEE模块需要实现以下回调函数,用于接收Flash驱动的通知:

  • void Fls_JobEndNotification(void):作业完成通知
  • void Fls_JobErrorNotification(void):作业错误通知

API接口的设计遵循AUTOSAR标准,统一使用Std_ReturnType返回类型,返回值可能是:

  • E_OK:请求被接受
  • E_NOT_OK:请求被拒绝

作业结果可通过Fee_GetJobResult()获取,可能的值包括:

  • MEMIF_JOB_OK:作业完成且成功
  • MEMIF_JOB_FAILED:作业失败
  • MEMIF_JOB_PENDING:作业挂起(执行中)
  • MEMIF_JOB_CANCELED:作业已取消
  • MEMIF_BLOCK_INCONSISTENT:块不一致
  • MEMIF_BLOCK_INVALID:块无效

3.2 错误管理

FEE模块实现了严格的错误管理机制,错误分为两类:

  1. 开发错误(如启用了开发错误检测):

    • FEE_E_UNINIT (0x01):模块未初始化
    • FEE_E_INVALID_BLOCK_NO (0x02):无效块号
    • FEE_E_INVALID_BLOCK_OFS (0x03):无效块偏移
    • FEE_E_PARAM_POINTER (0x04):空指针
    • FEE_E_INVALID_BLOCK_LEN (0x05):无效块长度
  2. 运行时错误

    • FEE_E_BUSY (0x06):模块忙
    • FEE_E_INVALID_CANCEL (0x08):无效取消

开发错误主要用于开发阶段的问题识别,而运行时错误则在系统实际运行过程中可能发生,需要应用软件正确处理。


4. 操作流程

4.1 写入操作序列

在这里插入图片描述

图4.1 FEE写入操作的序列流程

FEE写入操作的完整序列涉及多个组件之间的交互:

  1. 初始请求阶段

    • NVMMemIf发起写请求:MemIf_Write(DeviceIndex, BlockNumber, DataPtr, Length)
    • MemIf将请求转发给FEEFee_Write(BlockNumber, DataPtr, Length)
    • FEE检查模块状态,如果状态为MEMIF_UNINITMEMIF_BUSY,返回E_NOT_OK
    • 如果状态为MEMIF_IDLEMEMIF_BUSY_INTERNAL,FEE接受请求:
      • 计算物理地址
      • 设置状态为MEMIF_BUSY
      • 设置Job_Result为MEMIF_JOB_PENDING
      • 返回E_OK
  2. 主函数处理阶段

    • Fee_MainFunction由操作系统周期性调用
    • FEE检查挂起的作业
    • FEE调用Flash驱动写入函数:Fls_Write(Address, DataPtr, Length)
    • Flash驱动接受请求并返回
  3. 完成通知阶段

    • Flash驱动完成操作后调用FEE的回调函数:Fls_JobEndNotification()Fls_JobErrorNotification()
    • FEE更新作业结果:MEMIF_JOB_OKMEMIF_JOB_FAILED
    • FEE将状态设置回MEMIF_IDLE
  4. 结果通知阶段

    • 下一次Fee_MainFunction调用时,FEE通知NVM作业结果:NvM_JobEndNotification()NvM_JobErrorNotification()

整个写入操作是异步的,初始API调用只接受请求,实际写入在后台进行,完成后通过回调函数通知上层软件。这种设计避免了长时间阻塞,提高了系统的响应性。


5. 总结

AUTOSAR Flash EEPROM Emulation (FEE) 模块是一个关键的中间件组件,它通过以下特性解决了Flash存储器在嵌入式系统中的使用挑战:

  1. 抽象层的价值

    • 提供统一的接口,隐藏底层Flash硬件细节
    • 实现虚拟地址空间,简化上层软件的数据访问
    • 解决Flash有限擦写次数的问题,延长存储器寿命
  2. 关键功能特性

    • 块管理:提供基于块的访问机制,支持不同大小和特性的数据块
    • 虚拟无限擦写:通过磨损均衡和数据移动技术实现
    • 异步操作:提高系统响应性,避免长时间阻塞
    • 状态管理:通过状态机确保操作的有序执行和资源的正确分配
  3. 集成考虑

    • 配置灵活性:支持多种配置选项,适应不同应用需求
    • 错误处理:提供完整的错误检测和报告机制
    • 标准兼容:遵循AUTOSAR规范,确保与其他模块的互操作性

在汽车电子系统中,FEE模块使得关键参数(如里程数、诊断信息、用户设置等)能够可靠地存储在Flash存储器中,同时避免了Flash存储器擦写次数限制带来的寿命问题。通过合理的配置和使用,FEE模块能够显著提升系统的数据存储可靠性和灵活性。

autosar_sws_timesyncovercan是AUTOSAR标准中定义的基于CAN总线的时间同步服务。 在汽车电子系统中,不同的控制单元(ECU)需要按照统一的时间基准进行操作,以确保各个控制单元之间的协调和同步。autosar_sws_timesyncovercan就是为了满足这个需求而被定义的。 autosar_sws_timesyncovercan使用了CAN总线作为通信的介质,通过CAN总线将时间同步消息发送到各个控制单元。通过时间同步消息,各个控制单元可以获取精确的时间信息,并根据这个时间信息进行各种操作,例如数据传输、事件触发等。 autosar_sws_timesyncovercan实现了基于Master-Slave架构的时间同步机制。其中,Master节点负责发送时间同步消息,而Slave节点则负责接收并进行时间同步。Master-Slave架构确保了整个系统中所有控制单元之间的时间保持一致。 autosar_sws_timesyncovercan定义了不同的时间同步模式,包括周期同步模式和非周期同步模式。周期同步模式适用于需要周期性执行任务的应用场景,而非周期同步模式适用于一次性任务的应用场景。 autosar_sws_timesyncovercan还规定了时间同步消息的格式和传输方式,确保消息的可靠性和准确性。同时,还定义了时间同步相关的接口和API,方便控制单元的开发和集成。 总之,autosar_sws_timesyncovercan是一种以CAN总线为基础的时间同步服务,通过统一的时间基准来协调和同步汽车电子系统中的各个控制单元,实现系统的高效运行和协作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值