AUTOSAR_SWS_LINTransceiverDriver
Specification of LIN Transceiver Driver
简介和功能概述
本规范规定了 LIN 收发器驱动程序的功能、API 和配置。它负责对 ECU 上的 LIN 收发器硬件进行处理。
LIN 收发器是一种硬件设备。它是 LIN 控制器和物理 LIN 总线之间的接口。一方面,LIN 控制器的传输(发送)数据流被转换为物理 LIN 总线上的信号。另一方面,物理 LIN 总线上的数据流被转换为 LIN 控制器的输入信号。LIN 控制器通常被实现在微控制器中。
大多数 LIN 收发器支持通过总线进行电源控制和唤醒。市面上有许多不同的唤醒/休眠和电源控制机制。
此外,还有所谓的系统基础芯片 (SBC) 可供选择。除了 LIN 收发器的功能外,这些设备还提供其他功能,例如电气故障检测(例如,接地 (GND) 短路)、电源控制、高级看门狗、LIN 收发器、SPI 等。
LIN 收发器驱动程序的目标
本文档的目标是指定适用于大多数当前 LIN 收发器硬件实现的接口和行为。
[SWS_LinTrcv_00042]
[SRS_BSW_00162]
- LIN 收发器驱动程序抽象了被应用的 LIN 收发器硬件,并涵盖了与硬件无关的对上层进行调用的接口。它还通过 MCAL 层的 API 来访问 LIN 收发器硬件,从而在 ECU 布局中实现抽象。
未涵盖(明确地)的 LIN 收发器功能
一些 LIN 收发器提供额外的功能,例如 ECU 自检或被用于诊断的错误检测功能。
AUTOSAR 并未对 ECU 自检和错误检测功能进行定义,通常情况下,此类功能将会锁定大多数当前被使用的收发器硬件芯片。因此,“接地偏移检测”、“选择性唤醒”、“斜率控制”等功能均不受支持。
首字母缩略词、缩写和词汇表
相关文档
AUTOSAR 的交付文档
[1] List of Basic Software Modules
- AUTOSAR_TR_BSWModuleList
[2] Layered Software Architecture
- AUTOSAR_EXP_LayeredSoftwareArchitecture
[3] General Requirements on Basic Software Modules
- AUTOSAR_SRS_BSWGeneral
[4] Requirements on LIN
- AUTOSAR_SRS_LIN
[5] Specification of ECU Configuration
- AUTOSAR_TPS_ECUConfiguration
[6] General Specification of Basic Software Modules
- AUTOSAR_SWS_BSWGeneral
相关标准及规范
[7] Specification of LIN Driver
- AUTOSAR_SWS_LINDriver
[8] Specification of LIN Interface
- AUTOSAR_SWS_LINInterface
[9] Specification of ECU State Manager
- AUTOSAR_SWS_ECUStateManager
[10] Specification of Standard Types
- AUTOSAR_SWS_StandardTypes
[11] Specification of Communication Stack Types
- AUTOSAR_SWS_CommunicationStackTypes
[12] Basic Software Module Description Template
- AUTOSAR_TPS_BSWModuleDescriptionTemplate
相关规范
AUTOSAR 提供了关于基础软件模块 [6] 的通用规范,该规范也适用于 LIN 收发器驱动程序。
因此,[6] 应被视为 LIN 收发器驱动程序的附加规范和必需规范。
约束和假设
限制
底层驱动程序(例如 DIO 或 SPI)所使用的 API 必须是同步的。不支持同步行为的底层驱动程序的实现不能与 LIN 收发器驱动程序一起被使用。
对于汽车领域的适用性
该规范可能适用于所有使用 LIN 的汽车领域。
对其他模块的依赖
LIN 收发器驱动程序的实现的命名约定
[SWS_LinTrcv_00070]
[SRS_BSW_00347]
- 如果在一个 ECU 中使用了不同的 LIN 收发器硬件实现,则必须修改不同的 LIN 收发器驱动程序的函数名称,以确保不会生成两个具有相同名称的函数。这些名称可以通过供应商 ID 或类型 ID 进行扩展。
代码文件结构
详细内容请参考 [6] 中的第 5.1.6 节“代码文件结构”。
头文件结构
[SWS_LinTrcv_00067]
[SRS_BSW_00301]
[SRS_BSW_00409]
- 头文件结构如下: 如果启用了模块 LinTrcv 的开发错误检测,则 LinTrcv.c 应包含 Det.h(被用于上报开发错误)。 LinTrcv.c 应包含 Dio.h(被用于对 DIO 的 API 进行访问,以访问 LIN 收发器的引脚)。 LinTrcv.c 应包含 Icu.h(被用于对 ICU 的 API 进行访问,以处理 LIN 收发器的硬件中断)。 LinTrcv.c 应包含 Spi.h(被用于对通过 SPI 驱动程序控制的 LIN 收发器硬件进行控制)。 LinTrcv.c 应包含 Tm.h(被用于对 LIN 收发器的模式切换的目标模式(内部状态)进行等待)。
需求可追溯性
LIN 收发器驱动程序的运行模式
[SWS_LinTrcv_00055]
[SRS_Lin_01566]
[SRS_Lin_01524]
[SRS_Can_01098]
[SRS_Can_01099]
[SRS_Can_01100]
- LIN 收发器驱动程序的运行模式如以下状态图所示。
该图背后的主要思想是在一个通用模型视图中对大多数可用的 LIN 收发器进行支持。根据 LIN 收发器硬件的不同,该模型可能比给定的 LIN 收发器硬件所需的模式(内部状态)多一至两个,但这将明确地使 ComM 和 EcuM 与给定的 LIN 收发器硬件分离。
提示:
有几个可选接口可能不被当前 LIN 收发器硬件需要。例如,LINTRCV_TRCV_MODE_STANDBY 模式可能只是硬件内部模式切换操作中的中间模式(内部状态)。尤其是在使用“禁用引脚(Inhibit Pin)”功能控制 uC 时,仅需要关注 LINTRCV_TRCV_MODE_SLEEP 和 LINTRCV_TRCV_MODE_NORMAL。
LIN 收发器硬件的运行模式
LIN 收发器硬件可能比软件支持更多的模式切换。本章将解释依赖关系和推荐的实现的行为。
LIN 收发器硬件的模式(内部状态)与 LIN 收发器驱动程序的模式(内部状态)的对应关系由具体实现决定。具体实现必须确保其包含本规范所述的 LIN 收发器驱动程序的全部功能。
LIN 收发器的唤醒类型
有四种不同的场景,通称为唤醒:
- MCU 未上电,ECU 的部件(包括 LIN 收发器硬件)已上电。此处假设 LIN 收发器硬件处于 LINTRCV_TRCV_MODE_SLEEP 模式。LIN 收发器硬件检测到 LIN 总线上的唤醒事件。LIN 收发器硬件导致 MCU 上电(例如,通过禁用引脚(Inhibit Pin))。对于 AUTOSAR 而言,这被视为冷启动,而非唤醒。
- MCU 处于低功耗模式,ECU 的部件(包括 LIN 收发器硬件)已上电。根据硬件实现,此处假设 LIN 收发器硬件处于 LINTRCV_TRCV_MODE_STANDBY 或 LINTRCV_TRCV_MODE_SLEEP 模式。LIN 收发器硬件检测到 LIN 总线上的唤醒事件。LIN 收发器硬件通知 MCU 关于唤醒事件。对于 AUTOSAR 而言,这被视为 LIN 通道唤醒及 MCU 唤醒。
- MCU 处于全功率模式,ECU 的部件(包括 LIN 收发器硬件)已上电。根据硬件实现,此处假设 LIN 收发器硬件处于 LINTRCV_TRCV_MODE_STANDBY 或 LINTRCV_TRCV_MODE_SLEEP 模式。LIN 收发器硬件检测到 LIN 总线上的唤醒事件。LIN 收发器硬件通知 MCU 关于唤醒事件或周期性轮询唤醒事件。对于 AUTOSAR 而言,这被视为 LIN 通道唤醒。
- MCU 处于全功率模式,ECU 的部件(包括 LIN 收发器硬件)已上电。根据硬件实现,此处假设 LIN 收发器硬件处于 LINTRCV_TRCV_MODE_STANDBY 或 LINTRCV_TRCV_MODE_SLEEP 模式。MCU 将 LIN 收发器硬件设置为 LINTRCV_TRCV_MODE_NORMAL 模式,并唤醒 LIN 通道。对于 AUTOSAR 而言,这被视为 LIN 通道内部唤醒(通过 MCU)。
LIN 收发器的唤醒模式
[SWS_LinTrcv_00066]
[SRS_Lin_01514]
[SRS_Lin_01563]
- LIN 收发器驱动程序应支持唤醒通知,因此 LIN 收发器驱动程序包含 2 种唤醒模式:上层发起的内部唤醒或 LIN 通道发起的外部唤醒。
内部唤醒
- 内部唤醒由上层发起,例如,对 LinTrcv_Init 或 LinTrcv_SetOpMode 进行调用。
外部唤醒
- LIN 收发器驱动程序检测到唤醒事件,通过对 LinTrcv_CheckWakeup 进行调用将唤醒事件转发至上层,该 API 必须由 LinIf 调用。
提示:
LIN 收发器驱动程序不支持通过 ISR 唤醒,其只能通过 ICU 唤醒。
[SWS_LinTrcv_00074]
[SRS_Lin_01580]
- 应通过对参数 LinTrcvWakeUpSupport 进行配置选择唤醒模式。
[SWS_LinTrcv_00075]
[SRS_Lin_01580]
- 应通过对参数 LinTrcvWakeupByBusUsed 进行配置单独地启用或禁用每个 LIN 收发器的通道的唤醒功能。
[SWS_LinTrcv_00161]
[ ]
- LIN 收发器驱动程序应通过对 ICU 驱动程序提供的以下 API 进行调用启用或禁用唤醒事件通知:
- Icu_EnableNotification
- Icu_DisableNotification
[SWS_LinTrcv_00162]
[ ]
- 当 LIN 收发器的模式被切换为 LINTRCV_TRCV_MODE_STANDBY 时,LIN 收发器驱动程序应启用 ICU 通道。
[SWS_LinTrcv_00163]
[ ]
- 当 LIN 收发器的模式被切换为 LINTRCV_TRCV_MODE_NORMAL 时,LIN 收发器驱动程序应禁用 ICU 通道。
原因:
LIN 收发器驱动程序应避免丢失唤醒事件。
错误分类
开发错误
[SWS_LinTrcv_00050]
[SRS_BSW_00327]
[SRS_BSW_00385]
[SRS_BSW_00386]
驱动程序初始化的先决条件
[SWS_LinTrcv_00099]
[ ]
- LIN 收发器驱动程序可能通过 DIO 或 SPI 驱动程序控制 LIN 收发器硬件。因此,在 LIN 收发器驱动程序被初始化之前这些驱动程序应被初始化。
LIN 收发器驱动程序可能对初始化序列及对 LIN 收发器硬件的访问有时序上的要求,在这些过程中被使用的底层驱动程序必须满足这些要求。
时序上的要求可能是:对 LIN 收发器驱动程序的初始化必须在上电后被尽早地执行,以便能够及时地从 LIN 收发器硬件中读取所有必要的信息,以供 ECU 中的所有其他用户使用。所使用的底层服务的运行时间应非常短且对服务的调用应为同步的,以确保 LIN 收发器驱动程序符合其访问的 LIN 收发器硬件在时序上的要求。LIN 收发器驱动程序的运行时间可能会被延长,因为对某些硬件的操作可能包含在指定的时间(例如,50μs)内将某个引脚驱动为高电平或低电平,然后将硬件的模式(内部状态)切换为指定的模式(内部状态)(例如,休眠状态)。
实例概念
[SWS_LinTrcv_00016]
[SRS_BSW_00347]
[SRS_BSW_00413]
- 对于每种 LIN 收发器硬件类型,ECU 都有一个 LIN 收发器驱动程序实例。每个实例将服务于所有相同类型的 LIN 收发器硬件。
等待状态
为了切换运行模式,在 LIN 收发器硬件的模式(内部状态)切换操作完成前可能必须等待。
[SWS_LinTrcv_00171]
[ ]
- LIN 收发器驱动程序应通过对 Tm_BusyWait1us16bit 进行调用实现等待(在 LIN 收发器硬件的模式(内部状态)切换操作完成前)操作。
API 规范
导入的类型
[SWS_LinTrcv_91001]
[ ]
类型定义
LinTrcv_ConfigType
[SWS_LinTrcv_00172]
[SRS_BSW_00414]
LinTrcv_TrcvModeType
[SWS_LinTrcv_00168]
[ ]
LinTrcv_TrcvWakeupModeType
[SWS_LinTrcv_00169]
[ ]
LinTrcv_TrcvWakeupReasonType
[SWS_LinTrcv_00170]
[ ]
函数定义
LinTrcv_Init
[SWS_LinTrcv_00001]
[SRS_BSW_00310]
[SRS_BSW_00358]
[SRS_BSW_00414]
[SRS_BSW_00101]
[SRS_Can_01096]
[SRS_Can_01097]
[SWS_LinTrcv_00173]
[SRS_BSW_00414]
- 参数 ConfigPtr 应始终为 NULL。
参数 ConfigPtr 当前未被使用,因此应被设置为 NULL。
[SWS_LinTrcv_00119]
[ ]
- 函数 LinTrcv_Init 应将 LIN 收发器硬件的模式(内部状态)设置为 LINTRCV_TRCV_MODE_SLEEP。
警告:
复位(例如,上电)后的初始化序列对于 LIN 收发器驱动程序来说至关重要。该驱动程序将使用 SPAL 功能 (DIO) 对 LIN 收发器硬件进行访问。因此,所有必要的驱动程序(MCAL)必须在此之前被初始化。
LinTrcv_SetOpMode
[SWS_LinTrcv_00002]
[SRS_BSW_00310]
[SRS_BSW_00357]
[SRS_BSW_00369]
[SRS_BSW_00406]
[SRS_Lin_01566]
[SRS_Lin_01524]
[SRS_Can_01097]
[SRS_Can_01098]
[SRS_Can_01099]
[SRS_Can_01100]
[SWS_LinTrcv_00108]
[ ]
- 函数 LinTrcv_SetOpMode 将通道 LinNetwork 的模式(内部状态)切换为参数 OpMode 的值,该值可以为 LINTRCV_TRCV_MODE_NORMAL、LINTRCV_TRCV_MODE_STANDBY 或 LINTRCV_TRCV_MODE_SLEEP。
[SWS_LinTrcv_00109]
[ ]
- 如果满足以下条件之一,函数 LinTrcv_SetOpMode 应将通道 LinNetwork 的模式(内部状态)切换为 LINTRCV_TRCV_MODE_STANDBY:
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_SLEEP,并且可以从该模式被切换至 LINTRCV_TRCV_MODE_STANDBY。
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_NORMAL,并且可以从该模式被切换至 LINTRCV_TRCV_MODE_STANDBY。
[SWS_LinTrcv_00110]
[ ]
- 如果满足以下条件之一,函数 LinTrcv_SetOpMode 应将通道 LinNetwork 的模式(内部状态)切换为 LINTRCV_TRCV_MODE_SLEEP:
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_NORMAL。
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_STANDBY,并且可以从该模式被切换至 LINTRCV_TRCV_MODE_SLEEP。
[SWS_LinTrcv_00147]
[ ]
- 如果满足以下条件之一,函数 LinTrcv_SetOpMode 应将通道 LinNetwork 的模式(内部状态)切换为 LINTRCV_TRCV_MODE_NORMAL:
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_SLEEP。
- 通道 LinNetwork 处于 LINTRCV_TRCV_MODE_STANDBY,并且可以从该模式被切换至 LINTRCV_TRCV_MODE_NORMAL。
[SWS_LinTrcv_00111]
[ ]
- 对于每个 LIN 收发器而言,函数 LinTrcv_SetOpMode 的参数都是适用的,无论参数 OpMode 的值是否被 LIN 收发器硬件支持。对于 LIN 总线而言,这是为了简化 LinIf 模块。
[SWS_LinTrcv_00112]
[ ]
- 如果模式切换请求不被 LIN 收发器硬件支持,则函数 LinTrcv_SetOpMode 应返回 E_NOT_OK。
[SWS_LinTrcv_00113]
[ ]
- 如果无法访问 LIN 收发器硬件或在访问过程中出现错误,则函数 LinTrcv_SetOpMode 应返回 E_NOT_OK。
[SWS_LinTrcv_00114]
[ ]
- 如果启用了开发错误检测:如果对函数 LinTrcv_SetOpMode 进行调用(参数 OpMode 的值为 LINTRCV_TRCV_MODE_STANDBY),且通道 LinNetwork 处于 LINTRCV_TRCV_MODE_SLEEP,及不支持从 LINTRCV_TRCV_MODE_SLEEP 被切换至 LINTRCV_TRCV_MODE_STANDBY,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_INVALID_TRCV_OPMODE。
[SWS_LinTrcv_00148]
[ ]
- 如果启用了开发错误检测:如果对函数 LinTrcv_SetOpMode 进行调用(参数 OpMode 的值为 LINTRCV_TRCV_MODE_STANDBY),且通道 LinNetwork 处于 LINTRCV_TRCV_MODE_NORMAL,及不支持从 LINTRCV_TRCV_MODE_NORMAL 被切换至 LINTRCV_TRCV_MODE_STANDBY,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_INVALID_TRCV_OPMODE。
[SWS_LinTrcv_00115]
[ ]
- 如果启用了开发错误检测:如果对函数 LinTrcv_SetOpMode 进行调用(参数 OpMode 的值为 LINTRCV_TRCV_MODE_SLEEP),且通道 LinNetwork 未处于 LINTRCV_TRCV_MODE_NORMAL,及不支持从 LINTRCV_TRCV_MODE_STANDBY 被切换至 LINTRCV_TRCV_MODE_SLEEP,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_TRCV_NOT_NORMAL。
[SWS_LinTrcv_00149]
[ ]
- 如果启用了开发错误检测:如果对函数 LinTrcv_SetOpMode 进行调用(参数 OpMode 的值为 LINTRCV_TRCV_MODE_NORMAL),且通道 LinNetwork 未处于 LINTRCV_TRCV_MODE_SLEEP,及不支持从 LINTRCV_TRCV_MODE_STANDBY 被切换至 LINTRCV_TRCV_MODE_NORMAL,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_TRCV_NOT_SLEEP。
[SWS_LinTrcv_00116]
[ ]
- 如果启用了开发错误检测:如果在 LIN 收发器驱动程序被初始化之前,对 LinTrcv_SetOpMode 进行调用,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_UNINIT。
[SWS_LinTrcv_00117]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 的值为无效值,则函数 LinTrcv_SetOpMode 应上报开发错误 LINTRCV_E_INVALID_LIN_NETWORK。
[SWS_LinTrcv_00157]
[ ]
- 参数 OpMode 的值与当前的模式相同是被允许的且不应引发错误(即使启用了开发错误检测)。
LinTrcv_GetOpMode
[SWS_LinTrcv_00005]
[SRS_BSW_00310]
[SRS_BSW_00369]
[SRS_BSW_00377]
[SRS_Can_01097]
[SRS_Can_01101]
[SWS_LinTrcv_00121]
[ ]
- 函数 LinTrcv_GetOpMode 应通过参数 OpMode 返回 LIN 收发器驱动程序的当前模式(内部状态)。
[SWS_LinTrcv_00122]
[ ]
- 如果无法访问 LIN 收发器硬件或在访问过程中出现错误,则函数 LinTrcv_GetOpMode 应返回 E_NOT_OK。
[SWS_LinTrcv_00123]
[ ]
- 如果启用了开发错误检测:如果在 LIN 收发器驱动程序被初始化之前,对 LinTrcv_GetOpMode 进行调用,则函数 LinTrcv_GetOpMode 应上报开发错误 LINTRCV_E_UNINIT。
[SWS_LinTrcv_00124]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 的值为无效值,则函数 LinTrcv_GetOpMode 应上报开发错误 LINTRCV_E_INVALID_LIN_NETWORK。
[SWS_LinTrcv_00125]
[ ]
- 如果启用了开发错误检测:如果参数 OpMode 的值为 NULL,则函数 LinTrcv_GetOpMode 应上报开发错误 LINTRCV_E_PARAM_POINTER。
配置:
支持的总线的数量应在配置阶段被静态地设置。
LinTrcv_GetBusWuReason
[SWS_LinTrcv_00007]
[SRS_BSW_00310]
[SRS_BSW_00369]
[SRS_BSW_00377]
[SRS_BSW_00406]
[SRS_Can_01097]
[SRS_Can_01103]
[SWS_LinTrcv_00126]
[ ]
- 函数 LinTrcv_GetBusWuReason 应通过参数 Reason 返回 LIN 收发器硬件检测到的唤醒原因。
[SWS_LinTrcv_00127]
[ ]
- 如果无法访问 LIN 收发器硬件或在访问过程中出现错误,则函数 LinTrcv_GetBusWuReason 应返回 E_NOT_OK。
[SWS_LinTrcv_00128]
[ ]
- 如果启用了开发错误检测:如果在 LIN 收发器驱动程序被初始化之前,对 LinTrcv_GetBusWuReason 进行调用,则函数 LinTrcv_GetBusWuReason 应上报开发错误 LINTRCV_E_UNINIT。
[SWS_LinTrcv_00129]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 的值为无效值,则函数 LinTrcv_GetBusWuReason 应上报开发错误 LINTRCV_E_INVALID_LIN_NETWORK。
[SWS_LinTrcv_00130]
[ ]
- 如果启用了开发错误检测:如果参数 Reason 的值为 NULL,则函数 LinTrcv_GetBusWuReason 应上报开发错误 LINTRCV_E_PARAM_POINTER。
配置:
支持的总线的数量应在配置阶段被静态地设置。
警告:
请注意,如果存在多个总线,则每个总线可能会报告不同的唤醒原因。例如,ECU 中的某个 LIN 收发器硬件被总线唤醒,另一个 LIN 收发器硬件则被内部唤醒。在 LIN 收发器驱动程序中每个 LIN 总线相互独立,且不会在其内部对唤醒原因及序列进行优先级排序。例如,一个 LIN 收发器硬件控制上电或下电,而另一个 LIN 收发器硬件只是被动上电或下电。
LinTrcv_GetVersionInfo
[SWS_LinTrcv_00008]
[SRS_BSW_00310]
[SRS_BSW_00369]
[SRS_BSW_00406]
[SRS_BSW_00407]
[SWS_LinTrcv_00131]
[ ]
- 函数 LinTrcv_GetVersionInfo 应返回 LIN 收发器驱动程序的版本信息。版本信息包含在“AUTOSAR_SWS_StandardTypes”中的 Std_VersionInfoType 中被定义的所有数据。
[SWS_LinTrcv_00134]
[ ]
- 如果启用了开发错误检测:如果参数 versionInfo 的值为 NULL,则函数 LinTrcv_GetVersionInfo 应上报开发错误 LINTRCV_E_PARAM_POINTER。
LinTrcv_CheckWakeup
[SWS_LinTrcv_00012]
[SRS_BSW_00310]
[SRS_BSW_00369]
[SRS_BSW_00375]
[SRS_BSW_00406]
[SRS_Can_01097]
[SWS_LinTrcv_00144]
[ ]
- 如果启用了开发错误检测:如果在 LIN 收发器驱动程序被初始化之前,对 LinTrcv_CheckWakeup 进行调用,则函数 LinTrcv_CheckWakeup 应上报开发错误 LINTRCV_E_UNINIT。
[SWS_LinTrcv_00145]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 的值为无效值,则函数 LinTrcv_CheckWakeup 应上报开发错误 LINTRCV_E_INVALID_LIN_NETWORK。
[SWS_LinTrcv_00166]
[ ]
- 函数 LinTrcv_CheckWakeup 应评估参数 LinNetwork 寻址的 LIN 网络上的唤醒事件。当检测到唤醒事件(例如,LIN 总线上的显性状态或唤醒引脚的下降沿)时,LinTrcv_CheckWakeup 函数应立即通过对 EcuM_SetWakeupEvent 进行调用通知 EcuM 模块,并通过对 LinIf_WakeupConfirmation 进行调用通知 LinIf 模块。
[SWS_LinTrcv_00167]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 寻址的 LIN 网络未处于 LINTRCV_TRCV_MODE_SLEEP,则函数 LinTrcv_CheckWakeup 应上报开发错误 LINTRCV_E_TRCV_NOT_SLEEP。
配置:
参见参数 LinTrcvWakeUpSupport。
LinTrcv_SetWakeupMode
[SWS_LinTrcv_00009]
[ ]
[SWS_LinTrcv_00135]
[ ]
- 如果对函数 LinTrcv_SetWakeupMode 进行调用(参数 TrcvWakeupMode 的值为 LINTRCV_WUMODE_ENABLE),且在参数 LinNetwork 寻址的 LIN 网络上存在唤醒事件,则 LIN 收发器驱动程序应在 LinTrcv_SetWakeupMode 的上下文中或在对函数 LinTrcv_SetWakeupMode 的调用结束后立即进行通知(取决于具体实现)。
[SWS_LinTrcv_00136]
[ ]
- 如果对函数 LinTrcv_SetWakeupMode 进行调用(参数 TrcvWakeupMode 的值为 LINTRCV_WUMODE_DISABLE),则将禁用通知其他模块关于参数 LinNetwork 寻址的 LIN 网络上的唤醒事件。LIN 收发器硬件及与 LIN 收发器硬件进行通信的底层驱动程序应对唤醒事件进行存储,以便在唤醒通知被启用时通知其他模块关于此唤醒事件。
[SWS_LinTrcv_00137]
[ ]
- 如果对函数 LinTrcv_SetWakeupMode 进行调用(参数 TrcvWakeupMode 的值为 LINTRCV_WUMODE_CLEAR),则将清除参数 LinNetwork 寻址的 LIN 网络上的唤醒事件。必须在唤醒通知被禁用时对唤醒事件进行清除,以清除所有被存储的唤醒事件。
[SWS_LinTrcv_00138]
[ ]
- 如果无法访问 LIN 收发器硬件或在访问过程中出现错误,则函数 LinTrcv_SetWakeupMode 应返回 E_NOT_OK。
[SWS_LinTrcv_00139]
[ ]
- 如果启用了开发错误检测:如果在 LIN 收发器驱动程序被初始化之前,对 LinTrcv_SetWakeupMode 进行调用,则函数 LinTrcv_SetWakeupMode 应上报开发错误 LINTRCV_E_UNINIT。
[SWS_LinTrcv_00140]
[ ]
- 如果启用了开发错误检测:如果参数 LinNetwork 的值为无效值,则函数 LinTrcv_SetWakeupMode 应上报开发错误 LINTRCV_E_INVALID_LIN_NETWORK。
预期接口
本章列出了 LIN 收发器驱动程序所需的由其他模块提供的所有函数。
强制接口
LIN 收发器驱动程序需要以下接口以实现其核心功能。
[SWS_LinTrcv_91002]
[ ]
可选接口
LIN 收发器驱动程序需要以下接口以实现其可选功能。
[SWS_LinTrcv_91003]
[ ]
[SWS_LinTrcv_00165]
[ ]
- 仅当参数 LinTrcvIcuChannelRef 被配置了有效的引用时,LIN 收发器驱动程序才应启用/禁用 ICU 通道。
配置规范
LinTrcv
LinTrcvChannel
[SWS_LinTrcv_00176]
[ ]
- LinTrcvChannelEcucPartitionRef 引用的 ECUC 分区应是 LinTrcvEcucPartitionRef 引用的 ECUC 分区的子集
[SWS_LinTrcv_00178]
[ ]
- 如果 LinTrcvEcucPartitionRef 引用了一个或多个 ECUC 分区,则 LinTrcvChannelEcucPartitionRef 的多重性应为 1 ,并应引用 LinTrcvEcucPartitionRef 引用的 ECUC 分区中的一个。
[SWS_LinTrcv_00177]
[ ]
- 一个通信通道的 LinTrcvChannel 和 LinChannel 应引用同一个 ECUC 分区。
评论
发表评论