AUTOSAR_SWS_MemoryAbstractionInterface图解

AUTOSAR 内存抽象接口(Memory Abstraction Interface)详解

AUTOSAR标准中的非易失性存储器抽象层

目录

  1. 概述
  2. 架构设计
    2.1 整体架构
    2.2 模块组成
  3. 接口设计
    3.1 类图
    3.2 数据类型
    3.3 API接口
  4. 状态管理
    4.1 状态机
    4.2 状态转换
  5. 操作流程
    5.1 读写操作
    5.2 错误处理
  6. 总结

1. 概述

AUTOSAR(AUTomotive Open System ARchitecture)是汽车电子领域的开放式系统架构标准。在AUTOSAR体系中,内存抽象接口(Memory Abstraction Interface,简称MemIf)是一个重要的基础软件模块,它为应用软件提供了对非易失性存储器(如EEPROM、Flash)的统一访问方式。

MemIf模块的主要作用是:

  • 为上层软件提供统一的API接口,隐藏底层存储介质的差异
  • 实现对不同存储驱动器的抽象,包括EEPROM抽象(Fee)和闪存驱动(Flash)
  • 管理存储器的状态和工作模式
  • 提供设备选择机制,支持多个存储设备

通过内存抽象接口,应用软件可以使用统一的方式访问不同类型的非易失性存储器,简化了软件开发,提高了代码的可移植性和可维护性。


2. 架构设计

2.1 整体架构

内存抽象接口在AUTOSAR软件架构中处于服务层,连接上层应用和底层驱动程序。下图展示了MemIf模块在AUTOSAR架构中的位置及其与其他模块的关系:

在这里插入图片描述

图2.1 AUTOSAR内存抽象接口架构

上图展示了内存抽象接口在AUTOSAR分层架构中的位置:

  1. 应用层:包含各种应用软件组件,通过RTE访问内存抽象接口提供的服务

  2. 运行时环境层:RTE(RunTime Environment)作为应用软件与基础软件之间的接口层

  3. 服务层:内存抽象接口(MemIf)位于此层,提供统一的内存访问API

  4. 基础软件层:包含以下组件:

    • EEPROM抽象(EA):提供对EEPROM存储器的标准访问
    • 闪存驱动(FD):负责闪存存储器的底层操作
    • EEPROM驱动(ED):负责EEPROM存储器的底层操作

内存抽象接口通过统一的API屏蔽了底层存储介质的差异,使上层应用能够以相同的方式访问不同类型的非易失性存储器。

2.2 模块组成

内存抽象接口模块主要由以下几个部分组成:

  • 接口函数:提供给上层应用使用的API函数集
  • 状态管理:管理模块和设备的状态
  • 设备选择:根据设备索引选择对应的底层驱动
  • 模式管理:支持不同性能模式的切换(FAST/SLOW)
  • 配置管理:管理模块的配置信息

这些部分协同工作,共同实现了内存抽象接口的功能。


3. 接口设计

3.1 类图

下图展示了内存抽象接口模块的类图,包括其内部数据类型、API接口以及与其他模块的关系:

在这里插入图片描述

图3.1 AUTOSAR内存抽象接口类图

