Files
autosar_standard_spec_v4.4/Memory/AUTOSAR_SWS_EEPROMDriver.md
T

28 KiB

EEPROM 驱动规范

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


文档标识

项目 内容
Document Title Specification of EEPROM Driver
Document Owner AUTOSAR
Document Responsibility AUTOSAR
Document Identification No 021
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 MCAL 多核分发
2017-12-08 4.3.1 AUTOSAR Release Management 将 EEP_E_TIMEOUT 和 EEP_E_BUSY 从开发错误改为运行时错误;更改 ECUC_Eep_00189 描述
2016-11-30 4.3.0 AUTOSAR Release Management 删除过时的 7.11 "调试支持"章节和 10.2.1 "变体"子章节;按字节读/写/擦除访问适配;传递给函数的 DataBuffers 对齐
2015-07-31 4.2.2 AUTOSAR Release Management DET 重命名和适配;第 7 章错误分类适配
2014-10-31 4.2.1 AUTOSAR Release Management 为扩展生产错误增加通过/失败标准和额外属性;移除 Eep_Init() 关于 NULL_PTR 检查的冗余 SWS ID
2014-03-31 4.1.3 AUTOSAR Release Management 修正 SWS_Eep_00102、SWS_Eep_00068 和 SWS_Eep_00137 的格式
2013-10-31 4.1.2 AUTOSAR Release Management 从 Eep_MainFunction API 表中移除 'Timing' 行;编辑性修订
2013-03-15 4.1.1 AUTOSAR Administration MemMap.h 改为 Eep_MemMap.h;新增扩展生产错误
2011-12-22 4.0.3 AUTOSAR Administration EEP178 & EEP185 增加 FloatParamDef 参数最小最大值;模块短名称替换为模块缩写
2010-09-30 3.1.5 AUTOSAR Administration 新增 DET 错误 EEP_E_PARAM_POINTER、EEP_E_TIMEOUT;版本检查章节(7.10)修订
2010-02-02 3.1.4 AUTOSAR Administration 使 SWS_Eep_00003、SWS_Eep_00030、SWS_Eep_00128 中隐藏文本可见;澄清可选回调通知;重做外部 SPI EEPROM 配置示例;改用 VARIANT-POST-BUILD 替代 VARIANT-LINK-TIME;澄清 Eep_Cancel() 同步行为;添加调试支持;新增 HW 故障 DEM 错误代码
2008-08-13 3.1.1 AUTOSAR Administration 法律免责声明修订
2007-12-21 3.0.1 AUTOSAR Administration SWS_Eep_00005 措辞微调;新增 NULL_PTR 检查需求(SWS_Eep_00161, 00162);更新 SWS_Eep_00028 和图 4
2007-01-24 2.1.15 AUTOSAR Administration 常量名修正;擦写周期限制;链接时配置 vs 配置指针检查;比较作业的作业结果未规定
2006-05-16 2.0 AUTOSAR Administration 文档结构适配 Release 2.0 SWS 模板;适配新的内存抽象架构;取消功能改为异步
2005-05-31 1.0 AUTOSAR Administration 初始发布

目录

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

1 介绍与功能概述

本规范描述 EEPROM 驱动的功能和 API。本规范同时适用于内部和外部 EEPROM 驱动。

EEPROM 驱动提供对 EEPROM 进行读、写、擦除的服务。它还提供将 EEPROM 中数据块与内存(如 RAM)中数据块进行比较的服务。

这些服务的行为是异步的。

内部 EEPROM 驱动直接访问微控制器硬件,位于微控制器抽象层(MCAL)。外部 EEPROM 驱动使用处理程序(大多数情况下为 SPI)或驱动访问外部 EEPROM 设备,位于 ECU 抽象层。

两类驱动的功能需求和功能范围相同,因此 API 在语义上相同。


2 缩略语

