P1 batch translation: 94 PDFs (Communication + Diagnostics + SystemServices + MCAL)

This commit is contained in:
opencode-translator
2026-06-13 00:29:54 +08:00
parent 0d470d1f17
commit 6f293acbf7
95 changed files with 70811 additions and 83 deletions
+713
View File
@@ -0,0 +1,713 @@
# 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 章不适用需求列表