跳转至

Eep

1. 简介和功能概述

本文档描述了EEPROM驱动程序的功能和API。本规范适用于内部和外部EEPROM的驱动程序。

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

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

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

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

2. 缩略语

具有局部作用域、因此未包含在AUTOSAR术语表1中的缩略语和缩写必须出现在局部术语表中。

Data block

数据块可包含1..n个字节,并在EEPROM驱动程序的API中使用。数据块以下列形式传递给EEPROM驱动程序: • EEPROM中的地址偏移 • 指向内存位置的指针 • 长度

Data unit

EEPROM中最小的数据实体。读/写/擦除操作的数据实体可能不同。示例1:Motorola STAR12 读取:1字节 写入:2字节 擦除:4字节 示例2:外部SPI EEPROM设备 读/写/擦除:1字节

Normal mode / Burst mode

某些外部SPI EEPROM设备提供不同访问模式的可能性: • 普通模式(Normal mode):通过SPI与EEPROM设备的数据交换按字节执行。这允许与其他SPI设备(如I/O ASIC、外部看门狗等)协同使用SPI。 • 成组模式(Burst mode):通过SPI与EEPROM设备的数据交换按块执行。块大小取决于EEPROM的特性,例如64字节。由于传输的是大块数据,在成组模式下SPI会被EEPROM访问阻塞。该模式用于需要快速读取/写入数据的ECU启动和关闭阶段。

EEPROM cell

EEPROM设备中保存数据的最小物理单元。通常为1字节。

EEPROM

电可擦除可编程只读存储器(Electrically Erasable and Programmable Read Only Memory)

NVRAM

非易失性随机存取存储器(Non Volatile Random Access Memory)

NvM

NVRAM管理器的模块名称2

EcuM

ECU状态管理器的模块名称3

DEM

诊断事件管理器的模块名称4

DET

默认错误跟踪器的模块名称5

3. 相关文档

3.1. 输入文件

[1] Glossary(术语表)

AUTOSAR_FO_TR_Glossary

[2] Specification of NVRAM Manager

AUTOSAR_CP_SWS_NVRAMManager

[3] Specification of ECU State Manager

AUTOSAR_CP_SWS_ECUStateManager

[4] Specification of Diagnostic Event Manager

AUTOSAR_CP_SWS_DiagnosticEventManager

[5] Specification of Default Error Tracer

AUTOSAR_CP_SWS_DefaultErrorTracer

[6] General Specification of Basic Software Modules

AUTOSAR_CP_SWS_BSWGeneral

[7] Layered Software Architecture

AUTOSAR_CP_EXP_LayeredSoftwareArchitecture

[8] Specification of MCU Driver

AUTOSAR_CP_SWS_MCUDriver

[9] Specification of SPI Handler/Driver

AUTOSAR_CP_SWS_SPIHandlerDriver

[10] Specification of Memory Abstraction Interface

AUTOSAR_CP_SWS_MemoryAbstractionInterface

[11] Requirements on EEPROM Driver

AUTOSAR_CP_SRS_EEPROMDriver

[12] General Requirements on Basic Software Modules

AUTOSAR_CP_SRS_BSWGeneral

[13] General Requirements on SPAL

AUTOSAR_CP_SRS_SPALGeneral

3.2. 相关规范

AUTOSAR提供了基础软件模块的通用规范[6, SWS BSW General],它也适用于EEPROM驱动程序。

因此,规范SWS BSW General需被视为EEPROM驱动程序的附加和必需规范。

4. 约束和假设

4.1. 限制

EEPROM驱动程序不提供保证数据完整性的机制(例如校验和、冗余存储等)。

EEPROM写保护的设置未提供。

4.2. 汽车域的适用性

无限制。

4.3. 安全相关环境的适用性

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

  • 校验和保护
  • 使用数据前检查完整性
  • 冗余存储
  • 数据写入EEPROM后进行验证。为此可以使用EEPROM驱动程序的比较功能。

5. 对其他模块的依赖

EEPROM驱动程序有两类:

  1. 片上EEPROM的EEPROM驱动程序。

这些驱动程序是微控制器抽象层的一部分(参见7)。

  1. 外部EEPROM设备的EEPROM驱动程序。

这些驱动程序是ECU抽象层的一部分(参见7)。

外部EEPROM驱动程序的源代码应独立于微控制器平台。

内部EEPROM可能依赖于系统时钟、预分频器和PLL。因此,系统时钟的变化(例如PLL开启 - PLL关闭)也可能影响EEPROM硬件的时钟设置。模块EEPROM驱动程序不在其初始化函数中负责设置配置时钟、预分频器和PLL的寄存器。这必须由MCU模块8完成。

外部EEPROM的驱动程序依赖于所使用的片上通信处理程序(例如SPI处理程序/驱动程序9)的API和能力。

EEPROM驱动程序是内存抽象体系结构的一部分,因此某些类型依赖于内存接口(MemIf)模块10。

5.1. 文件结构

如果模块实现使用自定义的中断处理,中断服务例程应放置在Eep_Irq.c中。

6. 功能规格

6.1. 一般行为

Eep SWS应对内部和外部EEPROM均有效。

Eep SWS为EEPROM操作(读取/写入/擦除/比较)定义异步服务。

Eep模块不应缓冲作业。Eep模块一次应只接受一个作业。在作业处理期间,Eep模块不得接受其他任何作业。

注意: 在生产模式下运行时,假定Eep用户绝不会并发地发出作业;因此本需求的错误处理仅限于开发阶段,参见第6.3.2章。

Eep模块不应缓冲要读取或写入的数据。Eep模块应使用通过API传递的指针所引用的应用程序数据缓冲区。

Eep驱动程序应在内部处理数据缓冲区对齐。它不对RAM缓冲区的对齐施加任何要求(因为它们是uint8*),而应将传入的指针视为仅按字节对齐。

6.2. 错误分类

本节描述Eep模块在该基础软件的生命周期中如何管理可能发生的几个错误类别。

AUTOSAR的通用需求文档12规定,所有基础软件模块必须(按照产品生命周期)区分3种错误类型:

  • 开发错误(Development errors):这些错误应在开发阶段被检测和修复。多数情况下,这些错误是软件错误。
  • 运行时错误(Runtime errors):这些错误是可能在生产(即系列)代码中出现的软件异常,由软件实时性导致。
  • 生产错误(Production errors):这些错误是硬件错误和无法避免的软件异常,预期会出现在生产(即系列)代码中。

6.2.1. 开发错误

Eep模块中开发错误的定义:

错误类型 相关错误代码 错误值
无效的配置集选择 EEP_E_INIT_FAILED 0x10
无效的配置集选择 EEP_E_PARAM_ADDRESS 0x11
无效的配置集选择 EEP_E_PARAM_DATA 0x12
无效的配置集选择 EEP_E_PARAM_LENGTH 0x13
未初始化模块时调用了API服务 EEP_E_UNINIT 0x20
调用API服务时传入了NULL指针 EEP_E_PARAM_POINTER 0x23

6.2.2. 运行时错误

Eep模块中运行时错误的定义:

错误类型 相关错误代码 错误值
驱动程序仍然繁忙时调用了API服务 EEP_E_BUSY 0x21
超时 EEP_E_TIMEOUT 0x22

6.2.3. 瞬态故障

没有瞬态故障。

6.2.4. 生产错误

没有生产错误。

6.2.5. 扩展生产错误

6.2.5.1. EEP_E_ERASE_FAILED
错误名称 EEP_E_ERASE_FAILED
简要描述 EEPROM擦除失败(HW)
详细描述 当EEPROM擦除作业因硬件错误而失败时,Eeprom模块报告此错误。
检测条件 Fail:EEPROM擦除作业失败(参见第6.2.5.1章)。
检测条件 Pass:EEPROM擦除作业成功完成(参见第6.2.5.1章)。
次要参数 不适用
所需时间 不适用
监视频率 实现特定

