AUTOSAR_SWS_MemoryAccess图解

AUTOSAR Memory Access 模块详解

解析AUTOSAR存储访问模块的架构、功能与实现

目录

  1. 概述
    1.1. Memory Access模块简介
    1.2. 支持的用例
  2. 架构设计
    2.1. 模块定位
    2.2. 核心组件
    2.3. 内存地址转换机制
  3. 功能特性
    3.1. 作业管理
    3.2. 内存访问协调
    3.3. 硬件特定服务
    3.4. 通用锁定机制
    3.5. 动态内存驱动程序处理
  4. API概览
    4.1. 同步与异步函数
    4.2. 作业处理流程
  5. 配置参数
    5.1. 地址区域配置
    5.2. 子地址区域配置
  6. 总结

1. 概述

1.1. Memory Access模块简介

AUTOSAR Memory Access (MemAcc) 模块是AUTOSAR软件架构中的基础软件模块,为不同类型的存储设备提供统一的访问接口。该模块位于存储硬件抽象层,负责协调不同上层模块对共享内存资源的访问,同时抽象底层硬件细节,提供一个与硬件无关的内存访问API。

MemAcc模块的主要特点是将内存访问功能分为硬件无关部分(MemAcc)和硬件相关部分(Mem驱动程序),这使得上层应用能够在不修改代码的情况下访问不同类型的存储设备,如闪存、EEPROM、RAM或相变存储器。

在这里插入图片描述

图1.1:AUTOSAR Memory Access 架构概览,展示了MemAcc模块在整个存储访问栈中的位置以及与其他模块的交互关系

1.2. 支持的用例

MemAcc模块与Mem驱动程序的组合支持以下主要用例:

  • 块基础非易失性内存访问:通过NvM(非易失性内存管理器)和Fee(闪存EEPROM仿真)或Ea(EEPROM抽象)实现数据存储
  • 地址基础内存访问:供BndM(批量非易失性数据管理器)或闪存引导加载程序使用
  • OTA软件更新:支持无线固件升级

这些用例可以单独使用,也可以组合使用。值得注意的是,MemAcc模块和Mem驱动程序涵盖了Fls(闪存服务)和Eep(EEPROM服务)的用例,因此这两个模块未来将被MemAcc替代。


2. 架构设计

2.1. 模块定位

MemAcc模块位于AUTOSAR架构中的存储抽象层,连接上层应用模块(如NVM、Fee/Ea、BndM、OTA客户端)和底层硬件相关驱动(如MEM_DFLSMEM_EEPMEM_PFLSMEM_EXFLS)。这种分层架构实现了关注点分离,使上层应用无需关心底层存储设备的具体实现细节。

2.2. 核心组件

MemAcc模块的核心组件包括:

  • 内存地址转换:将逻辑地址映射到物理内存设备
  • 内存访问协调:管理对共享内存资源的并发访问
  • 作业管理:处理异步内存操作请求的调度和状态追踪
  • 硬件特定服务:支持访问底层Mem驱动程序的特殊功能
  • 通用锁定机制:允许上层应用锁定特定内存区域以进行直接访问
  • 动态内存驱动程序处理:支持动态激活和使用Mem驱动程序

2.3. 内存地址转换机制

MemAcc模块实现了从逻辑地址空间到物理内存设备的映射,这是其核心功能之一。这种映射机制使上层应用能够使用统一的逻辑地址空间访问不同类型的物理存储设备,甚至支持跨设备边界的访问请求。

在这里插入图片描述

图2.1:AUTOSAR Memory Access 内存地址转换机制,展示了逻辑地址空间与物理存储设备之间的映射关系

地址转换机制基于以下主要概念:

  • 地址区域(Address Area):逻辑地址空间中的连续内存区域,每个地址区域只分配给一个上层模块
  • 子地址区域(Sub Address Area):映射到一个内存设备的扇区批,每个子地址区域内只允许统一的扇区大小
  • 扇区批(Sector Batch):具有统一大小的连续扇区的逻辑聚合,扇区是最小的可擦除内存单元

这种分层映射机制允许MemAcc模块处理跨物理设备边界的内存访问请求,同时考虑不同存储技术的物理分段要求(如页面大小、扇区大小等)。


3. 功能特性

3.1. 作业管理

MemAcc模块提供了一套完善的作业管理机制,用于处理异步内存操作请求(如读取、写入、擦除等)。作业管理机制包括作业状态跟踪、作业结果报告和作业结束通知功能。

