Files
autosar_standard_spec_v4.4/Memory/AUTOSAR_SWS_EEPROMAbstraction.md
T

18 KiB

EEPROM 抽象规范

文档标题: Specification of EEPROM Abstraction AUTOSAR CP Release: 4.4.0 文档编号: 287 文档类型: SWS (Software Specification)


文档标识

项目 内容
Document Title Specification of EEPROM Abstraction
Document Owner AUTOSAR
Document Responsibility AUTOSAR
Document Identification No 287
Document Status Final
Part of AUTOSAR Standard Classic Platform
Part of Standard Release 4.4.0

文档变更历史

日期 版本 变更者 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management 编辑性修订
2017-12-08 4.3.1 AUTOSAR Release Management 引入运行时错误;在 Ea_InvalidateBlock 和 Ea_EraseImmediateBlock 中设置 MEMIF_BUSY
2016-11-30 4.3.0 AUTOSAR Release Management 更新请求接受/拒绝及相关错误报告规则;更新追溯信息;主函数范围/限制更改
2015-07-31 4.2.2 AUTOSAR Release Management 错误分类重做;调试支持标记为过时;参数范围更正;请求的块无法找到时澄清作业结果
2014-10-31 4.2.1 AUTOSAR Release Management 需求与 BSW 特性、通用和模块特定需求关联
2014-03-31 4.1.3 AUTOSAR Release Management 编辑性修订
2013-10-31 4.1.2 AUTOSAR Release Management 移除模块主函数的时序需求;为 Ea_Write 增加 const 限定符;新增 EaMainFunctionPeriod 配置参数;Fls_GetStatus 在模块未初始化时返回 MEMIF_UNINIT
2013-03-15 4.1.1 AUTOSAR Administration 按新的 SWS_BSWGeneral 重做;已发布参数 EaMaximumBlockingTime 弃用;配置参数 EaIndex 弃用
2011-12-22 4.0.3 AUTOSAR Administration 引入参数检查和相应 DET 错误;细化内部管理操作处理;模块短名变更
2010-09-30 3.1.5 AUTOSAR Administration 新增 NULL 指针检查;模块间检查细化;澄清返回值描述
2010-02-02 3.1.4 AUTOSAR Administration 澄清配置变体;通知例程多重性更正;重新表述作业结果处理;文件包含结构变更
2008-08-13 3.1.1 AUTOSAR Administration 法律免责声明修订
2007-12-21 3.0.1 AUTOSAR Administration EA_MAXIMUM_BLOCKING_TIME 作为已发布参数
2007-01-24 2.1.15 AUTOSAR Administration 文件包含结构更新;初始化函数 API 适配;EA 块编号范围适配
2006-05-16 2.0 AUTOSAR Administration 初始版本发布

目录

  1. 介绍与功能概述
  2. 缩略语
  3. 相关文档
  4. 约束与假设
  5. 模块依赖
  6. 需求追溯
  7. 功能规范
  8. API 规范
  9. 时序图
  10. 配置规范
  11. 不适用需求

1 介绍与功能概述

本规范描述 AUTOSAR 基础软件模块 EEPROM Abstraction (EA) 的功能、API 和配置。

EEPROM Abstraction (EA) 模块抽象 EEPROM 驱动的寻址方案,并为上层提供统一的(虚拟)寻址方案以及虚拟无限的擦/写周期数。

EA 模块属于 ECU 抽象层,使上层(NVRAM 管理器)与底层 EEPROM 驱动和器件解耦。


2 缩略语

缩略语 描述
EA EEPROM Abstraction
EEPROM 电可擦可编程只读存储器
FEE Flash EEPROM Emulation
NV Non Volatile(非易失)
NvM NVRAM Manager
MemIf Memory Abstraction Interface
(Logical) Block(逻辑块) 模块用户可单独寻址的连续内存区域
Page(页) 一次可写入的最小内存量
Sector(扇区) 一次可擦除的最小内存量
Virtual Page(虚拟页) EA 模块用于内部地址计算的可配置最小寻址单元
DEM Diagnostic Event Manager
DET Default Error Tracer

3 相关文档