当Eeprom擦除函数失败时,生产错误代码EEP_E_ERASE_FAILED应以FAILED上报。

当Eeprom擦除函数成功执行时,生产错误代码EEP_E_ERASE_FAILED应以PASSED上报。

6.2.5.2. EEP_E_WRITE_FAILED
错误名称 EEP_E_WRITE_FAILED
简要描述 EEPROM写入失败(HW)
详细描述 当EEPROM写入作业因硬件错误而失败时,Eeprom模块报告此错误。
检测条件 Fail:EEPROM写入作业失败(参见第6.2.5.2章)。
检测条件 Pass:EEPROM写入作业成功完成(参见第6.2.5.2章)。
次要参数 不适用
所需时间 不适用
监视频率 实现特定

当Eeprom写入函数失败时,生产错误代码EEP_E_WRITE_FAILED应以FAILED上报。

当Eeprom写入函数成功执行时,生产错误代码EEP_E_WRITE_FAILED应以PASSED上报。

6.2.5.3. EEP_E_READ_FAILED
错误名称 EEP_E_READ_FAILED
简要描述 EEPROM读取失败(HW)
详细描述 当EEPROM读取作业因硬件错误而失败时,Eeprom模块报告此错误。
检测条件 Fail:EEPROM读取作业失败(参见第6.2.5.3章)。
检测条件 Pass:EEPROM读取作业成功完成(参见第6.2.5.3章)。
次要参数 不适用
所需时间 不适用
监视频率 实现特定

当Eeprom读取函数失败时,生产错误代码EEP_E_READ_FAILED应以FAILED上报。

当Eeprom读取函数成功执行时,生产错误代码EEP_E_READ_FAILED应以PASSED上报。

6.2.5.4. EEP_E_COMPARE_FAILED
错误名称 EEP_E_COMPARE_FAILED
简要描述 EEPROM比较失败(HW)
详细描述 当EEPROM比较作业因硬件错误而失败时,Eeprom模块报告此错误。
检测条件 Fail:EEPROM比较作业失败(参见第6.2.5.4章)。
检测条件 Pass:EEPROM比较作业成功完成(参见第6.2.5.4章)。
次要参数 不适用
所需时间 不适用
监视频率 实现特定

当Eeprom比较函数失败时,生产错误代码EEP_E_COMPARE_FAILED应以FAILED上报。

当Eeprom比较函数成功执行时,生产错误代码EEP_E_COMPARE_FAILED应以PASSED上报。

6.3. 错误检测

详情请参阅6中的第7.3章"错误检测"(Error Detection)。

6.3.1. API参数检查

如果Eep模块的开发错误检测已启用:函数Eep_Read()、Eep_Write()、Eep_Compare()和Eep_Erase()应检查DataBufferPtr不为NULL。如果DataBufferPtr为NULL,它们应引发开发错误EEP_E_PARAM_DATA,否则(如果未启用开发错误检测)应以E_NOT_OK返回。

如果Eep模块的开发错误检测已启用:函数Eep_Read()、Eep_Write()、Eep_Compare()和Eep_Erase()应检查EepromAddress是否有效。如果EepromAddress不在有效的EEPROM地址范围内,它们应引发开发错误EEP_E_PARAM_ADDRESS,否则(如果未启用开发错误检测)应以E_NOT_OK返回。

如果Eep模块的开发错误检测已启用:函数Eep_Read()、Eep_Write()、Eep_Compare()和Eep_Erase()应检查参数Length是否在规定的最小值和最大值之间:

  • 最小值:1
  • 最大值:EepSize - EepromAddress

如果参数Length不在规定的最小值和最大值之间,它们应引发开发错误EEP_E_PARAM_LENGTH,否则(如果未启用开发错误检测)应以E_NOT_OK返回。

6.3.2. EEPROM状态检查

函数Eep_SetMode()、Eep_Read()、Eep_Write()、Eep_Compare()和Eep_Erase()应检查EEPROM状态是否为MEMIF_IDLE。如果EEPROM状态不是MEMIF_IDLE,被调用的函数应:

  • 在模块尚未初始化且Eep模块的开发错误检测已启用时,引发开发错误EEP_E_UNINIT
  • 根据EEPROM状态引发运行时错误EEP_E_BUSY
  • 以E_NOT_OK拒绝该服务(Eep_SetMode()除外,因为该服务没有返回值)。

6.3.3. EEPROM作业遇到硬件故障

当EEPROM擦除函数失败时,应上报生产错误代码EEP_E_ERASE_FAILED。

当EEPROM写入函数失败时,应上报生产错误代码EEP_E_WRITE_FAILED。

当EEPROM读取函数失败时,应上报生产错误代码EEP_E_READ_FAILED。

当EEPROM比较函数失败时,应上报生产错误代码EEP_E_COMPARE_FAILED。

6.3.4. 超时监督

当读取、写入、擦除或比较作业的超时监督失败时,应上报运行时错误代码EEP_E_TIMEOUT。

6.4. 错误通知

详情请参阅6中的第7.2章"错误分类"(Error classification)。

6.5. 作业处理——通用需求

Eep模块应可通过配置参数EepUseInterrupts(参见第9.2.2章)配置为中断控制或轮询控制的作业处理(如果EEPROM硬件支持)。

如果支持并启用了中断控制的作业处理,位于Eep_Irq.c中的外部中断服务例程应调用一个额外的作业处理函数。

提示:

函数Eep_MainFunction仍然是必需的,用于在没有硬件中断支持的情况下处理作业(例如读取和比较作业)以及用于超时监督。

如果底层EEPROM技术要求读取地址或长度信息具有一定的对齐方式,而读取或比较作业的地址和/或长度参数未正确对齐,则函数Eep_MainFunction应在内部补偿这种缺失的对齐,即函数Eep_MainFunction应提供对闪存存储器的按字节读取访问,而不受硬件施加的任何对齐限制。

仅适用于SPI EEPROM驱动程序的其他通用需求:

对于通过SPI驱动外部EEPROM的Eep模块:如果SPI访问失败,Eep模块的行为应符合第6.6章的规定。

对于通过SPI驱动外部EEPROM的Eep模块:在普通EEPROM模式下,Eep模块应使用配置为普通访问SPI EEPROM的SPI通道来访问外部EEPROM。

对于通过SPI驱动外部EEPROM的Eep模块:Eep的配置应使配置参数EepNormalReadBlockSize的值适合在普通SPI模式下可读取的字节数。

对于通过SPI驱动外部EEPROM的Eep模块:在快速EEPROM模式下,Eep模块应使用配置为成组访问SPI EEPROM的SPI通道来访问外部EEPROM。

对于通过SPI驱动外部EEPROM的Eep模块:Eep的配置应使配置参数EepFastReadBlockSize的值适合在成组SPI模式下可读取的字节数。

6.6. 读取作业的处理

Eep模块应提供两种不同的读取模式:

  • 普通模式(normal mode)
  • 快速模式(fast mode)

对于驱动外部EEPROM的Eep模块:如果外部EEPROM不支持成组模式,Eep模块应接受快速读取模式的选择,但其行为应与普通模式相同(不关心模式参数)。

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

示例:

  • EepNormalReadBlockSize = 4
  • 要读取的字节数:21
  • 所需的作业处理周期数:6
  • 产生的读取模式:4-4-4-4-4-1

在快速EEPROM模式下,Eep模块应在一个作业处理周期内读取由参数EepFastReadBlockSize指定的字节数。

示例:

  • EepFastReadBlockSize = 32
  • 要读取的字节数:110
  • 所需的作业处理周期数:4
  • 产生的读取模式:32-32-32-14