缩略语 描述
Data block(数据块) 一个数据块可包含 1..n 字节,在 EEPROM 驱动 API 中使用。数据块以 EEPROM 中的地址偏移、指向内存位置的指针、长度传递给 EEPROM 驱动。
Data unit(数据单元) EEPROM 中最小数据实体。对读/写/擦除操作可能不同。
示例 1:Motorola STAR12 — 读:1 字节;写:2 字节;擦:4 字节
示例 2:外部 SPI EEPROM 设备 — 读/写/擦:1 字节
Normal mode(普通模式) 通过 SPI 与 EEPROM 设备的数据交换按字节进行,允许与其他 SPI 设备(如 I/O ASIC、外部看门狗等)协作使用 SPI。
Burst mode(突发模式) 通过 SPI 与 EEPROM 设备的数据交换按块进行。块大小取决于 EEPROM 属性,例如 64 字节。由于传输大块,SPI 在突发模式下被 EEPROM 访问阻塞。此模式用于 ECU 启动和关机阶段,需要快速数据读写。
EEPROM cell 持有数据的 EEPROM 设备最小物理单元。通常为 1 字节。
缩写 描述
EEPROM 电可擦可编程只读存储器
NVRAM 非易失随机存取存储器
NvM NVRAM Manager 模块名
EcuM ECU State Manager 模块名
DEM Diagnostic Event Manager 模块名
DET Default Error Tracer 模块名

3 相关文档

3.1 输入文档

  • [1] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  • [2] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
  • [3] Specification of Memory Abstraction Interface — AUTOSAR_SWS_MemoryAbstractionInterface.pdf
  • [4] Specification of SPI Handler/Driver — AUTOSAR_SWS_SPIHandlerDriver.pdf
  • [5] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
  • [6] Requirements on EEPROM Driver — AUTOSAR_SRS_EEPROMDriver.pdf
  • [7] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
  • [8] Specification of Diagnostics Event Manager — AUTOSAR_SWS_DiagnosticEventManager.pdf
  • [9] AUTOSAR Glossary — AUTOSAR_TR_Glossary.pdf
  • [10] Specification of MCU Driver — AUTOSAR_SWS_MCUDriver.pdf
  • [11] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
  • [12] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
  • [13] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关规范

AUTOSAR 提供基础软件模块通用规范 [13](SWS BSW General),也适用于 EEPROM 驱动。因此,SWS BSW General 规范应被视为 EEPROM 驱动的附加和必需规范。


4 约束与假设

4.1 限制

EEPROM 驱动不提供数据完整性机制(如校验和、冗余存储等)。 不提供 EEPROM 写保护设置。

4.2 适用车型领域

无限制。

4.3 适用安全相关环境

如果上层软件为安全相关数据提供以下机制,本模块可在安全相关系统中使用:

  • 校验和保护
  • 使用数据前检查完整性
  • 冗余存储
  • 写入 EEPROM 后验证数据。可使用 EEPROM 驱动的比较函数。

5 模块依赖

EEPROM 驱动有两类:

  1. 片上 EEPROM 驱动:微控制器抽象层(MCAL)的一部分。
  2. 外部 EEPROM 设备驱动:ECU 抽象层的一部分。

[SWS_Eep_00082] ⌈外部 EEPROM 驱动的源代码应独立于微控制器平台。⌋ ()

内部 EEPROM 可能依赖系统时钟、预分频器和 PLL。因此,系统时钟的变更(如 PLL 开 → PLL 关)也可能影响 EEPROM 硬件的时钟设置。EEPROM Driver 模块在其 init 函数中不处理配置时钟、预分频器和 PLL 的寄存器。这必须由 MCU 模块 [10] 完成。

外部 EEPROM 驱动依赖所使用板载通信处理程序(如 SPI Handler/Driver)的 API 和能力。

EEPROM 驱动是内存抽象架构的一部分,因此某些类型依赖 Memory Interface (MemIf) 模块。

5.1 文件结构

[SWS_Eep_00228] ⌈如果模块实现使用自定义中断处理,中断服务例程应放在 Eep_Irq.c。⌋ ()


6 需求追溯

(详细需求追溯表请参考原文 PDF 第 6 章。涉及 SRS_BSW_、SRS_Eep_、SRS_SPAL_* 等多个需求类别。主要部分:)