3.1 输入文档

  • List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
  • Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  • General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
  • Requirements on Memory Hardware Abstraction Layer — AUTOSAR_SRS_MemoryHWAbstractionLayer.pdf
  • Specification of EEPROM Driver — AUTOSAR_SWS_EEPROMDriver.pdf
  • Specification of Memory Abstraction Interface — AUTOSAR_SWS_MemoryAbstractionInterface.pdf
  • Specification of NVRAM Manager — AUTOSAR_SWS_NVRAMManager.pdf
  • Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
  • General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关规范

AUTOSAR 提供基础软件模块通用规范(SWS BSW General),也适用于 EEPROM Abstraction。


4 约束与假设

4.1 限制

无限制。

4.2 适用车型领域

无限制。


5 模块依赖

EA 模块依赖于底层 EEPROM 驱动并实现内存抽象架构。


6 需求追溯

(主要追溯关系,完整表见原文 PDF)

需求 满足者
SRS_BSW_00101 SWS_Ea_00084, 00017
SRS_BSW_00392 SWS_Ea_00083, 00117, 00190
SRS_BSW_00406 SWS_Ea_00128
SRS_BSW_00414 SWS_Ea_00190, 00191
SRS_MemHwAb_14001 (起止地址对齐) SWS_Ea_00005, 00068, 00075, 00137
SRS_MemHwAb_14002 (写周期配置) SWS_Ea_00080
SRS_MemHwAb_14005 (32位虚拟地址) SWS_Ea_00066, 00075
SRS_MemHwAb_14006 (64K 边界对齐) SWS_Ea_00024
SRS_MemHwAb_14007 (读对齐限制) SWS_Ea_00021
SRS_MemHwAb_14009 (地址转换) SWS_Ea_00007, 00021, 00024, 00036, 00063
SRS_MemHwAb_14010 (完整块写) SWS_Ea_00087, 00151, 00159, 00181
SRS_MemHwAb_14012 (写访问分散) SWS_Ea_00079
SRS_MemHwAb_14013 (立即数据不延迟) SWS_Ea_00025
SRS_MemHwAb_14014 (数据不一致检测) SWS_Ea_00046, 00047, 00188, 00189
SRS_MemHwAb_14015 (报告不一致) SWS_Ea_00104
SRS_MemHwAb_14016 (不返回不一致数据) SWS_Ea_00104
SRS_MemHwAb_14017 (扩展 EEPROM 驱动) SWS_Ea_00150
SRS_MemHwAb_14026 (不使用 0x0000/0xFFFF) SWS_Ea_00006
SRS_MemHwAb_14028 (无效化块) SWS_Ea_00037, 00074, 00091, 00194
SRS_MemHwAb_14029 (部分读取) SWS_Ea_00022, 00086, 00158, 00179
SRS_MemHwAb_14031 (取消异步操作) SWS_Ea_00077, 00078, 00088, 00160
SRS_MemHwAb_14032 (擦除立即数据) SWS_Ea_00063, 00064, 00065, 00093, 00104

完整追溯表见原文 PDF。


7 功能规范

7.1 总体行为

[SWS_Ea_00137] ⌈EEPROM Abstraction (EA) 一次只接受一个作业,即模块不应为待处理作业提供队列(这是 NVRAM 管理器的职责)。⌋

:由于 NvM 是本模块的唯一调用者,为保持本模块合理小巧,模块函数不应检查模块当前是否忙。NvM 负责将待处理作业串行化,只在前一作业完成或取消后开始新作业。

7.1.1 寻址方案与分段

EEPROM Abstraction (EA) 为上层提供 32 位虚拟线性地址空间和统一的分段方案。32 位虚拟地址由:

  • 16 位块编号 — 允许(理论上)65536 个逻辑块
  • 16 位块偏移 — 允许每块(理论上)64 KB 的块大小

组成。

16 位块编号表示可配置的(虚拟)分页机制。此地址对齐的值可从底层 EEPROM 驱动和器件派生。虚拟分页可通过参数 EA_VIRTUAL_PAGE_SIZE 配置。

[SWS_Ea_00075] ⌈Ea 模块配置应使虚拟页大小(EA_VIRTUAL_PAGE_SIZE 中定义)为物理页大小的整数倍,即不允许配置小于实际物理页大小的虚拟页。⌋