当读取作业成功完成时,Eep模块应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果已配置,Eep模块应调用配置参数EepJobEndNotification中定义的通知。

在读取作业处理期间检测到错误时,Eep模块应中止作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果已配置,Eep模块应调用配置参数EepJobErrorNotification中定义的通知。

6.7. 写入作业的处理

Eep模块在一个作业处理周期内写入(和擦除)到EEPROM的字节数不应超过EEPROM硬件所支持的数量。

对于内部EEPROM,通常每次只能写入1个数据字。某些外部EEPROM提供RAM缓冲区(例如页缓冲区),允许一步写入多个字节。

Eep模块应提供两种不同的写入模式:

  • 普通模式(normal mode)
  • 快速模式(fast mode)

对于驱动外部EEPROM的Eep模块:如果外部EEPROM不提供成组模式,Eep模块应接受快速模式的选择,但其行为应与普通模式相同(不关心模式参数)。

在普通EEPROM模式下,Eep模块应在一个作业处理周期内写入(和擦除)由参数EepNormalWriteBlockSize指定的字节数。

示例:

  • EepNormalWriteBlockSize = 1
  • 要写入的字节数:4
  • 所需的作业处理周期数:4
  • 产生的写入模式:1-1-1-1

在快速EEPROM模式下,Eep模块应在一个作业处理周期内写入(和擦除)由参数EepFastWriteBlockSize指定的字节数。

示例:

  • EepFastWriteBlockSize = 16
  • 要写入的字节数:55
  • 所需的作业处理周期数:4
  • 产生的写入模式:16-16-16-7

如果要写入EEPROM单元的值已经存在于该EEPROM单元中,且Eep模块通过配置参数EepWriteCycleReduction被配置为这样做,则Eep模块应跳过该单元的编程1。

如果EEPROM硬件未自动完成擦除,Eep模块应在写入EEPROM单元之前对其进行擦除。

如果要写入的字节数小于可擦除和/或可写数据单元的大小,Eep模块应通过执行读取-修改-写入(read - modify - write)操作来保留受影响EEPROM单元的数据。

如果给定的参数(EepromAddress和Length)与可擦除/可写数据单元不对齐,Eep模块应通过执行读取-修改-写入操作来保留受影响EEPROM单元的数据。

Eep模块在写入数据块期间应使读取-修改-写入操作的次数尽可能少。

当写入作业成功完成时,Eep模块应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果已配置,Eep模块应调用配置参数EepJobEndNotification中定义的通知。

在写入作业处理期间检测到错误时,Eep模块应中止作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果已配置,Eep模块应调用配置参数EepJobErrorNotification中定义的通知。

注意: 对写入EEPROM的数据的验证不在写入作业处理函数中进行。如果某个数据块需要验证,则应在写入作业完成后调用比较功能。这可以优化写入速度,因为数据验证(写入后回读并比较数据)只在需要的地方进行。

1 该特性不是强制的,它取决于EEPROM硬件制造商的规范。

6.8. 擦除作业的处理

Eep模块在一个作业处理周期内擦除EEPROM的字节数不应超过EEPROM硬件所支持的数量。

如果EEPROM硬件支持块擦除命令,且给定的参数(EepromAddress和Length)与可擦除块对齐,Eep模块应使用块擦除命令。

如果给定的擦除参数(EepromAddress和Length)与可擦除数据单元不对齐,Eep模块应通过使用读取-修改-写入操作来保留受影响EEPROM单元的内容。

当擦除作业成功完成时,Eep模块应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果已配置,Eep模块应调用配置参数EepJobEndNotification中定义的通知。

在擦除作业处理期间检测到错误时,Eep模块应中止作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果已配置,Eep模块应调用配置参数EepJobErrorNotification中定义的通知。

6.9. 比较作业的处理

对于比较作业的处理,以下与EEPROM模式相关的需求适用:第6.6章(两种读取模式、成组模式回退、普通/快速读取块大小)。

当比较作业成功完成时,Eep模块应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。如果已配置,Eep模块应调用配置参数EepJobEndNotification中定义的通知。

在比较作业处理期间检测到错误时,Eep模块应中止作业,将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_FAILED。如果已配置,Eep模块应调用配置参数EepJobErrorNotification中定义的通知。

当在比较作业处理期间检测到被比较的数据区域不相等时,EEPROM驱动程序应中止作业,将EEPROM状态设置为MEMIF_IDLE,将作业结果设置为MEMIF_BLOCK_INCONSISTENT。如果已配置,应调用回调函数Eep_JobErrorNotification。

仅适用于SPI EEPROM驱动程序的需求:

对于比较作业的处理,以下读取作业需求适用:普通SPI通道访问、EepNormalReadBlockSize配置、成组SPI通道访问、EepFastReadBlockSize配置(参见第6.5章)。

6.10. 版本检查

详情请参阅6中的第5.1.8章"版本检查"(Version Check)。

7. API规范

7.1. 导入的类型

本章列出了从以下模块中包含的所有类型:

Eep模块导入的数据类型的定义:

模块 头文件 导入的类型
Dem Rte_Dem_Type.h Dem_EventIdType
Dem Rte_Dem_Type.h Dem_EventStatusType
MemIf MemIf.h MemIf_JobResultType
MemIf MemIf.h MemIf_StatusType
Std Std_Types.h Std_ReturnType
Std Std_Types.h Std_VersionInfoType

7.2. 类型定义

7.2.1. Eep_ConfigType

结构类型。元素为实现特定,初始化数据结构的内容是EEPROM特定的。该类型是包含EEPROM驱动程序初始化数据的外部数据结构的类型。可通过Eep.h获得。

7.2.2. Eep_AddressType

类型,派生自uint,范围8/16/32位,大小取决于目标平台和EEPROM设备。用作从所配置的EEPROM基地址出发、访问某个特定EEPROM存储区域的地址偏移。可通过Eep.h获得。

类型Eep_AddressType对于每个EEPROM设备而言,其下限应为0。

如有必要,EEPROM模块应将设备特定的基地址加到地址类型Eep_AddressType上。

7.2.3. Eep_LengthType

类型,派生自uint,范围与Eep_AddressType相同——由于算术运算的需要,它应与Eep_AddressType是相同的类型,大小取决于目标平台和EEPROM设备。指定要读取/写入/擦除/比较的字节数。可通过Eep.h获得。

7.3. 函数定义

7.3.1. Eep_Init

说明: 服务 ID 0x00。EEPROM初始化服务。可通过Eep.h获得。本服务为同步调用,不可重入。参数 ConfigPtr(in):指向配置集的指针。参数(inout):无。参数(out):无。返回值:无。

void Eep_Init ( const Eep_ConfigType* ConfigPtr )

函数Eep_Init应使用参数ConfigPtr所引用结构中的值初始化所有与EEPROM相关的寄存器。

在完成模块初始化之后,函数Eep_Init应将EEPROM状态设置为MEMIF_IDLE,并将作业结果设置为MEMIF_JOB_OK。

函数Eep_Init应将EEPROM模式设置为所配置的默认模式。

Eep的用户不得在正在运行的操作期间调用函数Eep_Init。

7.3.2. Eep_SetMode

说明: 服务 ID 0x01。设置模式。可通过Eep.h获得。本服务为同步调用,不可重入。参数 Mode(in):MEMIF_MODE_SLOW:慢速读取访问/普通SPI访问。MEMIF_MODE_FAST:快速读取访问/SPI成组访问。参数(inout):无。参数(out):无。返回值:无。

void Eep_SetMode ( MemIf_ModeType Mode )

函数Eep_SetMode应将EEPROM操作模式设置为给定的Mode参数。