需求 满足者
SRS_BSW_00101 SWS_Eep_00004
SRS_BSW_00323 SWS_Eep_00016, 00017, 00018
SRS_BSW_00335 SWS_Eep_00138
SRS_BSW_00337 SWS_Eep_00000, 00200-00203
SRS_BSW_00406 SWS_Eep_00006, 00033
SRS_Eep_00087 (异步读) SWS_Eep_00009, 00013, 00256
SRS_Eep_00088 (异步写) SWS_Eep_00014, 00015, 00063, 00090, 00256
SRS_Eep_00089 (异步擦除) SWS_Eep_00019, 00020, 00070, 00072
SRS_Eep_00090 (同步取消) SWS_Eep_00021, 00027, 00028, 00215, 00216
SRS_Eep_00091 (状态返回) SWS_Eep_00029
SRS_Eep_00092 (写周期减少) SWS_Eep_00060, 00064
SRS_Eep_00094 (内存分段) SWS_Eep_00063, 00070, 00072, 00090
SRS_Eep_00095 (单作业处理) SWS_Eep_00033, 00036
SRS_Eep_12047 (作业处理函数) SWS_Eep_00030, 00032
SRS_Eep_12050 (硬件能力限制) SWS_Eep_00051, 00054, 00057, 00069
SRS_Eep_12091 (异步比较) SWS_Eep_00025, 00026, 00256
SRS_Eep_12124 (SPI 模式访问) SWS_Eep_00052, 00053, 00055, 00073
SRS_Eep_12156 (模式切换) SWS_Eep_00042, 00130, 00132
SRS_Eep_12157 (普通模式读) SWS_Eep_00051, 00052, 00053
SRS_SPAL_12448 SWS_Eep_00016, 00017, 00018, 00033

完整追溯表见原文 PDF。


7 功能规范

7.1 总体行为

[SWS_Eep_00088] ⌈Eep SWS 应同时适用于内部和外部 EEPROM。Eep SWS 定义 EEPROM 操作(读/写/擦除/比较)的异步服务。⌋ (SRS_Eep_12051)

[SWS_Eep_00036] ⌈Eep 模块不应缓存作业。Eep 模块一次只接受一个作业。作业处理期间,Eep 模块不应接受其他作业。⌋ (SRS_Eep_00095)

[SWS_Eep_00037] ⌈Eep 模块不应缓存要读取或写入的数据。Eep 模块应使用通过 API 传递的指针引用的应用数据缓冲区。⌋ (SRS_SPAL_12075)

[SWS_Eep_00256] ⌈Eep 驱动应在内部处理数据缓冲区对齐。它不应对 RAM 缓冲区的对齐(因其为 uint8*)提出任何要求,而应将传入的指针视为仅按字节对齐。⌋

7.2 错误分类

7.2.1 开发错误

[SWS_Eep_00000] ⌈Eep 模块应根据其构建选项(开发/生产模式)检测以下错误:

错误类型 相关性 相关错误代码 值[hex]
无效配置集选择 Development EEP_E_INIT_FAILED 0x10
EEP_E_PARAM_ADDRESS 0x11
EEP_E_PARAM_DATA 0x12
EEP_E_PARAM_LENGTH 0x13
用 NULL 指针调用 API 服务 Development EEP_E_PARAM_POINTER 0x23
模块未初始化即调用 API 服务 Development EEP_E_UNINIT 0x20
⌋ (SRS_BSW_00337, SRS_BSW_00385)

7.2.2 运行时错误

[SWS_Eep_00251] ⌈

错误类型 相关性 相关错误代码 值[hex]
驱动繁忙时调用 API 服务 Runtime EEP_E_BUSY 0x21
超时 Runtime EEP_E_TIMEOUT 0x22
⌋ ()

7.2.3 瞬态故障

无瞬态故障。

7.2.4 生产错误

无生产错误。

7.2.5 扩展生产错误

包括以下扩展生产错误:

EEP_E_ERASE_FAILED
内容
Error Name EEP_E_ERASE_FAILED
Short Description EEPROM 擦除失败(HW)
Long Description Eeprom 模块在 EEPROM 擦除作业因硬件错误失败时报告此错误。
Detection Criteria Fail: EEPROM 擦除作业失败;Pass: EEPROM 擦除作业成功完成
EEP_E_WRITE_FAILED
内容
Error Name EEP_E_WRITE_FAILED
Short Description EEPROM 写失败(HW)
Long Description Eeprom 模块在 EEPROM 写作业因硬件错误失败时报告此错误。
EEP_E_READ_FAILED

EEPROM 读作业因硬件错误失败。

EEP_E_COMPARE_FAILED

EEPROM 比较作业因硬件错误失败。

7.3 错误检测

7.3.1 API 参数检查

[SWS_Eep_00016] ⌈如果 Eep 模块的开发错误检测启用:Eep_Read()Eep_Write()Eep_Compare()Eep_Erase() 函数应检查 DataBufferPtr 不为 NULL。如果 DataBufferPtr 为 NULL,它们应引发开发错误 EEP_E_PARAM_DATA,否则(如未启用开发错误检测)应返回 E_NOT_OK。⌋ (SRS_BSW_00323, SRS_SPAL_12448)

[SWS_Eep_00017] ⌈如果开发错误检测启用:函数应检查 EepromAddress 是否有效。如果不在有效 EEPROM 地址范围内,应引发开发错误 EEP_E_PARAM_ADDRESS,否则返回 E_NOT_OK。⌋

[SWS_Eep_00018] ⌈如果开发错误检测启用:函数应检查参数 Length 是否在最小值(1)和最大值(EepSize - EepromAddress)之间。如不在,引发 EEP_E_PARAM_LENGTH,否则返回 E_NOT_OK。⌋

7.3.2 EEPROM 状态检查

[SWS_Eep_00033] ⌈Eep_SetMode()Eep_Read()Eep_Write()Eep_Compare()Eep_Erase() 函数应检查 EEPROM 状态是否为 MEMIF_IDLE。如果不是:

  • 如果模块尚未初始化且开发错误检测启用,引发开发错误 EEP_E_UNINIT
  • 根据 EEPROM 状态引发运行时错误 EEP_E_BUSY
  • 以 E_NOT_OK 拒绝服务(除 Eep_SetMode() 外,因其无返回值) ⌋

7.3.3 EEPROM 作业遇到硬件故障

  • [SWS_Eep_00200] EEP_E_ERASE_FAILED:EEPROM 擦除函数失败时报告
  • [SWS_Eep_00201] EEP_E_WRITE_FAILED:EEPROM 写函数失败时报告
  • [SWS_Eep_00202] EEP_E_READ_FAILED:EEPROM 读函数失败时报告
  • [SWS_Eep_00203] EEP_E_COMPARE_FAILED:EEPROM 比较函数失败时报告

7.3.4 超时监视

[SWS_Eep_00234] ⌈当读、写、擦或比较作业的超时监视失败时,应报告运行时错误代码 EEP_E_TIMEOUT。⌋

7.4 错误通知

详见 SWS_BSWGeneral 第 7.2 章。

7.5 作业处理 — 通用需求

[SWS_Eep_00128] ⌈Eep 模块应允许通过配置参数 EepUseInterrupts (ECUC_Eep_00163) 配置为中断或轮询控制的作业处理。⌋

[SWS_Eep_00129] ⌈如果支持并启用中断控制作业处理,位于 Eep_Irq.c 的外部中断服务例程应调用一个附加的作业处理函数。⌋

[SWS_Eep_00246] ⌈如果底层 EEPROM 技术对读取地址或长度信息要求特定对齐,且读取或比较作业的地址和/或长度参数未正确对齐,Eep_MainFunction 函数应在内部补偿此缺失的对齐,即提供按字节的 Flash 内存读访问。⌋