类图说明:

  1. MemIf模块

    • 包含核心API函数,如读、写、擦除、状态查询等
    • 定义了状态类型(MemIf_StatusType)、作业结果类型(MemIf_JobResultType)和模式类型(MemIf_ModeType)枚举
    • 包含配置结构体(MemIf_Config)和设备类型结构体(MemIf_DeviceType
  2. Fee/Flash模块接口

    • Fee模块接口:提供对EEPROM抽象层的访问
    • Flash模块接口:提供对Flash驱动的访问
  3. 关系

    • MemIf依赖于状态类型、作业结果类型和模式类型
    • MemIf调用Fee和Flash模块的接口
    • 配置结构体包含多个设备类型定义

3.2 数据类型

内存抽象接口定义了以下关键数据类型:

  1. MemIf_StatusType:表示模块状态的枚举类型

    • MEMIF_UNINIT:未初始化状态
    • MEMIF_IDLE:空闲状态,可接受新请求
    • MEMIF_BUSY:忙状态,正在处理请求
    • MEMIF_BUSY_INTERNAL:内部忙状态,正在进行内部处理
  2. MemIf_JobResultType:表示作业结果的枚举类型

    • MEMIF_JOB_OK:作业成功完成
    • MEMIF_JOB_FAILED:作业失败
    • MEMIF_JOB_PENDING:作业正在进行
    • MEMIF_JOB_CANCELED:作业被取消
    • MEMIF_BLOCK_INCONSISTENT:数据块不一致
    • MEMIF_BLOCK_INVALID:数据块无效
  3. MemIf_ModeType:表示模块工作模式的枚举类型

    • MEMIF_MODE_SLOW:慢速模式,优化功耗
    • MEMIF_MODE_FAST:快速模式,优化性能

3.3 API接口

内存抽象接口提供以下主要API函数:

  1. MemIf_Read:读取数据

    • 参数:DeviceIndexBlockNumberBlockOffsetDataBufferPtrLength
    • 返回:标准返回类型(E_OK/E_NOT_OK
  2. MemIf_Write:写入数据

    • 参数:DeviceIndexBlockNumberDataBufferPtr
    • 返回:标准返回类型(E_OK/E_NOT_OK
  3. MemIf_InvalidateBlock:使数据块失效

    • 参数:DeviceIndexBlockNumber
    • 返回:标准返回类型(E_OK/E_NOT_OK
  4. MemIf_EraseImmediateBlock:立即擦除数据块

    • 参数:DeviceIndexBlockNumber
    • 返回:标准返回类型(E_OK/E_NOT_OK
  5. MemIf_Cancel:取消当前操作

    • 参数:DeviceIndex
    • 返回:无
  6. MemIf_GetStatus:获取模块状态

    • 参数:DeviceIndex
    • 返回:MemIf_StatusType类型的状态
  7. MemIf_GetJobResult:获取作业结果

    • 参数:DeviceIndex
    • 返回:MemIf_JobResultType类型的结果
  8. MemIf_SetMode:设置工作模式

    • 参数:DeviceIndexMode
    • 返回:标准返回类型(E_OK/E_NOT_OK

4. 状态管理

4.1 状态机

内存抽象接口使用状态机来管理模块的状态。下图展示了MemIf模块的状态机及状态转换:

在这里插入图片描述

图4.1 AUTOSAR内存抽象接口状态图

状态说明:

  1. MEMIF_UNINIT(未初始化状态)

    • 模块在初始化前处于该状态
    • 此状态下不接受任何读/写请求
  2. MEMIF_IDLE(空闲状态)

    • 模块正常空闲,可以接受新的读/写请求
    • 是执行新操作的起始状态
  3. MEMIF_BUSY(忙状态)

    • 模块正在处理请求
    • 不能接受新的读/写请求
  4. MEMIF_BUSY_INTERNAL(内部忙状态)

    • 模块内部处理状态
    • 如后台擦除等操作

4.2 状态转换

状态转换说明:

  1. MEMIF_UNINITMEMIF_IDLE

    • 触发条件:模块初始化完成
    • 转换后操作:模块可以接受读写请求
  2. MEMIF_IDLEMEMIF_BUSY

    • 触发条件:调用读、写、擦除、失效API
    • 转换后操作:模块开始执行请求的操作
  3. MEMIF_BUSYMEMIF_IDLE

    • 触发条件:操作完成(成功或失败)或调用MemIf_Cancel
    • 转换后操作:模块回到空闲状态,可以接受新请求
  4. MEMIF_IDLEMEMIF_BUSY_INTERNAL

    • 触发条件:模块内部处理需要
    • 转换后操作:模块执行内部操作
  5. MEMIF_BUSY_INTERNALMEMIF_IDLE

    • 触发条件:内部操作完成(成功或失败)
    • 转换后操作:模块回到空闲状态

5. 操作流程

5.1 读写操作

下图展示了通过内存抽象接口进行读写操作的序列图:

在这里插入图片描述

图5.1 AUTOSAR内存抽象接口读写序列图

序列图说明:

  1. 读取操作流程

    • 应用调用MemIf_Read,指定设备索引、块号等参数
    • MemIf根据设备索引调用对应的底层模块(Fee或Flash)的读取函数
    • 底层模块执行实际读取操作
    • MemIf返回初始状态(E_OK/E_NOT_OK)给应用
    • 应用通过MemIf_GetStatus轮询操作状态
    • 操作完成后,应用通过MemIf_GetJobResult获取结果
  2. 写入操作流程

    • 应用调用MemIf_Write,指定设备索引、块号、数据缓冲区
    • MemIf根据设备索引调用对应的底层模块(Fee或Flash)的写入函数
    • 底层模块执行实际写入操作
    • MemIf返回初始状态(E_OK/E_NOT_OK)给应用
    • 应用通过MemIf_GetStatus轮询操作状态
    • 操作完成后,应用通过MemIf_GetJobResult获取结果

这种非阻塞式的操作模式使得应用可以在等待存储操作完成时执行其他任务,提高系统效率。

5.2 错误处理

内存抽象接口提供了以下错误处理机制:

  1. 初始状态检查

    • API函数返回E_OK表示请求被接受
    • 返回E_NOT_OK表示请求被拒绝(如参数错误、模块忙等)
  2. 状态查询

    • 通过MemIf_GetStatus查询当前状态
    • 如果返回MEMIF_BUSYMEMIF_BUSY_INTERNAL,表示操作进行中
  3. 结果查询

    • 通过MemIf_GetJobResult查询操作结果
    • 可能的结果包括:成功、失败、挂起、取消、数据块不一致、数据块无效
  4. 取消操作

    • 如果需要中断当前操作,可以调用MemIf_Cancel
    • 取消后,模块状态回到MEMIF_IDLE

6. 总结

AUTOSAR内存抽象接口(MemIf)提供了一个标准化的接口层,有效地解决了汽车电子系统中不同非易失性存储器访问的差异问题。

主要优势

  • 统一访问:使用相同的API访问不同类型的存储介质
  • 抽象隔离:屏蔽底层存储器技术细节,简化应用开发
  • 灵活配置:支持多设备管理和不同工作模式
  • 状态管理:提供完善的状态跟踪和错误处理机制
  • 非阻塞操作:支持异步操作模式,提高系统效率

应用场景

  • 存储车辆配置参数和校准数据
  • 记录故障诊断信息和驾驶数据
  • 保存ECU软件更新信息
  • 存储安全认证和访问控制数据

通过内存抽象接口,AUTOSAR标准实现了对非易失性存储器访问的标准化和简化,为汽车电子系统的开发、测试和维护提供了便利。

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、付费专栏及课程。

余额充值