函数Eep_SetMode按照第6.3.2章的需求检查EEPROM状态。

Eep的用户不得在正在运行的操作期间调用函数Eep_SetMode。

7.3.3. Eep_Read

说明: 服务 ID 0x02。从EEPROM读取。可通过Eep.h获得。本服务为异步调用,不可重入。参数 EepromAddress(in):EEPROM中的地址偏移(将被加到EEPROM基地址上)。最小值:0,最大值:EEP_SIZE - 1。参数 Length(in):要读取的字节数。最小值:1,最大值:EEP_SIZE - EepromAddress。参数(inout):无。参数(out)DataBufferPtr:指向RAM中目标数据缓冲区的指针。返回值:Std_ReturnType,E_OK:读取命令已被接受;E_NOT_OK:读取命令未被接受。

Std_ReturnType Eep_Read (
    Eep_AddressType EepromAddress,
    uint8* DataBufferPtr,
    Eep_LengthType Length )

函数Eep_Read应复制给定的参数,启动读取作业,将EEPROM状态设置为MEMIF_BUSY,将作业结果设置为MEMIF_JOB_PENDING,然后返回。

Eep模块应在Eep模块的作业处理函数中异步执行读取作业。在作业处理期间,Eep模块应将从EepromAddress + EEPROM基地址开始、大小为Length的数据块读取到*DataBufferPtr中。

函数Eep_Read按照第6.3.1章的需求检查API参数。

函数Eep_Read按照第6.3.2章的需求检查EEPROM状态。

Eep的用户只能在Eep模块已被初始化之后调用Eep_Read。

Eep的用户不得在Eep模块作业(读取/写入/擦除/比较)正在运行期间调用函数Eep_Read。

7.3.4. Eep_Write

说明: 服务 ID 0x03。写入EEPROM。可通过Eep.h获得。本服务为异步调用,不可重入。参数 EepromAddress(in):EEPROM中的地址偏移(将被加到EEPROM基地址上)。最小值:0,最大值:EEP_SIZE - 1。该目标地址将被加到EEPROM基地址上。参数 DataBufferPtr(in):指向源数据的指针。参数 Length(in):要写入的字节数。最小值:1,最大值:EEP_SIZE - EepromAddress。参数(inout):无。参数(out):无。返回值:Std_ReturnType,E_OK:写入命令已被接受;E_NOT_OK:写入命令未被接受。

Std_ReturnType Eep_Write (
    Eep_AddressType EepromAddress,
    const uint8* DataBufferPtr,
    Eep_LengthType Length )

函数Eep_Write应复制给定的参数,启动写入作业,将EEPROM状态设置为MEMIF_BUSY,将作业结果设置为MEMIF_JOB_PENDING,然后返回。

Eep模块应在Eep模块的作业处理函数中异步执行写入作业。在作业处理期间,Eep模块应将大小为Length的数据块从*DataBufferPtr写入到EepromAddress + EEPROM基地址。

函数Eep_Write按照第6.3.1章的需求检查API参数。

函数Eep_Write按照第6.3.2章的需求检查EEPROM状态。

Eep模块的用户只能在Eep模块已被初始化之后调用函数Eep_Write。

Eep模块的用户不得在Eep模块作业(读取/写入/擦除/比较)正在运行期间调用函数Eep_Write。

7.3.5. Eep_Erase

说明: 服务 ID 0x04。擦除EEPROM区域的服务。可通过Eep.h获得。本服务为异步调用,不可重入。参数 EepromAddress(in):EEPROM中的起始地址。最小值:0,最大值:EEP_SIZE - 1。该地址将被加到EEPROM基地址上。参数 Length(in):要擦除的字节数。最小值:1,最大值:EEP_SIZE - EepromAddress。参数(inout):无。参数(out):无。返回值:Std_ReturnType,E_OK:擦除命令已被接受;E_NOT_OK:擦除命令未被接受。

Std_ReturnType Eep_Erase (
    Eep_AddressType EepromAddress,
    Eep_LengthType Length )

函数Eep_Erase应复制给定的参数,启动擦除作业,将EEPROM状态设置为MEMIF_BUSY,将作业结果设置为MEMIF_JOB_PENDING,然后返回。

Eep模块应在Eep模块的作业处理函数中异步执行擦除作业。Eep模块应擦除从EepromAddress + EEPROM基地址开始、大小为Length的EEPROM块。

函数Eep_Erase按照第6.3.1章的需求检查API参数。

函数Eep_Erase按照第6.3.2章的需求检查EEPROM状态。

Eep模块的用户只能在Eep模块已被初始化之后调用函数Eep_Erase。

Eep模块的用户不得在Eep作业(读取/写入/擦除/比较)正在运行期间调用函数Eep_Erase。

7.3.6. Eep_Compare

说明: 服务 ID 0x05。将EEPROM中的数据块与内存中的EEPROM块进行比较。可通过Eep.h获得。本服务为异步调用,不可重入。参数 EepromAddress(in):EEPROM中的地址偏移(将被加到EEPROM基地址上)。最小值:0,最大值:EEP_SIZE - 1。该目标地址将被加到EEPROM基地址上。参数 DataBufferPtr(in):指向数据缓冲区(比较数据)的指针。参数 Length(in):要比较的字节数。最小值:1,最大值:EEP_SIZE - EepromAddress。参数(inout):无。参数(out):无。返回值:Std_ReturnType,E_OK:比较命令已被接受;E_NOT_OK:比较命令未被接受。

Std_ReturnType Eep_Compare (
    Eep_AddressType EepromAddress,
    const uint8* DataBufferPtr,
    Eep_LengthType Length )

函数Eep_Compare应复制给定的参数,启动比较作业,将EEPROM状态设置为MEMIF_BUSY,将作业结果设置为MEMIF_JOB_PENDING,然后返回。

Eep模块应在Eep模块的作业处理函数中异步执行比较作业。在作业处理期间,Eep模块应将从EepromAddress + EEPROM基地址开始、大小为Length的EEPROM数据块与*DataBufferPtr处相同长度的数据块进行比较。

服务Eep_Compare按照第6.3.1章的需求检查API参数。

服务Eep_Compare按照第6.3.2章的需求检查EEPROM状态。

Eep模块的用户只能在Eep模块已被初始化之后调用函数Eep_Compare。

Eep模块的用户不得在Eep作业(读取/写入/擦除/比较)正在运行期间调用函数Eep_Compare。

7.3.7. Eep_Cancel

说明: 服务 ID 0x06。取消正在运行的作业。可通过Eep.h获得。本服务为同步调用,不可重入。参数(in):无。参数(inout):无。参数(out):无。返回值:无。

void Eep_Cancel ( void )

函数Eep_Cancel应取消正在进行的EEPROM读取、写入、擦除或比较作业。

函数Eep_Cancel应同步地中止正在运行的作业,使得在该函数返回之后上层可以立即请求新的作业。

注意: 函数Eep_Cancel的行为是同步的,但相对底层硬件而言是异步的。Eep_Cancel函数的任务(即使模块准备好接受新的作业请求)在其返回调用者时即已完成(因此是同步的);但另一方面,例如擦除作业可能仍在硬件设备中进行(因此相对硬件是异步的)。

函数Eep_Cancel应将EEP模块状态设置为MEMIF_IDLE。

如果已配置,Eep_Cancel应调用EepJobErrorNotification中定义的错误通知函数,以告知调用者作业已被取消。

如果作业结果当前为MEMIF_JOB_PENDING,函数Eep_Cancel应将作业结果设置为MEMIF_JOB_CANCELED。否则它应保持作业结果不变。

Eep模块的用户不得在Eep_MainFunction()函数运行期间调用Eep_Cancel()函数。