示例:虚拟页大小配置为 8 字节,因此地址对齐为 8 字节。逻辑块编号 1 放在物理地址 x,逻辑块编号 2 放在 x+8,逻辑块编号 3 放在 x+16。

[SWS_Ea_00005] ⌈每个已配置逻辑块应占用配置虚拟页大小的整数倍。⌋

示例:如虚拟页大小为 8 字节,逻辑块可为 8、16、24、32 字节等,但不能为 10、20、50 字节等。

[SWS_Ea_00068] ⌈逻辑块不应相互重叠且不应相互包含。⌋

[SWS_Ea_00006] ⌈块编号 0x0000 和 0xFFFF 不应配置为逻辑块。⌋ (SRS_MemHwAb_14026)

7.1.2 地址计算

[SWS_Ea_00007] ⌈根据 EA 模块的实现和使用的具体地址格式,EA 模块的函数应将 16 位块编号和 16 位块偏移组合,以派生底层 EEPROM 驱动所需的物理 EEPROM 地址。⌋

[SWS_Ea_00066] ⌈仅 16 位块编号中不表示特定数据集或冗余副本的那些位应用于地址计算。⌋

示例:数据集信息配置为编码在 16 位块编号的 4 个 LSB 中(允许每 NVRAM 块最多 16 个数据集,共 4094 个 NVRAM 块)。实现者将逻辑块所有数据集直接相邻存储,使用块长度和指针访问每个数据集。

7.1.3 擦/写周期限制

[SWS_Ea_00079] ⌈Ea 模块配置应在配置参数 EaNumberOfWriteCycles 中定义每个逻辑块预期的擦/写周期数。⌋

[SWS_Ea_00080] ⌈如果底层 EEPROM 器件或器件驱动每物理内存单元未提供至少已配置的擦/写周期数(在参数 EepAllowedWriteCycles 中给出),EA 模块应提供机制以分散擦/写访问,使物理器件不被过度使用。这也适用于 EA 模块内部使用的所有管理数据。⌋

示例:逻辑块 1 预期 500,000 写周期,而底层 EEPROM 器件和驱动仅规定 100,000 擦除周期。EA 模块必须提供(至少)5 个独立内存区域,在它们之间交替访问。

7.1.4 "立即"数据处理

包含立即数据的块必须瞬时写入,即此类块应可在无需首先擦除相应内存区域(如使用预擦除内存)的情况下写入。NVRAM 管理器应在写入立即数据前取消正在进行的较低优先级读/擦/写或比较作业。

:正在硬件上运行的操作(如写入一页或擦除一个扇区)通常一旦开始就不能中止。因此即使对立即数据,最长硬件操作的最大时间也必须接受为延迟。

7.1.5 管理块一致性信息

[SWS_Ea_00046] ⌈Ea 模块应为每个块管理该块从 EA 模块的角度是否"正确"的信息。此一致性信息应仅涉及块的内部处理,而非块的内容。⌋

[SWS_Ea_00047] ⌈当块写操作开始时,EA 模块应将相应块标记为不一致。块写操作成功结束时,EA 模块应将块标记为(再次)一致。⌋

7.2 错误分类

7.2.1 开发错误

[SWS_Ea_00196] ⌈

错误类型 相关性 相关错误代码 值[hex]
模块未初始化即调用 API 服务 Development EA_E_UNINIT 0x01
以无效块编号调用 API 服务 Development EA_E_INVALID_BLOCK_NO 0x02
以无效块偏移调用 API 服务 Development EA_E_INVALID_BLOCK_OFS 0x03
以无效指针参数调用 API 服务 Development EA_E_PARAM_POINTER 0x04
以无效块长度信息调用 API 服务 Development EA_E_INVALID_BLOCK_LEN 0x05
Ea_Init 失败 Development EA_E_INIT_FAILED 0x09

7.2.2 运行时错误

错误类型 相关错误代码 值[hex]
模块忙时调用 API 服务 EA_E_BUSY 0x06
Ea_Cancel 调用时无待处理作业 EA_E_INVALID_CANCEL 0x08

7.2.3 瞬态故障

无瞬态故障。

7.2.4 生产错误

无生产错误。

7.2.5 扩展生产错误

无扩展生产错误。


8 API 规范