在这里插入图片描述

图3.1:AUTOSAR Memory Access 作业管理与处理流程,展示了作业状态转换和结果处理机制

作业管理的主要特性:

  • 作业状态:作业可处于MEMACC_JOB_IDLE(空闲)或MEMACC_JOB_PENDING(处理中)状态
  • 作业结果:提供详细的结果代码,如MEMACC_MEM_OK(成功)、MEMACC_MEM_CANCELED(取消)、MEMACC_MEM_INCONSISTENT(不一致)、MEMACC_MEM_ECC_CORRECTED(ECC错误已修正)、MEMACC_MEM_ECC_UNCORRECTED(无法修正的ECC错误)和MEMACC_MEM_FAILED(失败)
  • 作业通知:可配置作业结束通知回调函数,通知上层模块作业完成

MemAcc模块规定每个地址区域同时只允许一个作业请求,这简化了作业管理,因为一个地址区域只能分配给一个上层模块,且上层模块通常按顺序发出作业请求。

3.2. 内存访问协调

MemAcc模块负责协调对共享内存资源的访问,确保不同上层模块的内存访问请求不会相互冲突。这种协调特别重要,因为某些内存设备(如闪存或EEPROM)在编程模式下不支持并发读取访问。

访问协调的主要特性:

  • 优先级管理:基于MemAccAddressAreaPriority配置,优先处理来自特定上层模块的内存访问请求
  • 资源冲突处理:在硬件资源冲突时,内存栈仍接受访问请求,并在资源可用时处理该请求
  • 暂停/恢复机制:如果存储硬件支持暂停/恢复功能,则利用Mem_SuspendMem_Resume服务实现优先级操作
  • 分页/分段调度:如果存储硬件不支持暂停/恢复功能,则在页/页批或扇区/扇区批基础上实现优先级调度

3.3. 硬件特定服务

为了支持内存设备特定功能,MemAcc模块提供了一个通用API(MemAcc_HwSpecificService)来调用硬件特定的Mem驱动程序服务。每个Mem驱动程序可以有多个硬件特定服务,通过hwServiceId参数选择。

这种设计使MemAcc模块能够保持硬件无关性,同时允许上层应用访问底层硬件的特殊功能。

3.4. 通用锁定机制

MemAcc模块提供了一个通用锁定API,用于支持上层模块(如BndM)直接访问内存设备。锁定机制允许应用程序或上层模块在特定条件下(如Flash加载器或直接硬件访问)绕过MemAcc的协调功能。

锁定API包括MemAcc_RequestLockMemAcc_ReleaseLock函数,应用程序或上层模块负责维护锁定状态并在直接内存访问完成后释放锁定。

3.5. 动态内存驱动程序处理

对于安全相关用例,MemAcc模块支持动态内存驱动程序处理。在这些用例中,Mem驱动程序编译为单独的二进制文件,包含一个函数指针表以向MemAcc模块公开服务函数。这种机制防止了意外覆盖内存区域,提高了系统安全性。

MemAcc模块的动态内存驱动程序处理包括:

  • 动态激活:使用MemAcc_ActivateMem在运行时激活内存驱动程序
  • 服务调用:通过函数指针表调用Mem驱动程序的服务函数

4. API概览

4.1. 同步与异步函数

MemAcc模块提供了一组丰富的API,包括同步函数和异步函数,用于初始化、配置和执行内存操作。

在这里插入图片描述

图4.1:AUTOSAR Memory Access 模块API与数据结构,展示了模块的主要函数和数据类型

同步函数包括:

  • MemAcc_Init:初始化MemAcc模块
  • MemAcc_DeInit:反初始化MemAcc模块
  • MemAcc_GetVersionInfo:获取版本信息
  • MemAcc_GetJobResult:获取作业结果
  • MemAcc_GetJobStatus:获取作业状态
  • MemAcc_GetMemoryInfo:获取内存信息
  • MemAcc_GetProcessedLength:获取已处理长度
  • MemAcc_GetJobInfo:获取作业信息
  • MemAcc_ActivateMem:激活Mem驱动程序
  • MemAcc_DeactivateMem:停用Mem驱动程序

异步函数包括:

  • MemAcc_Cancel:取消操作
  • MemAcc_Read:读取内存
  • MemAcc_Write:写入内存
  • MemAcc_Erase:擦除内存
  • MemAcc_Compare:比较内存
  • MemAcc_BlankCheck:空白检查
  • MemAcc_HwSpecificService:执行硬件特定服务
  • MemAcc_RequestLock:请求锁定
  • MemAcc_ReleaseLock:释放锁定