可以通过以下调度配置之一来实现上述要求:

  • 可能性1:NVRAM管理器和EEPROM驱动程序的作业函数被同步(例如在一个任务内按顺序调用)
  • 可能性2:调用Eep_MainFunction函数的任务不能被其他任务抢占。

注意: 使用Eep_Cancel函数取消正在进行的写入或擦除作业时,受影响EEPROM单元的状态和数据将是不确定的。

只有NVRAM管理器被授权使用Eep_Cancel函数。

在外部EEPROM设备上使用服务Eep_Cancel取消任何正在进行的作业可能使该设备进入阻塞状态。

7.3.8. Eep_GetStatus

说明: 服务 ID 0x07。返回EEPROM状态。可通过Eep.h获得。本服务为同步调用,可重入。参数(in):无。参数(inout):无。参数(out):无。返回值:MemIf_StatusType,参见文档3。

MemIf_StatusType Eep_GetStatus ( void )

函数Eep_GetStatus应同步地返回EEPROM状态。

7.3.9. Eep_GetJobResult

说明: 服务 ID 0x08。本服务返回最后一个作业的结果。可通过Eep.h获得。本服务为同步调用,可重入。参数(in):无。参数(inout):无。参数(out):无。返回值:MemIf_JobResultType,参见文档3。

MemIf_JobResultType Eep_GetJobResult ( void )

函数Eep_GetJobResult应同步地返回Eep模块所接受的最后一个作业的结果。

读取/写入/比较/擦除服务共享相同的作业状态。只能查询最后一个被接受的作业的结果。EEPROM驱动程序所接受的每个新作业都会将作业结果覆盖为MEMIF_JOB_PENDING。

7.3.10. Eep_GetVersionInfo

说明: 服务 ID 0x0a。获取本模块版本信息的服务。可通过Eep.h获得。本服务为同步调用,可重入。参数(in):无。参数(inout):无。参数(out)versioninfo:指向存储本模块版本信息的位置的指针。返回值:无。

void Eep_GetVersionInfo ( Std_VersionInfoType* versioninfo )

如果Eep模块的开发错误检测已启用,且函数Eep_GetVersionInfo被以NULL指针调用,则函数Eep_GetVersionInfo应引发开发错误EEP_E_PARAM_POINTER;否则(如果未启用开发错误检测)它应不做任何动作直接返回。

7.4. 回调通知

本章列出了Eep模块提供给下层模块的所有函数。

EEPROM驱动程序被规定用于内部微控制器外设或SPI外部设备。在前一种情况下,该模块属于AUTOSAR软件架构的最底层,因此本模块规范未标识任何回调函数。在后一种情况下,该模块属于AUTOSAR软件架构的ECU抽象层,因此本模块应根据SPI处理程序/驱动程序规范的需求提供回调通知,但这些回调无法在此规定,因为它们取决于模块的详细设计。也就是说,它们取决于将要使用的SPI作业和SPI序列的数量。

如果Eep模块支持SPI外部设备,Eep模块应根据SPI处理程序/驱动程序规范的需求提供额外的回调通知。

7.5. 调度函数

本章列出了Eep模块提供的、由基础软件模块调度程序直接调用的所有函数。

7.5.1. Eep_MainFunction

说明: 服务 ID 0x09。执行EEPROM作业(读取/写入/擦除/比较)处理的服务。可通过SchM_Eep.h获得。

void Eep_MainFunction ( void )

函数Eep_MainFunction应执行EEPROM读取、写入、擦除和比较作业的处理。

当作业已被启动后,Eep的用户应循环调用函数Eep_MainFunction,直到该作业完成。

注意: 即使当前没有挂起的作业,函数Eep_MainFunction也可以被循环调用。

配置参数EepMainFunctionPeriod(参见第9.2.2章)应用于EEPROM驱动程序的内部时序(截止期限监控、写入和擦除时序等),前提是实现和/或底层硬件需要。

如果没有挂起的作业,函数Eep_MainFunction应不做任何动作直接返回。

如果EEPROM擦除作业因硬件错误而失败,函数Eep_MainFunction应将作业结果设置为MEMIF_JOB_FAILED,并向DEM上报错误代码EEP_E_ERASE_FAILED。

如果EEPROM写入作业因硬件错误而失败,函数Eep_MainFunction应将作业结果设置为MEMIF_JOB_FAILED,并向DEM上报错误代码EEP_E_WRITE_FAILED。

如果EEPROM读取作业因硬件错误而失败,函数Eep_MainFunction应将作业结果设置为MEMIF_JOB_FAILED,并向DEM上报错误代码EEP_E_READ_FAILED。

如果EEPROM比较作业因硬件错误而失败,函数Eep_MainFunction应将作业结果设置为MEMIF_JOB_FAILED,并向DEM上报错误代码EEP_E_COMPARE_FAILED。

函数Eep_MainFunction应为当前正在运行的作业提供超时监控。即它应监督读取/比较/擦除或写入作业的截止期限。

函数Eep_MainFunction应检查所配置的最大擦除时间(参见第9.3.3章EepEraseTime)是否已被超过。如果是这种情况,函数Eep_MainFunction应引发运行时错误EEP_E_TIMEOUT。

函数Eep_MainFunction应检查预期的最大写入时间(参见下面的注意)是否已被超过。如果是这种情况,函数Eep_MainFunction应引发运行时错误EEP_E_TIMEOUT。

注意: 预期的最大写入时间取决于Eep模块的当前模式(参见第7.3.2章)、在该模式下所配置的写入字节数(分别参见第9.2.3章的EepFastWriteBlockSize和EepNormalWriteBlockSize)、EEPROM写入数据单元的大小(参见第9.3.3章)以及最后一个数据单元的最大写入时间(参见第9.3.3章)。要写入的字节数除以一个EEPROM数据单元的大小,得到一个周期内要写入的数据单元数。该数乘以一个EEPROM数据单元的最大写入时间,即为预期的最大写入时间。

函数Eep_MainFunction应检查预期的最大读取/比较时间(参见下面的注意)是否已被超过。如果是这种情况,函数Eep_MainFunction应引发运行时错误EEP_E_TIMEOUT。

注意: 目前没有针对读取/比较时序的标准化发布参数;这些参数难以标准化,因为它们主要取决于EEPROM设备是内部的还是外部的(例如通过SPI连接)。取决于所使用的确切配置,实现可以使用类似于上述写入作业的供应商特定参数。所配置的读取(和比较)字节数与Eep_MainFunction应监督的预期读取/比较时间相耦合。

7.6. 期望接口

本章列出了Eep模块需要从其他模块获得的所有函数。

7.6.1. 强制接口

本章定义了实现模块核心功能所需的所有接口。

API函数 头文件 描述
Dem_SetEventStatus Dem.h 由SW-C或BSW模块调用,以向Dem上报监控状态信息。调用Dem_SetEventStatus的BSW模块可以安全地忽略返回值。仅当({Dem/DemConfigSet/DemEventParameter/DemEventReportingType} == STANDARD_REPORTING)时此API才可用。
Det_ReportRuntimeError Det.h 用于报告运行时错误的服务。如果已配置callout,则应调用该callout。

7.6.2. 可选接口

本章定义了实现EEPROM驱动程序模块可选功能所需的所有接口。

API函数 头文件 描述
Det_ReportError Det.h 用于报告开发错误的服务。

7.6.3. 可配置接口

本章列出了目标函数可被配置的所有接口。目标函数通常是回调函数。此类接口的名称不是固定的,因为它们是可配置的。

通知回调函数通过其对应的配置参数进行配置。如果未配置回调函数,则不应有异步通知。

注意: EEP实现需要能够应对后构建配置未指定回调的用例(在不需要通知的情况下)。这可以在内部通过将初始化数据结构中的回调函数指针设置为null来实现。