SPI EEPROM 驱动额外通用需求

  • [SWS_Eep_00056] SPI 访问失败时,Eep 模块行为参考 SWS_Eep_00068
  • [SWS_Eep_00052] 普通模式:使用为普通 SPI EEPROM 访问配置的 SPI 通道
  • [SWS_Eep_00053] EepNormalReadBlockSize 应匹配普通 SPI 模式可读字节数
  • [SWS_Eep_00055] 快速模式:使用为突发访问 SPI EEPROM 配置的 SPI 通道
  • [SWS_Eep_00073] EepFastReadBlockSize 应匹配突发 SPI 模式可读字节数

7.6 读作业处理

[SWS_Eep_00130] ⌈Eep 模块应提供两种不同的读模式:普通模式、快速模式⌋

[SWS_Eep_00132] ⌈对于驱动外部 EEPROM 的 Eep 模块:如外部 EEPROM 不支持突发模式,应接受快速读模式选择,但行为与普通模式相同。⌋

[SWS_Eep_00051] ⌈普通 EEPROM 模式下,Eep 模块在一个作业处理周期内应读取 EepNormalReadBlockSize 参数指定的字节数。⌋

示例:EepNormalReadBlockSize = 4,读取 21 字节,所需 6 个周期,模式:4-4-4-4-4-1

[SWS_Eep_00054] ⌈快速 EEPROM 模式下,Eep 模块在一个周期内应读取 EepFastReadBlockSize 指定的字节数。⌋

示例:EepFastReadBlockSize = 32,读取 110 字节,所需 4 个周期,模式:32-32-32-14

[SWS_Eep_00058] ⌈读作业成功完成时,Eep 模块应将 EEPROM 状态设置为 MEMIF_IDLE,作业结果设置为 MEMIF_JOB_OK。如已配置,调用 EepJobEndNotification 中定义的通知。⌋

[SWS_Eep_00068] ⌈读作业处理期间检测到错误时,Eep 模块应中止作业,EEPROM 状态设为 MEMIF_IDLE,作业结果设为 MEMIF_JOB_FAILED。如已配置,调用 EepJobErrorNotification 通知。⌋

7.7 写作业处理

[SWS_Eep_00057] ⌈Eep 模块在一个作业处理周期内只应向 EEPROM 写入(和擦除)EEPROM 硬件支持的字节数。⌋

[SWS_Eep_00133] ⌈提供两种写模式:普通、快速⌋

[SWS_Eep_00097] / [SWS_Eep_00098] ⌈分别由 EepNormalWriteBlockSizeEepFastWriteBlockSize 指定每周期写入字节数。⌋

[SWS_Eep_00060] ⌈如果要写入 EEPROM 单元的值已包含在该单元中,Eep 模块在 EepWriteCycleReduction 配置时应跳过该单元的编程。⌋ (SRS_Eep_00092)

[SWS_Eep_00059] ⌈如果 EEPROM 硬件不自动进行,Eep 模块应在写入前擦除 EEPROM 单元。⌋

[SWS_Eep_00063] [SWS_Eep_00090] ⌈如果要写入字节数小于可擦除/可写数据单元,或地址/长度参数未对齐到可擦除/可写数据单元,Eep 模块应通过读-修改-写操作保留受影响 EEPROM 单元数据。⌋

[SWS_Eep_00064] ⌈写入数据块时,Eep 模块应尽量减少读-修改-写操作次数。⌋

7.8 擦除作业处理

  • [SWS_Eep_00069] 一周期内只擦 EEPROM 硬件支持的字节数
  • [SWS_Eep_00070] 如硬件支持且参数对齐,使用块擦除命令
  • [SWS_Eep_00072] 如擦除参数未对齐到可擦除数据单元,使用读-修改-写保留受影响内容

7.9 比较作业处理

适用读相关需求:SWS_Eep_00130, 00132, 00051, 00054。

[SWS_Eep_00075] ⌈如比较作业处理期间检测到比较数据区域不相等,EEPROM 驱动应中止作业,EEPROM 状态设为 MEMIF_IDLE,作业结果设为 MEMIF_BLOCK_INCONSISTENT。如已配置,调用 Eep_JobErrorNotification 回调函数。⌋

7.10 版本检查

详见 SWS_BSWGeneral 第 5.1.8 章。


8 API 规范

8.1 导入的类型

[SWS_Eep_00138] ⌈

