# LIN 收发器驱动规范 (Specification of LIN Transceiver Driver) > **AUTOSAR CP Release 4.4.0** > **文档 ID 257: AUTOSAR_SWS_LINTransceiverDriver** ## 元信息 | 项目 | 内容 | | --- | --- | | 文档标题 | LIN 收发器驱动规范 | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 257 | | 文档状态 | Final | | 所属 AUTOSAR 标准 | Classic Platform | | 所属标准版本 | 4.4.0 | ## 文档变更历史 | 日期 | 版本 | 变更方 | 变更说明 | | --- | --- | --- | --- | | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑变更 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑变更 | | 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 | 模式行为细化 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 编辑变更 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 多通道支持 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始改进 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 类型定义集中 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 初始发布 | --- ## 目录 - [1. 介绍](#1-介绍) - [2. 缩略语](#2-缩略语) - [3. 相关文档](#3-相关文档) - [4. 约束与假设](#4-约束与假设) - [5. 与其他模块的依赖](#5-与其他模块的依赖) - [6. 需求可追溯性](#6-需求可追溯性) - [7. 功能规范](#7-功能规范) - [8. API 规范](#8-api-规范) - [9. 时序图](#9-时序图) - [10. 配置规范](#10-配置规范) - [11. 不适用需求](#11-不适用需求) --- ## 1. 介绍 本规范规定了 LIN 收发器驱动模块的功能、API 和配置。该模块负责处理 ECU 上的 LIN 收发器硬件。 LIN 总线收发器是硬件设备,作为 LIN 协议控制器与物理 LIN 总线之间的接口。一方面,LIN 协议控制器的发送数据流转换为符合 LIN 物理层的总线信号;另一方面,LIN 总线数据流转换为协议控制器的输入信号。 大多数 LIN 收发器支持电源控制和通过总线唤醒。市场上有许多不同的唤醒/睡眠和电源控制方案。 此外,还有所谓的系统基础芯片(SBC)。除 LIN 收发器功能外,这些设备还提供其他功能,如电气故障检测(如对显性电平/地短路)、电源控制、高级看门狗、LIN 收发器、SPI 等。 ### 1.1 LIN 收发器驱动的目标 本文档的目标是规定适用于大多数当前 LIN 收发器硬件实现的接口和行为。 - **[SWS_LinTrcv_00042]** ⌈LIN 收发器驱动抽象所应用的 LIN 收发器硬件,并向上层提供硬件无关接口。它还通过使用 MCAL 层 API 访问 LIN 收发器硬件来抽象 ECU 布局。⌋ (SRS_BSW_00162) ### 1.2 明确未覆盖的 LIN 收发器功能 某些 LIN 总线收发器提供 ECU 自检或诊断错误检测等附加功能。这些功能未在 AUTOSAR 中定义。如 "ground shift detection"、"selective wakeup"、"slope control" 等功能不受支持。 --- ## 2. 缩略语 | 缩略语 | 描述 | | --- | --- | | API | Application Program Interface | | Channel | 通道 | | ComM | Communication Manager | | Det | Default Error Tracer | | Dio/DIO | Digital input output | | EcuM | ECU State Manager | | ECU | Electronic Control Unit | | Frt | Free Running Timer | | Gpt | General purpose Timer | | ICU | Interrupt Control Unit | | ISR | Interrupt Service Routine | | LinTrcv | LIN Transceiver Driver | | MCAL | Micro Controller Abstraction Layer | | PDU | Protocol Data Unit | | SBC | System Basis Chip | | SPAL | Standard Peripheral Abstraction Layer | | SPI | Serial Peripheral Interface | | SPI Channel | SPI 通道 | | SPI Job | SPI 作业 | | SPI Sequence | SPI 序列 | --- ## 3. 相关文档 ### 3.1 输入文档 - [1] List of Basic Software Modules - [2] Layered Software Architecture - [3] General Requirements on Basic Software Modules - [4] Requirements on LIN - [5] Specification of ECU Configuration - [6] General Specification of Basic Software Modules ### 3.2 相关标准 - [7] Specification of LIN Driver - [8] Specification of LIN Interface - [9] Specification of ECU State Manager - [10] Specification of Standard Types - [11] Specification of Communication Stack Types - [12] Basic Software Module Description Template ### 3.3 相关规范 AUTOSAR 提供 SWS BSW General [6],同样适用于 LIN 收发器驱动。 --- ## 4. 约束与假设 ### 4.1 限制 底层驱动(DIO 或 SPI)的 API 应是同步的。不支持同步行为的底层驱动不能与 LIN 收发器驱动一起使用。 ### 4.2 适用车域 可用于所有使用 LIN 进行通信的车域。 --- ## 5. 与其他模块的依赖 | 模块 | 依赖关系 | | --- | --- | | LinIf | 所有 LIN 收发器驱动安排在 LinIf 之下 | | ComM | ComM 通过 LinIf 控制 LIN 收发器驱动通信模式 | | Det | Det 从 LIN 收发器驱动获取开发错误信息 | | Dio | Dio 模块用于访问通过 port 连接的 LIN 收发器硬件 | | EcuM | EcuM 通过 LinIf 从 LIN 收发器驱动获取唤醒信息 | | Icu | Icu 模块可能执行 LIN 收发器硬件中断 | | Spi | Spi 模块用于访问通过 SPI 连接的 LIN 收发器硬件 | ### 5.1 文件结构 #### 5.1.1 收发器驱动实现命名约定 - **[SWS_LinTrcv_00070]** ⌈ECU 中如使用不同 LIN 收发器硬件实现,函数名应修改避免重名。可用 vendor ID 或 type ID 扩展名称。⌋ (SRS_BSW_00347) #### 5.1.2 代码文件结构 详见 SWS BSW General [6] 第 5.1.6 节。 #### 5.1.3 头文件结构 - **[SWS_LinTrcv_00067]** ⌈LinTrcv.c 应包含 Det.h、Dio.h、Icu.h、Spi.h、Tm.h(根据需要)。⌋ - **[SWS_LinTrcv_00061]** ⌈编译器特定头文件名为 Compiler.h。⌋ --- ## 6. 需求可追溯性 | 需求 ID | 描述 | 满足者 | | --- | --- | --- | | SRS_Can_01096 | 总线收发器驱动应提供初始化 API | SWS_LinTrcv_00001 | | SRS_Can_01097 | CAN 总线收发器驱动 API 应为同步 | SWS_LinTrcv_00001, SWS_LinTrcv_00002 | | SRS_Can_01098 | 总线收发器驱动应支持 Standby 模式 API | SWS_LinTrcv_00002, SWS_LinTrcv_00055 | | SRS_Can_01099 | 总线收发器驱动应支持 Sleep 模式 API | SWS_LinTrcv_00002, SWS_LinTrcv_00055 | | SRS_Can_01100 | 总线收发器驱动应支持 Normal 模式 API | SWS_LinTrcv_00002, SWS_LinTrcv_00055 | | SRS_Can_01101 | 应支持读取当前操作模式 API | SWS_LinTrcv_00005 | | SRS_Can_01103 | 应支持读取唤醒原因 API | SWS_LinTrcv_00007 | | SRS_Lin_01514 | LIN 接口应通知上层唤醒事件 | SWS_LinTrcv_00066 | | SRS_Lin_01524 | LIN 驱动应支持低功耗 | SWS_LinTrcv_00002, SWS_LinTrcv_00055 | | SRS_Lin_01563 | LIN 驱动应通知唤醒事件 | SWS_LinTrcv_00066 | | SRS_Lin_01566 | 进入睡眠模式应被处理 | SWS_LinTrcv_00002, SWS_LinTrcv_00055 | | SRS_Lin_01580 | LIN 收发器驱动应支持每总线独立配置参数 | SWS_LinTrcv_00074, SWS_LinTrcv_00075 | > **[摘要]** 完整需求追溯表见原文 PDF 第 17-21 页。 --- ## 7. 功能规范 ### 7.1 LIN 收发器驱动操作模式 - **[SWS_LinTrcv_00055]** ⌈LIN 收发器驱动的操作模式如下状态图所示。⌋ (SRS_Lin_01566, SRS_Lin_01524, SRS_Can_01098, SRS_Can_01099, SRS_Can_01100) ``` Power On --> POWER_ON | NOT_ACTIVE | LinTrcv_Init() v ACTIVE | +-----------+-----------+ v v v SLEEP <---> STANDBY <---> NORMAL (通过 LinTrcv_SetOpMode 转换) ``` | 状态 | 描述 | | --- | --- | | POWER_ON | MCU 完全上电 | | NOT_ACTIVE | LIN 收发器驱动未初始化 | | ACTIVE | LinTrcv_Init() 已调用,驱动激活 | | LINTRCV_TRCV_MODE_NORMAL | 完整总线通信 | | LINTRCV_TRCV_MODE_STANDBY | 无通信。可总线或本地唤醒(可选状态) | | LINTRCV_TRCV_MODE_SLEEP | 无通信。MCU 不供电时可总线唤醒 | 如 LIN 收发器驱动覆盖多通道,所有通道要么全 NOT_ACTIVE 要么全 ACTIVE。ACTIVE 状态下,每个通道可处于不同子状态。 ### 7.2 LIN 收发器硬件操作模式 LIN 收发器硬件可能支持比软件更多的模式转换。实现需保证所述驱动功能完整。 ### 7.3 LIN 收发器唤醒类型 有四种通常称为唤醒的场景: 1. MCU 未上电,LIN 收发器硬件上电。检测唤醒后通过 inhibit 引脚使 MCU 上电(AUTOSAR 视为冷启动)。 2. MCU 在低功耗模式,LIN 收发器硬件上电。检测唤醒并通知 MCU(AUTOSAR 视为 LIN 通道和 MCU 唤醒)。 3. MCU 完全上电,LIN 收发器硬件检测唤醒并通知 MCU 或周期轮询(AUTOSAR 视为 LIN 通道唤醒)。 4. MCU 完全上电,MCU 将 LIN 收发器硬件设为 NORMAL 模式并唤醒 LIN 通道(AUTOSAR 视为内部唤醒)。 ### 7.4 LIN 收发器唤醒模式 - **[SWS_LinTrcv_00066]** ⌈LIN 收发器驱动须支持唤醒通知,因此覆盖两种唤醒模式:上层内部唤醒和 LIN 通道外部唤醒。⌋ (SRS_Lin_01514, SRS_Lin_01563) 1) **Internal wakeup**:上层(如 LinTrcv_Init() 或 LinTrcv_SetOpMode)发起的内部唤醒。 2) **External wakeup**:LIN 收发器驱动检测到的唤醒通过 LinTrcv_CheckWakeup API 转发给 LinIf。 - **[SWS_LinTrcv_00074]** ⌈唤醒模式选择由配置参数 LinTrcvWakeUpSupport 完成。⌋ (SRS_Lin_01580) - **[SWS_LinTrcv_00075]** ⌈唤醒支持应由配置参数 LinTrcvWakeupByBusUsed 为每个 LIN 收发器通道单独开关。⌋ (SRS_Lin_01580) - **[SWS_LinTrcv_00161]** ⌈LinTrcv 驱动应使用 Icu_EnableNotification 和 Icu_DisableNotification API。⌋ - **[SWS_LinTrcv_00162]** ⌈收发器进入 STANDBY 模式时启用 ICU 通道。⌋ - **[SWS_LinTrcv_00163]** ⌈收发器进入 NORMAL 模式时禁用 ICU 通道。⌋ ### 7.5 错误分类 #### 7.5.1 开发错误 | 错误名 | 错误码 | 含义 | | --- | --- | --- | | LINTRCV_E_INVALID_LIN_NETWORK | 0x01 | LIN 网络参数错误 | | LINTRCV_E_PARAM_POINTER | 0x02 | NULL 指针参数 | | LINTRCV_E_UNINIT | 0x11 | 未初始化即调用 | | LINTRCV_E_TRCV_NOT_SLEEP | 0x21 | 错误收发器操作模式 | | LINTRCV_E_TRCV_NOT_NORMAL | 0x22 | 错误收发器操作模式 | | LINTRCV_E_INVALID_TRCV_OPMODE | 0x25 | 可选转换未启用,调用了无效模式 | #### 7.5.2 运行时错误 无运行时错误。 #### 7.5.3 瞬态故障 无瞬态故障。 ### 7.6 错误通知 - **[SWS_LinTrcv_00105]** ⌈如启用开发错误检测,在 NOT_ACTIVE 状态调用 LinTrcv_Init 或 LinTrcv_GetVersionInfo 以外的函数,应上报 LINTRCV_E_UNINIT。⌋ - **[SWS_LinTrcv_00106]** ⌈如启用开发错误检测,LinNetwork 参数无效时,上报 LINTRCV_E_INVALID_LIN_NETWORK。⌋ - **[SWS_LinTrcv_00159]** ⌈如启用开发错误检测,NULL 指针参数时上报 LINTRCV_E_PARAM_POINTER。⌋ ### 7.7 驱动初始化前提 - **[SWS_LinTrcv_00099]** ⌈LIN 总线收发器驱动可能使用 Dio 或 Spi 驱动控制硬件。这些驱动必须在 LIN 总线收发器驱动初始化前可用。⌋ ### 7.8 实例概念 - **[SWS_LinTrcv_00016]** ⌈每种 LIN 收发器硬件类型,ECU 应有一个 LIN 收发器驱动实例。一个实例服务所有同类型 LIN 收发器硬件。⌋ (SRS_BSW_00347, SRS_BSW_00413) ### 7.9 等待状态 - **[SWS_LinTrcv_00171]** ⌈LIN 收发器驱动应使用 Tm_BusyWait1us16bit 时间服务实现收发器状态变化的等待时间。⌋ --- ## 8. API 规范 ### 8.1 导入类型 | 模块 | 头文件 | 导入类型 | | --- | --- | --- | | Dio | Dio.h | Dio_ChannelGroupType, Dio_ChannelType, Dio_LevelType, Dio_PortLevelType, Dio_PortType | | EcuM | EcuM.h | EcuM_WakeupSourceType | | Icu | Icu.h | Icu_ChannelType | | Lin_GeneralTypes | Lin_GeneralTypes.h | LinTrcv_TrcvWakeupModeType, LinTrcv_TrcvWakeupReasonType | | Spi | Spi.h | Spi_ChannelType, Spi_DataBufferType, Spi_NumberOfDataType, Spi_SequenceType, Spi_StatusType | | Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType | ### 8.2 类型定义 #### 8.2.1 LinTrcv_ConfigType ```c typedef struct LinTrcv_ConfigType LinTrcv_ConfigType; ``` #### 8.2.2 LinTrcv_TrcvModeType ```c typedef enum { LINTRCV_TRCV_MODE_NORMAL, // NORMAL 模式 LINTRCV_TRCV_MODE_STANDBY, // STANDBY 模式 LINTRCV_TRCV_MODE_SLEEP // SLEEP 模式 } LinTrcv_TrcvModeType; ``` #### 8.2.3 LinTrcv_TrcvWakeupModeType ```c typedef enum { LINTRCV_WUMODE_ENABLE, // 启用唤醒事件通知 LINTRCV_WUMODE_DISABLE, // 禁用唤醒事件通知 LINTRCV_WUMODE_CLEAR // 清除存储的唤醒事件 } LinTrcv_TrcvWakeupModeType; ``` #### 8.2.4 LinTrcv_TrcvWakeupReasonType ```c typedef enum { LINTRCV_WU_ERROR, // 因错误未检测到唤醒原因 LINTRCV_WU_NOT_SUPPORTED, // 收发器不支持唤醒原因信息 LINTRCV_WU_BY_BUS, // 网络引起的 ECU 唤醒 LINTRCV_WU_BY_PIN, // 收发器引脚的唤醒事件(非 LIN 总线) LINTRCV_WU_INTERNALLY, // 通过 ECU 请求 NORMAL 模式唤醒 LINTRCV_WU_RESET, // 因 ECU 复位唤醒 LINTRCV_WU_POWER_ON // 上电后 ECU 复位唤醒 } LinTrcv_TrcvWakeupReasonType; ``` ### 8.3 函数定义 #### 8.3.1 LinTrcv_Init ```c void LinTrcv_Init(const LinTrcv_ConfigType* ConfigPtr) ``` | Service ID | 0x00 | | --- | --- | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | 描述 | 初始化 LIN 收发器驱动模块 | - **[SWS_LinTrcv_00119]** ⌈LinTrcv_Init 应将 LIN 收发器硬件设为 LINTRCV_TRCV_MODE_SLEEP 状态。⌋ - **[SWS_LinTrcv_00173]** ⌈ConfigPtr 应始终为 NULL_PTR(当前未使用)。⌋ #### 8.3.2 LinTrcv_SetOpMode ```c Std_ReturnType LinTrcv_SetOpMode( uint8 LinNetwork, LinTrcv_TrcvModeType OpMode ) ``` | Service ID | 0x01 | | --- | --- | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | 描述 | 设置内部状态为指定模式 | - **[SWS_LinTrcv_00108]** ⌈LinTrcv_SetOpMode 应将 LinNetwork 通道的内部状态切换为 OpMode 参数值,可能值:NORMAL、STANDBY、SLEEP。⌋ - **[SWS_LinTrcv_00112]** ⌈如底层硬件不支持请求模式,应返回 E_NOT_OK。⌋ #### 8.3.3 LinTrcv_GetOpMode ```c Std_ReturnType LinTrcv_GetOpMode( uint8 LinNetwork, LinTrcv_TrcvModeType* OpMode ) ``` | Service ID | 0x02 | | --- | --- | | 描述 | 获取当前收发器操作模式 | #### 8.3.4 LinTrcv_GetBusWuReason ```c Std_ReturnType LinTrcv_GetBusWuReason( uint8 LinNetwork, LinTrcv_TrcvWakeupReasonType* Reason ) ``` | Service ID | 0x03 | | --- | --- | | 描述 | 获取最后唤醒原因 | #### 8.3.5 LinTrcv_GetVersionInfo ```c void LinTrcv_GetVersionInfo(Std_VersionInfoType* versioninfo) ``` | Service ID | 0x04 | | --- | --- | #### 8.3.6 LinTrcv_CheckWakeup ```c Std_ReturnType LinTrcv_CheckWakeup(uint8 LinNetwork) ``` | Service ID | 0x05 | | --- | --- | | 描述 | 检查通道唤醒并向 EcuM 上报 | #### 8.3.7 LinTrcv_SetWakeupMode ```c Std_ReturnType LinTrcv_SetWakeupMode( uint8 LinNetwork, LinTrcv_TrcvWakeupModeType TrcvWakeupMode ) ``` | Service ID | 0x06 | | --- | --- | | 描述 | 配置指定通道的唤醒通知 | ### 8.4 调度函数 无。 ### 8.5 回调通知 无回调。 ### 8.6 期望接口 #### 8.6.1 强制接口 - Det_ReportError - Dio_ReadChannel / Dio_WriteChannel #### 8.6.2 可选接口 - Icu_EnableNotification / Icu_DisableNotification - Spi_SyncTransmit / Spi_GetStatus - Tm_BusyWait1us16bit - EcuM_SetWakeupEvent - LinIf_WakeupConfirmation #### 8.6.3 可配置接口 无。 --- ## 9. 时序图 > **[摘要]** 时序图详见原文 PDF 第 41 页(初始化、模式切换、唤醒检测)。 --- ## 10. 配置规范 ### 10.1 如何阅读本章 参考 [ECU Configuration Specification]。 ### 10.2 容器与配置参数 #### 10.2.1 变体 本模块不支持变体配置。 #### 10.2.2 LinTrcv 根容器。 #### 10.2.3 LinTrcvGeneral | 参数 | 类型 | 说明 | | --- | --- | --- | | LinTrcvDevErrorDetect | bool | 启用/禁用开发错误检测 | | LinTrcvIndex | int | 模块实例索引 | | LinTrcvVersionInfoApi | bool | 启用版本信息 API | | LinTrcvMaxNumberOfChannels | int | 最大通道数 | #### 10.2.4 LinTrcvChannel | 参数 | 类型 | 说明 | | --- | --- | --- | | LinTrcvChannelId | int | 通道 ID | | LinTrcvWakeUpSupport | enum | 唤醒支持模式 | | LinTrcvWakeupByBusUsed | bool | 此通道是否启用唤醒 | | LinTrcvWakeupSourceRef | ref | 引用 EcuM 唤醒源 | #### 10.2.5 LinTrcvAccess 访问类型容器(DIO 或 SPI)。 #### 10.2.6 LinTrcvDioAccess DIO 访问配置。 #### 10.2.7 LinTrcvDioChannelAccess DIO 通道访问。 #### 10.2.8 LinTrcvSpiSequence SPI 序列引用。 ### 10.3 已发布信息 按 BSW General 提供模块版本信息。 --- ## 11. 不适用需求 详见原文 PDF 第 55 页。 --- ## 翻译说明 - 本译本基于 AUTOSAR CP 4.4.0 的 LIN 收发器驱动规范 (Document ID 257,共 55 页) - 摘要标记位置:第 6 章需求追溯、第 9 章时序图、第 11 章不适用需求