7.6.3.1. 作业结束通知

当作业以肯定结果完成时,Eep模块应调用配置参数EepJobEndNotification中定义的回调函数:

  • 读取完成且成功
  • 写入完成且成功
  • 擦除完成且成功
  • 比较完成且数据块相等
服务名称 Eep_JobEndNotification
语法 void Eep_JobEndNotification ( void )
同步/异步 同步
可重入性 无关(Don't care)
参数(in) 无
参数(inout) 无
参数(out) 无
返回值 无
描述 当作业以肯定结果完成时,调用由模块用户提供的此回调函数。
可通过 Eep.h

配置参数EepJobEndNotification中定义的回调函数应可在中断级被调用。

7.6.3.2. 作业错误通知

当作业被取消或以否定结果中止时,Eep模块应调用配置参数EepJobErrorNotification中定义的回调函数:

  • 读取被中止
  • 写入被中止或失败
  • 擦除被中止或失败
  • 比较被中止或数据块不相等
服务名称 Eep_JobErrorNotification
语法 void Eep_JobErrorNotification ( void )
同步/异步 同步
可重入性 无关(Don't care)
参数(in) 无
参数(inout) 无
参数(out) 无
返回值 无
描述 当作业被取消或以否定结果完成时,调用由模块用户提供的此回调函数。
可通过 Eep.h

配置参数EepJobErrorNotification中定义的回调函数应可在中断级被调用。

8. 时序图

8.1. 初始化

Figure9_1

8.2. 读取/写入/擦除/比较

以下时序图以写入函数为例。读取、比较和擦除的时序相同,只是所处理的块大小可能不同。

Figure9_2

8.3. 正在运行作业的取消

Figure9_3

9. 配置规范

9.1. 如何阅读本章

详情请参阅6中的第10.1章"配置规范简介"(Introduction to configuration specification)。

9.2. 容器与配置参数

以下各节汇总了所有配置参数。各参数的详细含义在第6章和第7章中描述。如有必要,可以添加其他硬件/实现特定的参数。

9.2.1. Eep

SWS 条目 [ECUC_Eep_00205]
模块名称 Eep
描述 Eep(内部或外部EEPROM驱动程序)模块的配置。其多重性描述了存在的EEPROM驱动程序的数量,因此在ECUC模板中每个EEPROM驱动程序会有一个容器。当不存在EEPROM驱动程序时,多重性为0。
Post-Build 变体支持 true
支持的配置变体 VARIANT-POST-BUILD、VARIANT-PRE-COMPILE
容器名称 多重性 作用域/依赖
EepGeneral 1 EEPROM驱动程序通用配置参数的容器。这些参数始终是预编译的。
EepInitConfiguration 1 EEPROM驱动程序运行时配置参数的容器。实现类型:Eep_ConfigType。
EepPublishedInformation 1 公共发布信息(Common PublishedInformation)容器未涵盖的其他发布参数。注意:这些参数没有任何配置类设置,因为它们是发布信息。

9.2.2. EepGeneral

SWS 条目 [ECUC_Eep_00085]
容器名称 EepGeneral
父容器 Eep
描述 EEPROM驱动程序通用配置参数的容器。这些参数始终是预编译的。
配置参数 见下方参数表
SWS 条目 [ECUC_Eep_00188]
参数名称 EepDevErrorDetect
父容器 EepGeneral
描述 打开或关闭开发错误检测和通知。true:启用检测和通知。false:禁用检测和通知。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00189]
参数名称 EepDriverIndex
父容器 EepGeneral
描述 指定本模块实例的InstanceId。如果只存在一个实例,其Id应为0。
多重性 1
类型 EcucIntegerParamDef(为该参数生成符号名)
范围 0 .. 254
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: ECU
SWS 条目 [ECUC_Eep_00170]
参数名称 EepMainFunctionPeriod
父容器 EepGeneral
描述 EEPROM驱动程序主函数的调用周期时间。单位:[s]。
多重性 0..1
类型 EcucFloatParamDef
范围 ]0 .. INF[
默认值 -
Post-Build 变体多重性 false
Post-Build 变体值 false
多重性配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00163]
参数名称 EepUseInterrupts
父容器 EepGeneral
描述 启用或禁用中断控制作业处理的开关。true:中断控制作业处理已启用。false:中断控制作业处理已禁用。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local;依赖:通常仅某些内部EEPROM外设支持此功能。
SWS 条目 [ECUC_Eep_00164]
参数名称 EepVersionInfoApi
父容器 EepGeneral
描述 启用/禁用读取模块版本信息的API的预处理器开关。true:版本信息API已启用。false:版本信息API已禁用。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00165]
参数名称 EepWriteCycleReduction
父容器 EepGeneral
描述 启用或禁用写入周期缩减的开关(在覆盖之前读取并比较EEPROM值)。true:写入周期缩减已启用。false:写入周期缩减已禁用。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00206]
参数名称 EepEcucPartitionRef
父容器 EepGeneral
描述 将EEP驱动程序映射到零个或一个ECUC分区,以使驱动程序API在该分区中可用。
多重性 0..1
类型 对EcucPartition的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: ECU

无包含容器。

9.2.3. EepInitConfiguration

SWS 条目 [ECUC_Eep_00039]
容器名称 EepInitConfiguration
父容器 Eep
描述 EEPROM驱动程序运行时配置参数的容器。实现类型:Eep_ConfigType。
配置参数 见下方参数表
SWS 条目 [ECUC_Eep_00166]
参数名称 EepBaseAddress
父容器 EepInitConfiguration
描述 该参数是EEPROM设备的基地址。实现类型:Eep_AddressType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00167]
参数名称 EepDefaultMode
父容器 EepInitConfiguration
描述 该参数是初始化之后的默认EEPROM设备模式。实现类型:MemIf_ModeType。
多重性 1
类型 EcucEnumerationParamDef
范围 MEMIF_MODE_FAST:驱动程序工作在快速模式(快速读取访问/SPI成组访问);MEMIF_MODE_SLOW:驱动程序工作在慢速模式。
默认值 MEMIF_MODE_SLOW
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00168]
参数名称 EepFastReadBlockSize
父容器 EepInitConfiguration
描述 快速模式下在一个作业处理周期内读取的字节数。如果硬件不支持成组模式,该参数应设置为与EepNormalReadBlockSize相同的值。实现类型:Eep_LengthType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00169]
参数名称 EepFastWriteBlockSize
父容器 EepInitConfiguration
描述 快速模式下在一个作业处理周期内写入的字节数。如果硬件不支持成组模式,该参数应设置为与EepNormalWriteBlockSize相同的值。实现类型:Eep_LengthType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local;依赖:该参数是可选的,仅当硬件允许一步写入多个字节(例如具有成组模式能力的外部EEPROM)时可用。
SWS 条目 [ECUC_Eep_00171]
参数名称 EepJobEndNotification
父容器 EepInitConfiguration
描述 该参数是对肯定作业结果的回调函数的引用(参见EEP045)。
多重性 0..1
类型 EcucFunctionNameDef
默认值 -
正则表达式 -
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00172]
参数名称 EepJobErrorNotification
父容器 EepInitConfiguration
描述 该参数是对否定作业结果的回调函数的引用(参见EEP046)。
多重性 0..1
类型 EcucFunctionNameDef
默认值 -
正则表达式 -
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00173]
参数名称 EepNormalReadBlockSize
父容器 EepInitConfiguration
描述 普通模式下在一个作业处理周期内读取的字节数。实现类型:Eep_LengthType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00174]
参数名称 EepNormalWriteBlockSize
父容器 EepInitConfiguration
描述 普通模式下在一个作业处理周期内写入的字节数。实现类型:Eep_LengthType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local;依赖:该参数是可选的,仅当硬件允许配置时可用。
SWS 条目 [ECUC_Eep_00175]
参数名称 EepSize
父容器 EepInitConfiguration
描述 该参数是EEPROM设备的使用大小,单位为字节。实现类型:Eep_LengthType。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
容器名称 多重性 作用域/依赖
EepDemEventParameterRefs 0..1 用于引用DemEventParameter元素的容器,当相应错误发生时应通过API Dem_SetEventStatus调用这些元素。EventId取自所引用DemEventParameter的DemEventId符号值。标准化错误在该容器中提供,并可通过供应商特定的错误引用进行扩展。
EepExternalDriver 0..1 该容器仅适用于外部EEPROM驱动程序。内部EEPROM驱动程序不使用该容器中列出的参数,因此其多重性对内部驱动程序为0。