模块 头文件 导入类型
Dem Rte_Dem_Type.h Dem_EventIdType, Dem_EventStatusType
MemIf MemIf.h MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType
Std_Types StandardTypes.h Std_ReturnType, Std_VersionInfoType
⌋ (SRS_BSW_00335, SRS_BSW_00357, SRS_BSW_00377)

8.2 类型定义

8.2.1 Eep_ConfigType

内容
Name Eep_ConfigType
Type Structure
Range Implementation Specific — 初始化数据结构内容为 EEPROM 特定
Description 包含 EEPROM 驱动初始化数据的外部数据结构类型。
Available via Eep.h

8.2.2 Eep_AddressType

内容
Name Eep_AddressType
Type uint(8/16/32 位,取决于目标平台和 EEPROM 设备)
Description 用作从已配置 EEPROM 基地址访问特定 EEPROM 内存区域的地址偏移。

8.2.3 Eep_LengthType

内容
Name Eep_LengthType
Type 与 Eep_AddressType 相同
Description 指定要读/写/擦/比较的字节数。

8.3 函数定义

8.3.1 Eep_Init

void Eep_Init(const Eep_ConfigType* ConfigPtr)
内容
Service ID[hex] 0x00
Sync/Async Synchronous
Reentrancy Non Reentrant
Description EEPROM 初始化服务。

[SWS_Eep_00004] ⌈Eep_Init 函数应使用 ConfigPtr 引用结构的值初始化所有 EEPROM 相关寄存器。⌋ [SWS_Eep_00006] ⌈模块初始化完成后,Eep_Init 应将 EEPROM 状态设置为 MEMIF_IDLE,作业结果设置为 MEMIF_JOB_OK。⌋ [SWS_Eep_00044] ⌈Eep_Init 应将 EEPROM 模式设置为已配置的默认模式。⌋

8.3.2 Eep_SetMode

void Eep_SetMode(MemIf_ModeType Mode)
内容
Service ID[hex] 0x01
Parameters Mode: MEMIF_MODE_SLOW(慢读访问/普通 SPI 访问) 或 MEMIF_MODE_FAST(快读访问/SPI 突发访问)

[SWS_Eep_00042] ⌈Eep_SetMode 应将 EEPROM 操作模式设为给定 mode 参数。⌋

8.3.3 Eep_Read

Std_ReturnType Eep_Read(
    Eep_AddressType EepromAddress,
    uint8* DataBufferPtr,
    Eep_LengthType Length
)
内容
Service ID[hex] 0x02
Sync/Async Asynchronous
Return E_OK: 读命令已接受;E_NOT_OK: 未接受

[SWS_Eep_00009] ⌈复制参数,启动读作业,EEPROM 状态设为 MEMIF_BUSY,作业结果设为 MEMIF_JOB_PENDING 后返回。⌋ [SWS_Eep_00013] ⌈Eep 模块应在作业处理函数内异步执行读作业,读取 EepromAddress + EEPROM 基地址Length 字节数据块到 *DataBufferPtr。⌋

8.3.4 Eep_Write

Std_ReturnType Eep_Write(
    Eep_AddressType EepromAddress,
    const uint8* DataBufferPtr,
    Eep_LengthType Length
)
内容
Service ID[hex] 0x03
Sync/Async Asynchronous

[SWS_Eep_00014] ⌈启动写作业并返回。⌋ [SWS_Eep_00015] ⌈异步写入 Length 字节从 *DataBufferPtrEepromAddress + EEPROM 基地址。⌋

8.3.5 Eep_Erase

Std_ReturnType Eep_Erase(
    Eep_AddressType EepromAddress,
    Eep_LengthType Length
)
内容
Service ID[hex] 0x04
Sync/Async Asynchronous
Description 擦除 EEPROM 段的服务。

[SWS_Eep_00019] / [SWS_Eep_00020] ⌈启动并异步执行擦除作业。⌋

8.3.6 Eep_Compare