8.1 导入的类型

[SWS_Ea_00083] ⌈

模块 头文件 导入类型
Eep Eep.h Eep_AddressType, Eep_LengthType
MemIf MemIf.h MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType
Std_Types StandardTypes.h Std_ReturnType, Std_VersionInfoType

8.2 类型定义

Ea_ConfigType

内容
Name Ea_ConfigType
Type Structure
Range 实现特定
Description Ea 模块的配置数据结构。
Available via Ea.h

8.3 函数定义

8.3.1 Ea_Init

void Ea_Init(const Ea_ConfigType* ConfigPtr)
内容
Service ID[hex] 0x00
Sync/Async Synchronous
Description 初始化 EEPROM 抽象模块。

[SWS_Ea_00191] ⌈配置指针 ConfigPtr 应始终为 NULL_PTR 值。⌋ [SWS_Ea_00017] ⌈应在模块初始化开始时将模块状态从 MEMIF_UNINIT 设为 MEMIF_BUSY_INTERNAL。⌋ [SWS_Ea_00128] ⌈如初始化在 Ea_Init 内完成,成功完成后应将模块状态从 MEMIF_BUSY_INTERNAL 设为 MEMIF_IDLE。⌋

8.3.2 Ea_SetMode

void Ea_SetMode(MemIf_ModeType Mode)
内容
Service ID[hex] 0x01
Description 切换底层 EEPROM 驱动的模式。

将调用映射到底层 EEPROM 驱动的 Eep_SetMode 函数。

8.3.3 Ea_Read

Std_ReturnType Ea_Read(
    uint16 BlockNumber,
    uint16 BlockOffset,
    uint8* DataBufferPtr,
    uint16 Length
)
内容
Service ID[hex] 0x02
Sync/Async Asynchronous
Description BlockNumber 块的 BlockOffset 偏移开始读取 Length 字节到 DataBufferPtr

参数检查:

  • 模块已初始化
  • BlockNumber 有效
  • BlockOffset 在块范围内
  • Length 大于 0 且不超过块大小

[SWS_Ea_00022] / [SWS_Ea_00086] ⌈接受读取请求,设状态 MEMIF_BUSY,作业结果 MEMIF_JOB_PENDING。⌋ [SWS_Ea_00158] / [SWS_Ea_00179] ⌈在主函数内异步处理读取。⌋

8.3.4 Ea_Write

Std_ReturnType Ea_Write(
    uint16 BlockNumber,
    const uint8* DataBufferPtr
)
内容
Service ID[hex] 0x03
Sync/Async Asynchronous
Description DataBufferPtr 内容写入 BlockNumber 块。

[SWS_Ea_00087] / [SWS_Ea_00151] ⌈写整个块。⌋ [SWS_Ea_00159] / [SWS_Ea_00181] ⌈异步处理写入。⌋

8.3.5 Ea_Cancel

void Ea_Cancel(void)
内容
Service ID[hex] 0x04
Sync/Async Synchronous
Description 取消正在进行的异步操作。

[SWS_Ea_00077] / [SWS_Ea_00078] ⌈同步取消正在进行的作业,调用底层 Eep_Cancel。⌋ [SWS_Ea_00088] ⌈模块状态设为 MEMIF_IDLE,作业结果设为 MEMIF_JOB_CANCELED。⌋

8.3.6 Ea_GetStatus

MemIf_StatusType Ea_GetStatus(void)
内容
Service ID[hex] 0x05
Sync/Async Synchronous
Reentrancy Reentrant
Description 返回状态的服务。

8.3.7 Ea_GetJobResult

MemIf_JobResultType Ea_GetJobResult(void)
内容
Service ID[hex] 0x06
Sync/Async Synchronous
Reentrancy Reentrant
Description 返回上次作业结果的服务。

可能值:MEMIF_JOB_OK、MEMIF_JOB_FAILED、MEMIF_JOB_PENDING、MEMIF_JOB_CANCELED、MEMIF_BLOCK_INCONSISTENT、MEMIF_BLOCK_INVALID。

8.3.8 Ea_InvalidateBlock

Std_ReturnType Ea_InvalidateBlock(uint16 BlockNumber)
内容
Service ID[hex] 0x07
Sync/Async Asynchronous
Description 使 BlockNumber 块无效。