9.2.4. EepDemEventParameterRefs

SWS 条目 [ECUC_Eep_00200]
容器名称 EepDemEventParameterRefs
父容器 EepInitConfiguration
描述 用于引用DemEventParameter元素的容器,当相应错误发生时应通过API Dem_SetEventStatus调用这些元素。EventId取自所引用DemEventParameter的DemEventId符号值。标准化错误在该容器中提供,并可通过供应商特定的错误引用进行扩展。
配置参数 见下方参数表
SWS 条目 [ECUC_Eep_00204]
参数名称 EEP_E_COMPARE_FAILED
父容器 EepDemEventParameterRefs
描述 对发生错误"EEPROM比较失败(HW)"时应发出的DemEventParameter的引用。
多重性 0..1
类型 对DemEventParameter的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00201]
参数名称 EEP_E_ERASE_FAILED
父容器 EepDemEventParameterRefs
描述 对发生错误"EEPROM擦除失败(HW)"时应发出的DemEventParameter的引用。
多重性 0..1
类型 对DemEventParameter的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00203]
参数名称 EEP_E_READ_FAILED
父容器 EepDemEventParameterRefs
描述 对发生错误"EEPROM读取失败(HW)"时应发出的DemEventParameter的引用。
多重性 0..1
类型 对DemEventParameter的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00202]
参数名称 EEP_E_WRITE_FAILED
父容器 EepDemEventParameterRefs
描述 对发生错误"EEPROM写入失败(HW)"时应发出的DemEventParameter的引用。
多重性 0..1
类型 对DemEventParameter的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local

无包含容器。

9.2.5. EepExternalDriver

SWS 条目 [ECUC_Eep_00190]
容器名称 EepExternalDriver
父容器 EepInitConfiguration
描述 该容器仅适用于外部EEPROM驱动程序。内部EEPROM驱动程序不使用该容器中列出的参数,因此其多重性对内部驱动程序为0。
配置参数 见下方参数表
SWS 条目 [ECUC_Eep_00176]
参数名称 EepSpiReference
父容器 EepExternalDriver
描述 对SPI序列的引用(外部EEPROM驱动程序所需)。
多重性 1..*
类型 对SpiSequence的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local

无包含容器。

9.2.6. SPI特定扩展

如果使用外部SPI EEPROM设备,以下参数还应(根据配置方法学)位于Eep_ConfigType类型的外部数据结构中或被其引用(参见第9.2.3章)。它们应用作访问SPI处理程序/驱动程序API服务的API参数。这些参数的符号名发布在模块的描述文件中(参见第9.3.2章):

  • 所需的所有SPI通道
  • 所需的所有SPI序列
  • 所需的所有SPI作业

9.3. 发布参数

9.3.1. 基本子集

详情请参阅6中的第10.3章"发布信息"(Published Information)。

9.3.2. SPI特定扩展

如果使用外部SPI EEPROM设备,以下参数应额外发布在模块的描述文件中(参见EEP038):

  • EEPROM访问(读取、写入、擦除)所需的所有SPI通道。
  • 这些通道应被链接以构造与芯片选择处理相链接的SPI作业。这取决于具体的EEPROM设备。
  • 这些作业应被分配给SPI序列,以便被调度进行SPI传输。

所需参数的完整列表在SPI处理程序/驱动程序软件规范中规定。

9.3.3. EepPublishedInformation

SWS 条目 [ECUC_Eep_00111]
容器名称 EepPublishedInformation
父容器 Eep
描述 公共发布信息(CommonPublishedInformation)容器未涵盖的其他发布参数。注意:这些参数没有任何配置类设置,因为它们是发布信息。
配置参数 见下方参数表
SWS 条目 [ECUC_Eep_00177]
参数名称 EepAllowedWriteCycles
父容器 EepPublishedInformation
描述 特定EEPROM硬件在最坏情况条件下(例如 +90°C)规定的最大写入周期数。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00178]
参数名称 EepEraseTime
父容器 EepPublishedInformation
描述 擦除一个EEPROM数据单元的最大时间。
多重性 1
类型 EcucFloatParamDef
范围 [0 .. INF]
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00179]
参数名称 EepEraseUnitSize
父容器 EepPublishedInformation
描述 最小可擦除EEPROM数据单元的大小,单位为字节。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00180]
参数名称 EepEraseValue
父容器 EepPublishedInformation
描述 被擦除的EEPROM单元的值。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 255
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00181]
参数名称 EepMinimumAddressType
父容器 EepPublishedInformation
描述 Eep_AddressType的最小预期大小。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00182]
参数名称 EepMinimumLengthType
父容器 EepPublishedInformation
描述 Eep_LengthType的最小预期大小。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00183]
参数名称 EepReadUnitSize
父容器 EepPublishedInformation
描述 最小可读取EEPROM数据单元的大小,单位为字节。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00187]
参数名称 EepSpecifiedEraseCycles
父容器 EepPublishedInformation
描述 为EEP设备规定的擦除周期数(通常在设备数据手册中给出)。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00184]
参数名称 EepTotalSize
父容器 EepPublishedInformation
描述 EEPROM的总大小。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00185]
参数名称 EepWriteTime
父容器 EepPublishedInformation
描述 写入一个EEPROM数据单元的最大时间。
多重性 1
类型 EcucFloatParamDef
范围 [0 .. INF]
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local
SWS 条目 [ECUC_Eep_00186]
参数名称 EepWriteUnitSize
父容器 EepPublishedInformation
描述 最小可写入EEPROM数据单元的大小,单位为字节。
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 4294967295
默认值 -
Post-Build 变体值 false
值配置类 Published Information:x(All Variants)
作用域/依赖 scope: local

无包含容器。

10. 配置示例——外部SPI EEPROM设备

以下章节旨在帮助理解配置参数如何以及在何处定义和使用。针对以下用例,给出了详细的实现和配置示例:

用例:

  • 实现并配置一个通过SPI访问外部EEPROM设备的驱动程序。
  • 使用AUTOSAR SPI处理程序/驱动程序,将内部缓冲区(IB)用于命令通信,将外部缓冲区(EB)用于数据。
  • 配置并执行一次SPI读取命令。

该示例假定对用于从外部EEPROM设备读取的SPI命令采用某种固定的格式和顺序。之所以选择这些SPI API函数来操作该示例性设备,是为了演示SPI总线交互的基本原理。在为实际设备实现驱动程序时,操作顺序很可能会有所不同。需要使用和配置的SPI API函数和参数的详细选择,必须通过研究设备的数据手册并结合SPI处理程序/驱动程序规范9来推导。

请注意,SPI API函数的使用仅是示例性的;它们的确切签名和配置可能会发生变化。有效的参考始终是当前的SPI SWS。

10.1. 外部SPI EEPROM设备使用场景

本示例中假定以下场景:

外部EEPROM设备是一个SPI从设备,要实现的EEPROM驱动程序使用SPI处理程序/驱动程序模块作为SPI主设备。外部设备通过专用的芯片选择(Chip Select)线寻址,每当执行操作该设备的作业时,SPI主设备都会置位该线。