Std_ReturnType Eep_Compare(
    Eep_AddressType EepromAddress,
    const uint8* DataBufferPtr,
    Eep_LengthType Length
)
内容
Service ID[hex] 0x05
Sync/Async Asynchronous
Description 比较 EEPROM 中数据块与内存中 EEPROM 块。

8.3.7 Eep_Cancel

void Eep_Cancel(void)
内容
Service ID[hex] 0x06
Sync/Async Synchronous
Description 取消正在运行的作业。

[SWS_Eep_00215] ⌈应取消正在进行的 EEPROM 读、写、擦或比较作业。⌋ [SWS_Eep_00021] ⌈同步中止正在运行的作业,函数返回后上层可立即请求新作业。⌋ [SWS_Eep_00027] ⌈应将 EEP 模块状态设为 MEMIF_IDLE。⌋ [SWS_Eep_00028] ⌈如果作业结果当前为 MEMIF_JOB_PENDING,应设为 MEMIF_JOB_CANCELED;否则保持作业结果不变。⌋

8.3.8 Eep_GetStatus

MemIf_StatusType Eep_GetStatus(void)
内容
Service ID[hex] 0x07
Sync/Async Synchronous
Reentrancy Reentrant
Return MemIf_StatusType

[SWS_Eep_00029] ⌈同步返回 EEPROM 状态。⌋

8.3.9 Eep_GetJobResult

MemIf_JobResultType Eep_GetJobResult(void)
内容
Service ID[hex] 0x08
Reentrancy Reentrant

[SWS_Eep_00024] ⌈同步返回 Eep 模块上次已接受作业的结果。⌋

8.3.10 Eep_GetVersionInfo

void Eep_GetVersionInfo(Std_VersionInfoType* versioninfo)
内容
Service ID[hex] 0x0a
Reentrancy Reentrant
Description 获取本模块版本信息的服务。

[SWS_Eep_00239] ⌈如开发错误检测启用且以 NULL 指针调用,应引发开发错误 EEP_E_PARAM_POINTER。⌋

8.4 回调通知

EEPROM 驱动为内部微控制器外设规范化时,属于 AUTOSAR 软件架构的最低层,因此本模块规范未识别任何回调函数。对于 SPI 外部设备,属于 ECU 抽象层,应根据 SPI Handler/Driver 规范需求提供回调通知。

[SWS_Eep_00137] ⌈ 在 Eep 模块支持 SPI 外部设备的情况下,Eep 模块应根据 SPI Handler/Driver 规范需求提供附加回调通知。⌋

8.5 调度函数

8.5.1 Eep_MainFunction

void Eep_MainFunction(void)
内容
Service ID[hex] 0x09
Description 执行 EEPROM 作业(读/写/擦/比较)处理的服务。
Available via SchM_Eep.h

[SWS_Eep_00030] ⌈应执行 EEPROM 读、写、擦除和比较作业的处理。⌋ [SWS_Eep_00031] ⌈作业启动后,Eep 用户应周期性调用 Eep_MainFunction 直到作业完成。⌋ [SWS_Eep_00032] ⌈如无待处理作业,应直接返回。⌋

硬件错误报告(SWS_Eep_00204~00207):分别报告 EEP_E_ERASE/WRITE/READ/COMPARE_FAILED 给 DEM。

超时监视(SWS_Eep_00235~00238):监视读/写/擦/比较作业的截止时间,超时时引发 EEP_E_TIMEOUT 运行时错误。

8.6 期望接口

8.6.1 强制接口

[SWS_Eep_00154] ⌈

API 函数 头文件 描述
Dem_SetEventStatus Dem.h 报告监视状态信息到 Dem
Det_ReportRuntimeError Det.h 报告运行时错误

8.6.2 可选接口

[SWS_Eep_00155] ⌈

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

8.6.3 可配置接口

[SWS_Eep_00047] ⌈如回调函数在后构建时配置,初始化数据结构 Eep_ConfigType 应包含相应函数指针。⌋

8.6.3.1 作业结束通知

[SWS_Eep_00045] ⌈作业成功完成(读/写/擦完成 OK 或比较完成且数据相等)时调用 EepJobEndNotification 定义的回调函数。⌋

