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 收发器唤醒类型
有四种通常称为唤醒的场景:
- MCU 未上电,LIN 收发器硬件上电。检测唤醒后通过 inhibit 引脚使 MCU 上电(AUTOSAR 视为冷启动)。
- MCU 在低功耗模式,LIN 收发器硬件上电。检测唤醒并通知 MCU(AUTOSAR 视为 LIN 通道和 MCU 唤醒)。
- MCU 完全上电,LIN 收发器硬件检测唤醒并通知 MCU 或周期轮询(AUTOSAR 视为 LIN 通道唤醒)。
- MCU 完全上电,MCU 将 LIN 收发器硬件设为 NORMAL 模式并唤醒 LIN 通道(AUTOSAR 视为内部唤醒)。
7.4 LIN 收发器唤醒模式
- [SWS_LinTrcv_00066] ⌈LIN 收发器驱动须支持唤醒通知,因此覆盖两种唤醒模式:上层内部唤醒和 LIN 通道外部唤醒。⌋ (SRS_Lin_01514, SRS_Lin_01563)
- Internal wakeup:上层(如 LinTrcv_Init() 或 LinTrcv_SetOpMode)发起的内部唤醒。
- 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 章不适用需求