此外,MemAcc模块还提供了调度函数 MemAcc_MainFunction,用于处理队列中的作业请求、更新作业状态和结果,并在配置了作业结束通知函数的情况下调用该通知函数。

4.2. 作业处理流程

MemAcc模块的作业处理涉及一系列步骤,从作业请求到作业完成的整个生命周期。

在这里插入图片描述

图4.2:AUTOSAR Memory Access 作业处理序列,展示了从上层模块发起请求到作业完成的完整流程

作业处理的主要步骤包括:

  1. 初始化:上层模块调用MemAcc_Init初始化MemAcc模块
  2. 作业请求:上层模块调用异步函数(如MemAcc_Write)发起作业请求
  3. 参数验证:MemAcc模块验证参数并检查地址区域是否空闲
  4. 作业队列:如果地址区域空闲,MemAcc模块将作业请求加入队列
  5. 作业处理:调度器调用MemAcc_MainFunction处理队列中的作业
  6. 地址转换:MemAcc模块将逻辑地址转换为物理地址,并分割跨设备边界的访问
  7. Mem驱动程序调用:MemAcc模块调用相应的Mem驱动程序函数
  8. 作业完成:作业完成后,MemAcc模块更新作业状态和结果,并通知上层模块(如果配置了通知函数)
  9. 状态查询:上层模块可以调用MemAcc_GetJobStatusMemAcc_GetJobResult等函数查询作业状态和结果

5. 配置参数

MemAcc模块提供了一组配置参数,用于定义内存区域的映射关系和模块行为。

在这里插入图片描述

图5.1:AUTOSAR Memory Access 模块配置结构,展示了主要的配置参数和它们之间的关系

5.1. 地址区域配置

地址区域配置(MemAccAddressAreaConfiguration)定义了逻辑地址空间中的连续内存区域,每个地址区域只分配给一个上层模块。主要参数包括:

  • MemAccAddressAreaId:地址区域标识符(0-255)
  • MemAccAddressAreaLowerAddress:地址区域下限地址
  • MemAccAddressAreaUpperAddress:地址区域上限地址
  • MemAccAddressAreaPriority:地址区域优先级(0-255)
  • MemAccAddressAreaDefaultHwId:默认硬件标识符
  • MemAccAddressAreaUserModuleId:用户模块标识符
  • MemAccJobEndNotificationName:作业结束通知函数名称

5.2. 子地址区域配置

子地址区域配置(MemAccSubAddressAreaConfiguration)定义了映射到物理内存设备的扇区批。主要参数包括:

  • MemAccSubAddressAreaId:子地址区域标识符(0-65535)
  • MemAccSubAddressAreaLowerAddress:子地址区域下限地址
  • MemAccSubAddressAreaUpperAddress:子地址区域上限地址
  • MemAccMemDeviceRef:内存设备引用
  • MemAccMemInstanceRef:内存实例引用
  • MemAccSubAddressAreaPhysicalStartAddress:物理起始地址
  • MemAccUseEraseBurst:是否使用擦除突发模式
  • MemAccUseReadBurst:是否使用读取突发模式
  • MemAccUseWriteBurst:是否使用写入突发模式
  • MemAccCalcCRC:是否计算CRC
  • MemAccVerifyOnWrite:是否在写入时验证
  • MemAccVerifyOnRead:是否在读取时验证

6. 总结

AUTOSAR Memory Access模块是AUTOSAR软件架构中的关键组件,为不同类型的存储设备提供统一的访问接口。通过将内存访问功能分为硬件无关部分和硬件相关部分,MemAcc模块实现了以下主要目标:

  • 硬件抽象:隐藏底层存储设备的具体实现细节,提供一个与硬件无关的内存访问API
  • 访问协调:管理对共享内存资源的并发访问,避免资源冲突
  • 地址转换:实现从逻辑地址空间到物理内存设备的映射,支持跨设备边界的访问
  • 作业管理:提供异步作业处理机制,包括作业状态跟踪、结果报告和通知功能
  • 灵活配置:通过丰富的配置参数,适应不同的系统需求和存储设备类型

MemAcc模块与Mem驱动程序的组合支持多种用例,包括块基础非易失性内存访问、地址基础内存访问和OTA软件更新。这种设计不仅提高了系统的可移植性和灵活性,还为未来的存储技术发展提供了良好的兼容性。

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

余额充值