void Eep_JobEndNotification(void)
8.6.3.2 作业错误通知

[SWS_Eep_00046] ⌈作业被取消或以负结果结束(读/写/擦中止或失败,比较中止或数据不相等)时调用 EepJobErrorNotification 定义的回调函数。⌋

void Eep_JobErrorNotification(void)

9 时序图

9.1 初始化

EcuM → Eep:Eep_Init(const Eep_ConfigType*)

9.2 读/写/擦/比较

NvM → Ea → Eep:Ea_WriteEep_Write → (周期 Eep_MainFunction 直至作业完成)→ Ea_JobEndNotificationNvM_JobEndNotification

  • EEPROM 状态:MEMIF_BUSY → MEMIF_IDLE
  • 作业结果:MEMIF_JOB_PENDING → MEMIF_JOB_OK

9.3 运行中作业的取消

NvM → Ea → Eep:Ea_CancelEep_Cancel(同步)→ 状态变为 MEMIF_IDLE, 结果 MEMIF_JOB_CANCELED → 立即可启动新作业。


10 配置规范

10.1 如何阅读本章

详见 SWS_BSWGeneral 第 10.1 章。

10.2 容器与配置参数

10.2.1 Eep

内容
SWS Item ECUC_Eep_00205
Module Name Eep
Module Description Eep(内部或外部 EEPROM 驱动)模块的配置。
Post-Build Variant Support true
Supported Config Variants VARIANT-POST-BUILD, VARIANT-PRE-COMPILE

包含容器:

容器名 多重性 描述
EepGeneral 1 EEPROM 驱动通用配置参数容器
EepInitConfiguration 1 EEPROM 驱动运行时配置参数容器(实现类型:Eep_ConfigType)
EepPublishedInformation 1 附加发布参数(不在 CommonPublishedInformation 容器中覆盖)

10.2.2 EepGeneral

关键参数(摘要):

参数 描述
EepDevErrorDetect 开发错误检测开关
EepVersionInfoApi 版本信息 API 启用开关
EepUseInterrupts 中断或轮询作业处理选择
EepDriverIndex 驱动索引
EepBaseAddress EEPROM 基地址
EepSize EEPROM 大小(字节)

10.2.3 EepInitConfiguration

参数 描述
EepDefaultMode 默认模式
EepFastReadBlockSize 快速模式读取块大小
EepNormalReadBlockSize 普通模式读取块大小
EepFastWriteBlockSize 快速模式写入块大小
EepNormalWriteBlockSize 普通模式写入块大小
EepJobCallCycle 作业调用周期
EepJobEndNotification 作业结束通知回调
EepJobErrorNotification 作业错误通知回调
EepEraseTime 最大擦除时间
EepWriteCycleReduction 写周期减少开关

10.2.4 EepDemEventParameterRefs

引用 DEM 事件参数,用于错误报告。

10.2.5 EepExternalDriver

外部 EEPROM 设备配置:

  • 期望硬件 Flash ID
  • 最大读访问阻塞时间

10.2.6 SPI 特定扩展

SPI 配置参数(用于外部 SPI EEPROM):

  • SPI 通道
  • 普通模式与突发模式 SPI 序列

10.3 已发布参数

EepPublishedInformation 包含:

  • EEPROM 大小
  • 已擦除 EEPROM 单元值
  • EEPROM 单元大小
  • 物理内存分段

10.4 配置示例 — 外部 SPI EEPROM 设备

详细配置示例见原文 PDF 第 10.4 章。


11 不适用需求

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


翻译说明

  • 本文档完整翻译自 AUTOSAR_SWS_EEPROMDriver v4.4.0(Document ID 021,63 页)。
  • 保留所有需求 ID(SWS_Eep_xxxxx、SRS_*_xxxxx、ECUC_Eep_xxxxx)。
  • 保留 AUTOSAR 方框符 ⌈⌋。
  • 模块缩写(Eep、Fee、Ea、NvM、MemIf、SPI、DEM、DET、EcuM 等)和 API 函数名保持英文。
  • 主要部分已完整翻译;配置参数详细描述请参考原文 PDF。