Files
autosar_standard_spec_v4.4/Communication/AUTOSAR_SWS_LINDriver.md
T

714 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LIN 驱动规范 (Specification of LIN Driver)
> **AUTOSAR CP Release 4.4.0**
> **文档 ID 072: AUTOSAR_SWS_LINDriver**
## 元信息
| 项目 | 内容 |
| --- | --- |
| 文档标题 | LIN 驱动规范 (Specification of LIN Driver) |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 072 |
| 文档状态 | Final |
| 所属 AUTOSAR 标准 | Classic Platform |
| 所属标准版本 | 4.4.0 |
## 文档变更历史
| 日期 | 版本 | 变更方 | 变更说明 |
| --- | --- | --- | --- |
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | LIN Slave 支持 (CONC_634);MCALMulticoreDistribution (CONC_639) 草案;LIN 2.1 引用替换为 ISO 17987:2016;头文件清理;细微更正 |
| 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 | 第 6 章需求追溯清理;DET 引用更名为"默认错误跟踪器" |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 以 SWS_Lin_00268 替换 SWS_Lin_00064 |
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 删除 SWS_Lin_00243;修改若干需求;更新图 7-1 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 移除过时需求;导入 SWS_Lin_184;更新唤醒功能;新增 Lin_WakeupInternal API;补充类型定义 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 指定 LIN_E_TIMEOUT 为生产错误;统一类型至 Lin_GeneralTypes.h |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 修改错误上报;改进唤醒处理 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 引入 Lin_GeneralTypes.h;增加缺失 DET 错误码;移除 Lin_GetVersionInfo 实例 ID |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 支持高级 LIN 控制器;将 LIN 通道初始化整合到 LIN 模块初始化;法律声明修订 |
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 编辑修改;元信息扩展 |
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | LIN 收发器唤醒验证函数添加;集成测试反馈 |
| 2006-05-16 | 2.0 | 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. 介绍与功能概述
本规范规定了 AUTOSAR 基础软件模块 **LIN 驱动** 的功能、API 和配置。
### 1.1 范围
本文档基于 ISO 17987 系列规范 [16]。假定读者已熟悉该规范。本文档不会重复说明 ISO 17987 LIN 功能。
LIN 驱动适用于 ISO 17987 主节点和从节点。AUTOSAR 中的 LIN 实现在某些方面偏离 ISO 17987 规范(如本规范所述),但 LIN 总线上的行为不变。我们的意图是让所有现有 LIN 节点都能与 AUTOSAR LIN 实现共存。
- **[SWS_Lin_00063]** ⌈意图支持从简单 SCI/UART 到复杂 LIN 硬件控制器的完整 LIN 硬件范围。SW-UART 实现超出范围。⌋ (SRS_Lin_01547)
### 1.2 架构概述
LIN 驱动是微控制器抽象层(MCAL)的一部分,执行硬件访问并向上层提供硬件无关的 API。能够访问 LIN 驱动的唯一上层是 LIN 接口。
一个 LIN 驱动可支持多个通道(同属一个 LIN 硬件单元)。下图示例中,三个不同的 LIN 驱动连接到 LIN 接口,但最常见的配置是一个 LIN 驱动。
```
通信硬件抽象
LIN 调度器 LIN 接口 LIN TP
(仅主节点) ("LIN 通信栈")
|
I/O 驱动
LIN 驱动 A LIN 驱动 B LIN 驱动 C
(帧处理) (帧处理) (帧处理)
µC
LIN HW A LIN HW B LIN HW B LIN HW C
(标准UART) (增强LIN-SCI) (多通道控制器)
|
收发器IC 收发器IC 收发器IC 收发器IC 收发器IC
```
*图 10-1:LIN 软件架构层概览*
---
## 2. 缩略语、缩写与术语表
### 2.1 缩略语和缩写
| 缩略语 | 描述 |
| --- | --- |
| AUTOSAR | Automotive Open System Architecture |
| COM | Communication |
| ECU | Electronic Control Unit |
| EcuM | ECU Manager |
| DEM | Diagnostic Event Manager |
| DET | Default Error Tracer |
| ISR | Interrupt Service Routine |
| LIN | Local Interconnect Network |
| MCAL | MicroController Abstraction Layer |
| MCU | Micro Controller Unit |
| OS | Operating System |
| PDU | Protocol Data Unit |
| PID | Protected ID |
| PLL | Phase-Locked Loop |
| RAM | Random Access Memory |
| RX | Reception |
| SCI | Serial Communication Interface |
| SDU | Service Data Unit |
| SFR | Special Function Register |
| SPAL | Standard Peripheral Abstraction Layer |
| SRS | Software Requirement Specification |
| SW | Software |
| SWS | Software Specification |
| TP | Transport Layer |
| TX | Transmission |
| UART | Universal Asynchronous Receiver Transmitter |
| XML | Extensible Markup Language |
### 2.2 术语表
| 术语 | 描述 |
| --- | --- |
| enumeration | C 语言的 enum 或 #define |
| LIN channel | LIN 通道实体连接 LIN 集群的 ECU |
| LIN cluster | LIN 总线及所有节点 |
| LIN controller | 含有帧处理状态机的专用 LIN 硬件 |
| LIN frame | 由 header 与 response 构成的数据包 |
| LIN frame processor | 实现完整 LIN 帧处理(软件模拟或专用控制器) |
| LIN hardware unit | 可驱动一个或多个 LIN 通道 |
| LIN header | 帧的第一部分,始终由主节点发送 |
| LIN node | 节点,通常为 ECU |
| LIN response | 帧的响应部分 |
### 2.3 LIN 硬件单元分类
片上 LIN 硬件单元可组合一个或多个 LIN 通道。不同类型示例:
- 类型 A:含多个 LIN 控制器(0..n)
- 类型 B:多个 SCI/UART
- 类型 C:多个增强型 SCI/UART
每个控制器/UART 通过对应 TxD/RxD 引脚连接到独立的收发器 IC,再连接到独立 LIN 集群。
---
## 3. 相关文档
### 3.1 输入文档
- [1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
- [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- [3] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
- [4] Specification of Standard Types — AUTOSAR_SWS_StandardTypes.pdf
- [5] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
- [6] General Requirements on SPAL — AUTOSAR_SRS_SPALGeneral.pdf
- [7] Requirements on LIN — AUTOSAR_SRS_LIN.pdf
- [8] Specification of LIN Interface — AUTOSAR_SWS_LINInterface.pdf
- [9] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
- [10] Specification of MCU driver — AUTOSAR_SWS_MCUDriver.pdf
- [11] Specification of Diagnostic Event Manager — AUTOSAR_SWS_DiagnosticEventManager.pdf
- [12] Specification of ECU State Manager — AUTOSAR_SWS_ECUStateManager.pdf
- [13] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
- [14] Specification of LIN Transceiver Driver — AUTOSAR_SWS_LINTransceiverDriver.pdf
- [15] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf
### 3.2 相关标准与规范
- [16] ISO 17987:2016 (所有部分), Road vehicles Local Interconnect Network (LIN)
### 3.3 相关规范
AUTOSAR 提供通用 BSW 规范 [15] (SWS BSW General),该规范同样适用于 LIN 驱动。
---
## 4. 约束与假设
### 4.1 限制
ECU 中只允许一个 LIN 通道连接一个特定 LIN 集群。除非有未使用通道,LIN 通道数等于 LIN 集群数。
#### 驱动范围
- **[SWS_Lin_00045]** ⌈一个 LIN 驱动提供对一种 LIN 硬件单元类型(简单 UART 或专用 LIN 硬件)的访问,可能包含多个 LIN 通道。⌋ (SRS_BSW_00347)
- **[SWS_Lin_00201]** ⌈不同 LIN 硬件单元需单独实现 LIN 驱动。⌋ ()
- **[SWS_Lin_00177]** ⌈若同一 ECU 中实现多个 LIN 驱动实例,文件名、API 名和发布参数应修改避免重名,按 SRS_BSW_00347 扩展为 `<模块缩写>_<Vendor Id>_<Vendor specific name>`。⌋ ()
### 4.2 适用车域
本规范适用于所有使用 LIN 的车域。
---
## 5. 与其他模块的依赖
### 5.1 文件结构
#### 5.1.1 代码文件结构
LIN 驱动代码文件由实现者决定,但应符合 SRS_BSW_00347 命名规则。
#### 5.1.2 头文件结构
- LIN 驱动提供 `Lin.h` 头文件给 LIN 接口。
- `Lin_GeneralTypes.h` 包含所有用于上层模块的类型定义。
- LIN 驱动依赖 `Std_Types.h``ComStack_Types.h``EcuM.h``Icu.h``Dem.h` 等头文件。
---
## 6. 需求可追溯性
| 需求 ID | 描述 | 满足者 |
| --- | --- | --- |
| SRS_BSW_00101 | BSW 模块应能在独立初始化函数中初始化变量和硬件 | SWS_Lin_00006 |
| SRS_BSW_00323 | 支持开发和生产错误的分类 | SWS_Lin_00048 |
| SRS_BSW_00327 | 错误值命名约定 | SWS_Lin_00048 |
| SRS_BSW_00337 | 开发错误分类 | SWS_Lin_00048 |
| SRS_BSW_00347 | BSW 模块文件命名约定 | SWS_Lin_00045 |
| SRS_BSW_00375 | BSW 模块应上报唤醒原因 | SWS_Lin_00098 |
| SRS_BSW_00385 | 列出可能的错误通知 | SWS_Lin_00048 |
| SRS_BSW_00406 | 模块初始化标志 | SWS_Lin_00006 |
| SRS_BSW_00407 | 模块版本信息读取 | SWS_Lin_00001 |
| SRS_Lin_01503 | LIN 驱动应提供帧处理接口 | SWS_Lin_00024, SWS_Lin_00025, SWS_Lin_00274, SWS_Lin_00283 |
| SRS_Lin_01522 | LIN 驱动应将数据从上层缓冲区拷贝到 PDU | SWS_Lin_00025, SWS_Lin_00053, SWS_Lin_00060 |
| SRS_Lin_01524 | LIN 驱动应支持低功耗模式 | SWS_Lin_00032 |
| SRS_Lin_01526 | 应保持数据一致性 | SWS_Lin_00053 |
| SRS_Lin_01547 | 支持 LIN 控制器硬件范围 | SWS_Lin_00063 |
| SRS_Lin_01555 | LIN 驱动应有发送/接收通知接口 | SWS_Lin_00024, SWS_Lin_00274, SWS_Lin_00275 |
| SRS_Lin_01556 | LIN 驱动应支持初始化 | SWS_Lin_00008, SWS_Lin_00190 |
| SRS_Lin_01560 | 通道睡眠请求独立性 | SWS_Lin_00033 |
| SRS_Lin_01563 | LIN 驱动应通知唤醒 | SWS_Lin_00098 |
| SRS_Lin_01566 | 通道独立睡眠 | SWS_Lin_00033, SWS_Lin_00266 |
| SRS_Lin_01578 | LIN 驱动应实现 ISO 17987 帧处理 | SWS_Lin_00017, SWS_Lin_00272, SWS_Lin_00273 |
> **[摘要]** 完整需求追溯表见原文 PDF 第 17-21 页。
---
## 7. 功能规范
### 7.1 通用需求
- **[SWS_Lin_00177]** 多 LIN 驱动实例的命名约定。
- **[SWS_Lin_00045]** 驱动支持的硬件类型。
- **[SWS_Lin_00201]** 不同硬件需独立实现。
### 7.2 版本检查
#### 7.2.1 需求
LIN 驱动应支持版本检查机制。
### 7.3 LIN 驱动与通道初始化
#### 7.3.1 背景与原理
LIN 驱动初始化应初始化所有 LIN 硬件单元和通道。
#### 7.3.2 需求
LIN 驱动状态机:
| 状态 | 描述 |
| --- | --- |
| LIN_UNINIT | 模块未初始化(默认状态) |
| LIN_INIT | 模块已初始化,各通道处于 LIN_CH_SLEEP |
| LIN_CH_OPERATIONAL | 通道已初始化,可在 LIN 集群中通信 |
| LIN_CH_SLEEP | 通道处于睡眠,唤醒检测启用 |
#### 7.3.3 状态图
- **[SWS_Lin_00145]** ⌈Reset -> LIN_UNINIT: 复位后,Lin 模块应将其状态设为 LIN_UNINIT。⌋ ()
- **[SWS_Lin_00146]** ⌈LIN_UNINIT -> LIN_INIT: 调用 Lin_Init 时,Lin 模块应从 LIN_UNINIT 过渡到 LIN_INIT。⌋ ()
- **[SWS_Lin_00171]** ⌈进入 LIN_INIT 时,Lin 模块应将每个通道置为 LIN_CH_SLEEP 状态,启用唤醒检测,可选地将 LIN HW Unit 置于低功耗模式。⌋ ()
- **[SWS_Lin_00263]** ⌈LIN_CH_OPERATIONAL -> LIN_CH_SLEEP_PENDING 通过 Lin_GoToSleep: 若 LIN 接口请求进入睡眠,在发送 go-to-sleep 命令后进入 LIN_CH_SLEEP_PENDING 状态。仅适用于 LIN 主节点。⌋ ()
- **[SWS_Lin_00264]** ⌈LIN_CH_SLEEP_PENDING -> LIN_CH_SLEEP: 调用 Lin_GetStatus 时,LIN 驱动直接进入 LIN_CH_SLEEP 状态,即使 go-to-sleep 命令尚未发送。仅适用于主节点。⌋ ()
- **[SWS_Lin_00265]** ⌈LIN_CH_OPERATIONAL -> LIN_CH_SLEEP 通过 Lin_GoToSleepInternal: LIN 驱动直接进入 LIN_CH_SLEEP 状态。⌋ ()
- **[SWS_Lin_00174]** ⌈LIN_CH_SLEEP -> LIN_CH_OPERATIONAL 通过 Lin_Wakeup: 通道置为 LIN_CH_OPERATIONAL。⌋ ()
- **[SWS_Lin_00261]** ⌈LIN_CH_SLEEP -> LIN_CH_OPERATIONAL 通过 Lin_WakeupInternal: 通道置为 LIN_CH_OPERATIONAL。⌋ ()
- **[SWS_Lin_00209]** ⌈Lin_Wakeup: 在 LIN_CH_SLEEP 到 LIN_CH_OPERATIONAL 过渡时,LIN 驱动应保证整个集群处于唤醒态,即在总线上强制显性电平 250 μs 到 5 ms。⌋ ()
### 7.4 帧处理
#### 7.4.1 背景与原理
LIN 帧由 LIN header 和 LIN response 两部分组成。header 始终由主节点发送,指示帧的起始,包括 LIN PID。response 由主节点或某从节点发送。
#### 7.4.2 需求
##### 7.4.2.1 LIN 主节点特定
- **[SWS_Lin_00016]** ⌈LIN 驱动应将提供的标识符解释为 PID。⌋ ()
- **[SWS_Lin_00017]** ⌈LIN 驱动应能发送 LIN header(break + sync + PID)。⌋ (SRS_Lin_01578)
- **[SWS_Lin_00018]** ⌈LIN 驱动应能发送 LIN header 和 response。⌋ ()
- **[SWS_Lin_00021]** ⌈如 LIN 接口请求新帧发送,LIN 驱动应中止当前帧发送。⌋ ()
- **[SWS_Lin_00022]** ⌈Lin_GetStatus 应返回当前帧发送请求的状态。⌋ ()
- **[SWS_Lin_00024]** ⌈LIN 驱动应使接收数据可供 LIN 接口模块使用。⌋ (SRS_Lin_01555, SRS_Lin_01503)
- **[SWS_Lin_00025]** ⌈LIN 驱动应按 LIN 接口提供的内容发送响应数据。⌋ (SRS_Lin_01522, SRS_Lin_01503)
##### 7.4.2.2 LIN 从节点特定
- **[SWS_Lin_00272]** ⌈LIN 驱动应在 LIN_CH_OPERATIONAL 状态下随时能接收 LIN header。⌋ (SRS_Lin_01578)
- **[SWS_Lin_00280]** ⌈接收 LIN header 时,LIN 驱动应调用 LinIf_HeaderIndication 回调,PduPtr->Pid 设为接收的 PID 值,PduPtr->SduPtr 设为驱动缓冲区。⌋ ()
- **[SWS_Lin_00281]** ⌈等待新 LIN header 时,若检测到不符合的总线事件,LIN 驱动应调用 LinIf_LinErrorIndication 并参数 LIN_ERR_HEADER。⌋ ()
- **[SWS_Lin_00273]** ⌈LIN 驱动应能发送、接收或忽略 LIN response。⌋ (SRS_Lin_01578)
- **[SWS_Lin_00274]** ⌈成功接收 LIN response 后,LIN 驱动应通过 LinIf_RxIndication 回调将接收数据传给 LIN 接口模块。⌋ (SRS_Lin_01555, SRS_Lin_01503)
- **[SWS_Lin_00275]** ⌈成功发送 LIN response 后,直接通过 LinIf_TxConfirmation 回调确认发送完成。⌋ (SRS_Lin_01555)
- **[SWS_Lin_00277]** ⌈LIN 驱动应检测响应发送和接收过程中的通信错误,出错时中止当前帧处理并调用 LinIf_LinErrorIndication 回调。⌋ ()
##### 7.4.2.3 通用
- **[SWS_Lin_00019]** ⌈LIN 驱动应能计算 'classic' 或 'enhanced' 校验和。⌋ ()
- **[SWS_Lin_00026]** ⌈如硬件无法排队字节,LIN 驱动应提供临时通信缓冲区。⌋ ()
- **[SWS_Lin_00027]** ⌈LIN 驱动应非阻塞地启动发送。⌋ ()
- **[SWS_Lin_00028]** ⌈LIN 驱动应非阻塞地接收数据。⌋ ()
#### 7.4.3 数据一致性
##### 7.4.3.1 发送数据一致性
- **[SWS_Lin_00053]** ⌈LIN 驱动应直接从上层缓冲区拷贝数据。⌋ (SRS_Lin_01522, SRS_Lin_01526)
- **[SWS_Lin_00210]** ⌈主节点上层应在函数调用返回前保持缓冲区数据一致;从节点上层应在响应发送结束前保持。⌋ ()
##### 7.4.3.2 接收数据一致性
- **[SWS_Lin_00060]** ⌈LIN 帧接收(含拷贝至目标层)可在 ISR 中实现,接收数据应保持一致直到下一帧或通道状态变化。⌋ (SRS_Lin_01522)
#### 7.4.4 数据字节映射
- **[SWS_Lin_00096]** ⌈内存与 LIN 帧之间的数据映射:array[0] 为 LSB(首先发送/接收),array[n-1] 为 MSB。⌋ ()
### 7.5 睡眠与唤醒功能
#### 7.5.1 背景与原理
- LIN 主节点可被从节点产生的唤醒信号唤醒,或被上层(LIN 接口)请求唤醒。
- LIN 从节点可被主节点或其他从节点的唤醒信号唤醒,或被上层请求唤醒。
#### 7.5.2 需求
- **[SWS_Lin_00032]** ⌈LIN 通道进入睡眠时,应转换到低功耗模式(如硬件支持)。⌋ (SRS_Lin_01524)
- **[SWS_Lin_00033]** ⌈每个 LIN 通道应能独立接受睡眠请求。⌋ (SRS_Lin_01560, SRS_Lin_01566)
- **[SWS_Lin_00037]** ⌈通道处于 LIN_CH_SLEEP 且唤醒检测启用时,LIN HW Unit 应监测总线唤醒请求。⌋ ()
- **[SWS_Lin_00043]** ⌈Lin_Wakeup: 收到唤醒请求时,通道应向总线发送唤醒脉冲。⌋ ()
- **[SWS_Lin_00262]** ⌈Lin_WakeupInternal: 收到内部唤醒请求时,通道不向总线发送唤醒脉冲。⌋ ()
### 7.6 错误分类
#### 7.6.1 开发错误
| 错误名 | 错误码 | 含义 |
| --- | --- | --- |
| LIN_E_UNINIT | 0x00 | 模块未初始化即调用 |
| LIN_E_INVALID_CHANNEL | 0x02 | 通道参数无效或不活动 |
| LIN_E_INVALID_POINTER | 0x03 | 配置指针无效 |
| LIN_E_STATE_TRANSITION | 0x04 | 当前状态下的无效状态转换 |
| LIN_E_PARAM_POINTER | 0x05 | NULL 指针参数 |
#### 7.6.2 运行时错误
无运行时错误。
#### 7.6.3 瞬态故障
无瞬态故障。
#### 7.6.4 生产错误
##### 7.6.4.1 LIN_E_TIMEOUT
| 项目 | 内容 |
| --- | --- |
| 错误名 | LIN_E_TIMEOUT |
| 简短描述 | 当因硬件错误导致超时时上报 |
| 详细描述 | 若改动 LIN 硬件控制寄存器后需等待状态变化,应由可配置超时机制保护。若超时,应上报 LIN_E_TIMEOUT。 |
| 检测条件 | 失败:寄存器更改后超过 LinTimeoutDuration 仍无状态变化;通过:超时前状态已变化 |
| 所需时间 | 1s |
| 监控频率 | once-per-trip |
#### 7.6.5 扩展生产错误
无扩展生产错误。
### 7.7 错误检测
- **[SWS_Lin_00097]** ⌈如改动 LIN HW 控制寄存器需等待状态变化,应由可配置超时机制 LinTimeoutDuration 保护。若超时,LIN_E_TIMEOUT 错误上报至 DET 或 DEM。⌋ ()
### 7.8 错误通知
- **[SWS_Lin_00058]** ⌈LIN 驱动能上报的唯一生产错误是 LIN_E_TIMEOUT。⌋ ()
---
## 8. API 规范
### 8.1 导入类型
| 模块 | 头文件 | 导入类型 |
| --- | --- | --- |
| ComStack_Types | ComStackTypes.h | NetworkHandleType |
| Dem | Rte_Dem_Type.h | Dem_EventIdType, Dem_EventStatusType |
| EcuM | EcuM.h | EcuM_WakeupSourceType |
| Icu | Icu.h | Icu_ChannelType |
| Lin_GeneralTypes | Lin_GeneralTypes.h | Lin_PduType, Lin_SlaveErrorType, Lin_StatusType |
| Std_Types | StandardTypes.h | Std_ReturnType, Std_VersionInfoType |
### 8.2 类型定义
#### 8.2.1 Lin_ConfigType
| 项目 | 内容 |
| --- | --- |
| 类型 | Structure |
| 范围 | 硬件和实现相关 |
| 描述 | 初始化数据结构,LIN 硬件特定 |
| 可见性 | Lin.h |
#### 8.2.2 Lin_FramePidType
```c
typedef uint8 Lin_FramePidType; // 0..0xFE
```
表示 Lin_SendFrame() 使用的有效受保护标识符。
#### 8.2.3 Lin_FrameCsModelType
```c
typedef enum {
LIN_ENHANCED_CS, // 增强校验和模型
LIN_CLASSIC_CS // 经典校验和模型
} Lin_FrameCsModelType;
```
#### 8.2.4 Lin_FrameResponseType
```c
typedef enum {
LIN_FRAMERESPONSE_TX, // 本节点生成响应
LIN_FRAMERESPONSE_RX, // 其他节点生成,本节点相关
LIN_FRAMERESPONSE_IGNORE // 其他节点生成,本节点无关
} Lin_FrameResponseType;
```
#### 8.2.5 Lin_FrameDlType
```c
typedef uint8 Lin_FrameDlType; // 1..8 - LIN 帧数据长度
```
#### 8.2.6 Lin_PduType
```c
typedef struct {
Lin_FramePidType Pid;
Lin_FrameCsModelType Cs;
Lin_FrameResponseType Drc;
Lin_FrameDlType Dl;
uint8* SduPtr;
} Lin_PduType;
```
#### 8.2.7 Lin_StatusType
```c
typedef enum {
LIN_NOT_OK, // 错误
LIN_TX_OK, // 成功发送
LIN_TX_BUSY, // 正在发送
LIN_TX_HEADER_ERROR, // header 发送错误
LIN_TX_ERROR, // response 发送错误
LIN_RX_OK, // 成功接收
LIN_RX_BUSY, // 正在接收
LIN_RX_ERROR, // response 接收错误
LIN_RX_NO_RESPONSE, // 无响应
LIN_OPERATIONAL, // 通道正常,刚初始化
LIN_CH_SLEEP // 通道睡眠
} Lin_StatusType;
```
#### 8.2.8 Lin_SlaveErrorType
```c
typedef enum {
LIN_ERR_HEADER, // header 错误
LIN_ERR_RESP_STOPBIT, // response 帧错误
LIN_ERR_RESP_CHKSUM, // 校验和错误
LIN_ERR_RESP_DATABIT, // response 数据位监视错误
LIN_ERR_NO_RESP, // 无响应
LIN_ERR_INC_RESP // 不完整响应
} Lin_SlaveErrorType;
```
### 8.3 函数定义
#### 8.3.1 影响整个 LIN 硬件单元的服务
##### 8.3.1.1 Lin_Init
```c
void Lin_Init(const Lin_ConfigType* Config)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x00 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| 参数 (in) | Config — LIN 驱动配置集指针 |
| 描述 | 初始化 LIN 模块 |
- **[SWS_Lin_00084]** ⌈Lin_Init 应初始化 Lin 模块及 LIN 通道。⌋ ()
- **[SWS_Lin_00150]** ⌈Lin_Init 应按 Config 配置集初始化模块。⌋ ()
- **[SWS_Lin_00106]** ⌈Lin_Init 调用前,环境不得调用其他 Lin 函数(GetVersionInfo 除外)。⌋ ()
##### 8.3.1.2 Lin_CheckWakeup
```c
Std_ReturnType Lin_CheckWakeup(uint8 Channel)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x0A |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| 参数 (in) | Channel — LIN 通道 |
| 返回 | E_OK / E_NOT_OK |
| 描述 | 检查 LIN 通道是否发生唤醒 |
- **[SWS_Lin_00098]** ⌈Lin_CheckWakeup 应评估指定通道的唤醒,检测到唤醒事件时立即通过 EcuM_SetWakeupEvent 通知 EcuM,并通过 LinIf_WakeupConfirmation 通知 LIN 接口。⌋ (SRS_BSW_00375, SRS_Lin_01563)
##### 8.3.1.3 Lin_GetVersionInfo
```c
void Lin_GetVersionInfo(Std_VersionInfoType* versioninfo)
```
| Service ID | 0x01 |
| --- | --- |
| 描述 | 返回模块版本信息 |
#### 8.3.2 影响单一 LIN 通道的服务
##### 8.3.2.1 Lin_SendFrame (仅主节点)
```c
Std_ReturnType Lin_SendFrame(
uint8 Channel,
const Lin_PduType* PduInfoPtr
)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x04 |
| Sync/Async | Asynchronous |
| Reentrancy | Non Reentrant |
| 参数 (in) | Channel — 通道;PduInfoPtr — PDU(包含 PID、校验和模型、响应类型、Dl、SDU 数据指针) |
| 返回 | E_OK 接受;E_NOT_OK 不接受 |
| 描述 | 发送 LIN header 和 LIN response(如必要) |
- **[SWS_Lin_00192]** ⌈Lin_SendFrame 应发送 header (Break Field、Sync Byte Field、PID Field),并根据响应方向发送完整 LIN response。⌋ ()
##### 8.3.2.2 Lin_GoToSleep (仅主节点)
```c
Std_ReturnType Lin_GoToSleep(uint8 Channel)
```
| Service ID | 0x06 |
| --- | --- |
| 描述 | 在指定 LIN 通道上发送 go-to-sleep 命令 |
- **[SWS_Lin_00089]** ⌈Lin_GoToSleep 应在指定通道发送 go-to-sleep 命令。⌋ ()
- **[SWS_Lin_00266]** ⌈Lin_GoToSleep 应将通道状态设为 LIN_CH_SLEEP_PENDING,即使发送失败。⌋ (SRS_Lin_01566)
##### 8.3.2.3 Lin_GoToSleepInternal
```c
Std_ReturnType Lin_GoToSleepInternal(uint8 Channel)
```
| Service ID | 0x09 |
| --- | --- |
| 描述 | 将通道置 LIN_CH_SLEEP,启用唤醒检测,可选地进入硬件低功耗模式 |
##### 8.3.2.4 Lin_Wakeup
```c
Std_ReturnType Lin_Wakeup(uint8 Channel)
```
| Service ID | 0x07 |
| --- | --- |
| 描述 | 产生唤醒脉冲并置通道为 LIN_CH_OPERATIONAL |
##### 8.3.2.5 Lin_WakeupInternal
```c
Std_ReturnType Lin_WakeupInternal(uint8 Channel)
```
| Service ID | 0x0B |
| --- | --- |
| 描述 | 不产生唤醒脉冲,直接置通道为 LIN_CH_OPERATIONAL |
##### 8.3.2.6 Lin_GetStatus (仅主节点)
```c
Lin_StatusType Lin_GetStatus(
uint8 Channel,
uint8** Lin_SduPtr
)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x08 |
| 参数 (in) | Channel |
| 参数 (out) | Lin_SduPtr — 接收缓冲区指针的指针 |
| 返回 | Lin_StatusType (LIN_NOT_OK、LIN_TX_OK、LIN_TX_BUSY、LIN_RX_OK、LIN_RX_BUSY、LIN_RX_NO_RESPONSE、LIN_OPERATIONAL、LIN_CH_SLEEP) |
| 描述 | 获取 LIN 通道状态和当前帧操作的结果 |
### 8.4 回调通知
LIN 驱动不接受任何回调函数(从节点的回调由 LIN 接口提供)。
### 8.5 调度函数
LIN 驱动无调度函数(LIN 接口处理调度)。
### 8.6 期望接口
#### 8.6.1 强制接口
- Det_ReportError
- EcuM_SetWakeupEvent (用于唤醒上报)
#### 8.6.2 可选接口
- Dem_SetEventStatus
- LinIf_HeaderIndication (从节点)
- LinIf_RxIndication (从节点)
- LinIf_TxConfirmation (从节点)
- LinIf_LinErrorIndication (从节点)
- LinIf_WakeupConfirmation
#### 8.6.3 可配置接口
-
---
## 9. 时序图
> **[摘要]** 本章包含主节点和从节点的 LIN 帧接收时序图。详细图见原文 PDF 第 52-53 页。
### 9.1 接收 LIN 帧
#### 9.1.1 LIN 主节点
1. 上层调用 Lin_SendFrame 触发 header 发送;
2. 硬件发送 header,从节点回复 response;
3. 上层调用 Lin_GetStatus 轮询;
4. 状态为 LIN_RX_OK 时,Lin_GetStatus 返回缓冲区指针。
#### 9.1.2 LIN 从节点
1. 硬件接收 header,LIN 驱动调用 LinIf_HeaderIndication;
2. LIN 接口返回 PduPtr (含 SduPtr、Cs、Dl、Drc);
3. 根据 Drc 接收/发送/忽略 response;
4. 调用 LinIf_RxIndication 或 LinIf_TxConfirmation。
---
## 10. 配置规范
### 10.1 如何阅读本章
参考 [ECU Configuration Specification] 文档了解参数定义。
### 10.2 容器与配置参数
#### 10.2.1 Lin
LIN 模块根容器。
#### 10.2.2 LinGeneral
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| LinDevErrorDetect | bool | 启用/禁用开发错误检测 |
| LinIndex | int | 模块实例索引 |
| LinTimeoutDuration | float | 硬件状态变化超时(秒) |
| LinVersionInfoApi | bool | 是否启用版本信息 API |
#### 10.2.3 LinChannel
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| LinChannelId | int | 通道 ID |
| LinChannelBaudrate | int | 波特率 |
| LinChannelWakeupSupport | bool | 是否支持唤醒检测 |
| LinNodeType | enum | LIN_MASTER 或 LIN_SLAVE |
| LinClockRef | ref | 时钟引用 |
#### 10.2.4 LinGlobalConfig
全局配置容器。
#### 10.2.5 LinDemEventParameterRefs
DEM 事件引用。
### 10.3 已发布信息
按 BSW General 提供模块版本信息。
---
## 11. 不适用需求
部分 SRS_BSW 通用需求不在本规范范围内。详见原文 PDF 第 62 页。
---
## 翻译说明
- 本译本基于 AUTOSAR CP 4.4.0 (2018-10-31) 的 LIN 驱动规范 (Document ID 072,共 62 页)
- 严格保留 API 名称、SWS 需求 ID、AUTOSAR 方框符 ⌈⌋
- 摘要标记位置:
- 第 6 章需求可追溯性表
- 第 9 章时序图
- 第 11 章不适用需求列表