外部EEPROM使用串行操作码(op-code)处理:在通过其芯片选择线变低选中设备之后,第一个字节将通过设备的SI线传输。该字节包含8位读取操作操作码(0x03),紧接着是一个8位地址字节。完成后,SI线上的任何数据都会被忽略。指定地址处的数据(D7-D0)随后被移出到SO线上。如果只读取一个字节,则应在数据输出后将CS线驱动为高电平;否则读取序列将继续,地址自动递增,数据在连续的数据上移出。

每当EEPROM驱动程序的用户想要读取数据时,EEPROM驱动程序都会通过若干选定的SPI API调用将读取请求转发给SPI处理程序/驱动程序。为了遵循上述请求/响应行为,SPI必须被精确配置以匹配预期的通信协议。因此,一项重要的开发任务是正确配置SPI驱动程序以与外部EEPROM设备通信。基于此配置,EEPROM驱动程序的实际实现将SPI API函数与所配置的句柄ID结合使用,以将作业分配给SPI处理程序/驱动程序:

EEPROM驱动程序的实现可以使用外部和内部SPI缓冲区的组合来实现与SPI处理程序的通信:

在接收到Eep_Read()请求后,EEPROM驱动程序使用Spi_WriteIB()将EEPROM源地址写入一个SPI通道内部缓冲区。接着,它使用Spi_SetupEB()设置一个SPI外部缓冲区,指定要读取的请求字节数。然后,它调用Spi_AsyncTransmit()以启动一个SPI序列EepReadSequence,该序列被配置为与上述硬件访问协议完全匹配。

一旦SPI读取序列完成,SPI处理程序/驱动程序通过调用Spi_SeqEndNotification通知EEPROM驱动程序。此时驱动程序可以安全地通过所分配的外部缓冲区访问EEPROM数据,并进而完成EEPROM读取作业。

10.2. SPI参数的配置

为了使用SPI处理程序/驱动程序,EEPROM驱动程序实现者需要创建一个SPI配置,其中包含一组完整的SPI配置容器,使得所需的功能得到配置。

按照自上而下的视角,一个SpiSequence类型的EepReadSequence配置容器处理一次完整的读取序列。EepReadSequence继而使用一个SpiJob类型的EepReadJob来处理读取作业的细节。这包括对一个SpiExternalDevice的引用,该引用表示具有其指定芯片选择线以及逻辑电平特性(例如波特率(Baud Rate)、极性(Polarity)或DataShiftEdge)的EEPROM设备。

EepReadJob进一步分解为一个有序的SpiChannel列表,按顺序执行时它们将与外部设备执行所需的SPI总线通信:

  1. EepChCommand用于发送ReadCommand字节,使用读取操作码的默认数据常量。
  2. EepChAddress利用内部缓冲区发送设备读取地址。
  3. EepChReadData用于将请求的EEPROM数据读取到外部(对SPI而言)提供的缓冲区中。

大致而言,为EEPROM读取命令配置SPI模块的工作流程包含以下步骤:

  1. 在Spi的EcuConfiguration中,创建一个SpiDriver类型的容器EepDriver来表示外部EEPROM驱动程序。它将保存在以下步骤中创建的SpiExternalDevice、SpiChannel、SpiJob和SpiSequence类型的子容器。
  2. 在设备数据手册中查找外部设备的SPI特性,并相应地建立一个SpiExternalDevice类型的容器EepDevice。在EepDevice中指定要使用的芯片选择线。
  3. 在设备数据手册中查找SPI读取命令序列的细节。
  4. 在EepDriver中,为传输读取命令操作码、EEPROM源地址以及接收设备响应请求而传输的数据分别定义一个SpiChannel,例如:
  5. EepChCommand
  6. EepChAddress
  7. EepChReadData
  8. 基于设备数据手册中描述的通信序列,为每个通道定义SPI通道属性。特别地,配置缓冲区,即EepChAddress使用内部缓冲区,EepChReadData使用外部缓冲区。对于固定的读取命令操作码,可以使用SpiDefaultData。
  9. 定义SpiJob类型的EepReadJob并将其设置为在EepDevice上工作。指定为执行读取作业而要执行的SpiJob的有序列表。在本示例中,该作业由通道列表EepChCommand、EepChAddress、EepChReadData组成。
  10. 定义SpiSequence类型的EepReadSequence,其中包含执行所需功能所需的SpiJob列表。在本示例中,EepReadSequence只包含一个作业EepReadJob。填入要由EEPROM驱动程序提供的回调函数符号,例如Eep_ReadSequenceEndNotification。
  11. 根据SPI SWS,将所有为EEPROM驱动程序中的SPI使用而定义的属性发布为XML描述文件。

10.3. SPI配置数据的生成

作为上述SPI配置的一部分,每个SpiSequence、SpiJob和SpiChannel都被分配了一个句柄ID。基于该XML文件,将生成一个SPI包含文件,用于发布该信息。

#define Spi_EepReadSequence 10
#define Spi_EepReadJob 20
#define Spi_EepChCommand 31
#define Spi_EepChAddress 32
#define Spi_EepChReadData 33

10.4. SPI API的使用

在接收到Eep_Read()请求后,EEPROM驱动程序首先需要将执行读取命令所需的信息传输给SPI处理程序/驱动程序。它使用Spi_WriteIB()函数将设备读取地址设置到分配给EepChAddress通道的内部缓冲区中:

Spi_WriteIB(Spi_EepChAddress, &EepromAddress);

接着,为读取EEPROM设备数据设置外部缓冲区:

Spi_SetupEB(Spi_EepChReadData, NULL, buf_data, length);

最后,通过调用Spi_AsyncTransmit启动读取序列:

Spi_AsyncTransmit(Spi_EepReadSequence);

在启动传输之后,Eep_Read()返回。

传输的其余部分由SPI处理程序/驱动程序自主处理。一旦SPI序列完成,SPI处理程序将使用回调Spi_SeqEndNotification通知EEPROM驱动程序。EEPROM驱动程序主函数应确保序列已成功完成,并进而通过发出EepJobEndNotification相应地完成Eep_Read()请求;或者在接收到错误时触发EepJobErrorNotification并向DEM上报EEP_E_READ_FAILED生产错误。

B. AUTOSAR 可追溯项变更历史

B.1. 根据 AUTOSAR 发布版本 R23-11 的本数字化文档可追溯项历史

B.1.1. R23-11 中新增的规范项

表B.1:R23-11 中新增的规范项(Added Specification Items in R23-11)

编号 标题
[SWS_Eep_00247]

B.1.2. R23-11 中变更的规范项

表B.2:R23-11 中变更的规范项(Changed Specification Items in R23-11)

编号 标题
[SWS_Eep_00138] Definition of imported datatypes of module Eep
[SWS_Eep_00145] Definition of API function Eep_Read
[SWS_Eep_00146] Definition of API function Eep_Write
[SWS_Eep_00147] Definition of API function Eep_Erase
[SWS_Eep_00148] Definition of API function Eep_Compare
[SWS_Eep_00150] Definition of API function Eep_GetStatus
[SWS_Eep_00151] Definition of API function Eep_GetJobResult
[SWS_Eep_00154] Definition of mandatory interfaces in module Eep
[SWS_Eep_00155] Definition of optional interfaces in module Eep
[SWS_Eep_00225] Definition of datatype Eep_ConfigType
[SWS_Eep_00226] Definition of datatype Eep_AddressType
[SWS_Eep_00227] Definition of datatype Eep_LengthType
[SWS_Eep_00242]
[SWS_Eep_00244]

B.1.3. R23-11 中删除的规范项

无。