Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_LINTransceiverDriver.md
T

17 KiB

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. 介绍

本规范规定了 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

typedef struct LinTrcv_ConfigType LinTrcv_ConfigType;

8.2.2 LinTrcv_TrcvModeType

typedef enum {
    LINTRCV_TRCV_MODE_NORMAL,    // NORMAL 模式
    LINTRCV_TRCV_MODE_STANDBY,   // STANDBY 模式
    LINTRCV_TRCV_MODE_SLEEP      // SLEEP 模式
} LinTrcv_TrcvModeType;

8.2.3 LinTrcv_TrcvWakeupModeType

typedef enum {
    LINTRCV_WUMODE_ENABLE,   // 启用唤醒事件通知
    LINTRCV_WUMODE_DISABLE,  // 禁用唤醒事件通知
    LINTRCV_WUMODE_CLEAR     // 清除存储的唤醒事件
} LinTrcv_TrcvWakeupModeType;

8.2.4 LinTrcv_TrcvWakeupReasonType

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

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

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

Std_ReturnType LinTrcv_GetOpMode(
    uint8 LinNetwork,
    LinTrcv_TrcvModeType* OpMode
)
Service ID 0x02
描述 获取当前收发器操作模式

8.3.4 LinTrcv_GetBusWuReason

Std_ReturnType LinTrcv_GetBusWuReason(
    uint8 LinNetwork,
    LinTrcv_TrcvWakeupReasonType* Reason
)
Service ID 0x03
描述 获取最后唤醒原因

8.3.5 LinTrcv_GetVersionInfo

void LinTrcv_GetVersionInfo(Std_VersionInfoType* versioninfo)
Service ID 0x04

8.3.6 LinTrcv_CheckWakeup

Std_ReturnType LinTrcv_CheckWakeup(uint8 LinNetwork)
Service ID 0x05
描述 检查通道唤醒并向 EcuM 上报

8.3.7 LinTrcv_SetWakeupMode

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 章不适用需求