[SWS_Ea_00037] / [SWS_Ea_00074] / [SWS_Ea_00091] / [SWS_Ea_00194] ⌈通过设置块管理数据使块无效化,非必需擦除物理内存内容。⌋

8.3.9 Ea_GetVersionInfo

void Ea_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)
内容
Service ID[hex] 0x08
Reentrancy Reentrant
Description 获取本模块版本信息。

8.3.10 Ea_EraseImmediateBlock

Std_ReturnType Ea_EraseImmediateBlock(uint16 BlockNumber)
内容
Service ID[hex] 0x09
Sync/Async Asynchronous
Description 擦除 BlockNumber 块(立即数据)。

[SWS_Ea_00063] / [SWS_Ea_00064] / [SWS_Ea_00065] / [SWS_Ea_00093] / [SWS_Ea_00104] ⌈仅对包含立即数据的块。⌋

8.4 回调通知

由模块用户提供:

  • Ea_JobEndNotification:作业成功完成时调用
  • Ea_JobErrorNotification:作业以错误结束时调用

8.5 调度函数

Ea_MainFunction

void Ea_MainFunction(void)
内容
Service ID[hex] 0x0a
Description 执行 EA 模块作业处理的服务。
Available via SchM_Ea.h

调用底层 EEPROM 驱动处理读、写、擦除、比较请求。

8.6 期望接口

强制接口

API 函数 头文件 描述
Eep_Cancel Eep.h 取消正在进行的异步操作
Eep_Compare Eep.h 比较 EEPROM 与内存数据
Eep_Erase Eep.h 擦除 EEPROM 数据
Eep_GetJobResult Eep.h 返回作业结果
Eep_GetStatus Eep.h 返回状态
Eep_Read Eep.h 从 EEPROM 读取
Eep_SetMode Eep.h 切换 EEPROM 驱动模式
Eep_Write Eep.h 写入 EEPROM

可选接口

API 函数 头文件 描述
Det_ReportError Det.h 报告开发错误
Det_ReportRuntimeError Det.h 报告运行时错误

可配置接口

回调函数(由 NvM 提供):

  • Ea_JobEndNotification (typically NvM_JobEndNotification)
  • Ea_JobErrorNotification (typically NvM_JobErrorNotification)

9 时序图

类似 MemIf:NvM → Ea → Eep 链路上的请求传播,带异步主函数处理。


10 配置规范

10.1 容器与配置参数

10.1.1 Ea

内容
SWS Item ECUC_Ea_00100
Module Name Ea
Module Description EA(EEPROM Abstraction)模块配置
Post-Build Variant Support true

10.1.2 EaGeneral

参数 描述
EaDevErrorDetect 开发错误检测开关
EaVersionInfoApi 版本信息 API 启用
EaSetModeApi SetMode API 启用
EaMainFunctionPeriod 主函数周期(秒)
EaVirtualPageSize 虚拟页大小

10.1.3 EaBlockConfiguration

每个逻辑块配置:

参数 描述
EaBlockNumber 块编号(不可为 0x0000 或 0xFFFF)
EaBlockSize 块大小
EaDeviceIndex 设备索引
EaImmediateData 是否为立即数据
EaNumberOfWriteCycles 期望写周期数
EaJobEndNotification 作业结束通知回调
EaJobErrorNotification 作业错误通知回调

10.1.4 EaPublishedInformation

已发布参数:

  • 物理写块大小

11 不适用需求

[SWS_Ea_00999] ⌈这些需求不适用于本规范。⌋ 涉及多个 SRS_BSW_* 和 SRS_SPAL_* 需求,详见原文 PDF。


翻译说明

  • 本文档完整翻译自 AUTOSAR_SWS_EEPROMAbstraction v4.4.0(Document ID 287,58 页)。
  • 保留所有需求 ID(SWS_Ea_xxxxx、SRS_MemHwAb_xxxxx、ECUC_Ea_xxxxx)。
  • 保留 AUTOSAR 方框符 ⌈⌋。
  • 模块缩写(Ea、Eep、NvM、MemIf、FEE 等)和 API 函数名保持英文。
  • 详细配置参数和示例请参考原文 PDF 第 10 章。