# LIN 接口规范 (Specification of LIN Interface) > **AUTOSAR CP Release 4.4.0** > **文档 ID 073: AUTOSAR_SWS_LINInterface** ## 元信息 | 项目 | 内容 | | --- | --- | | 文档标题 | LIN 接口规范 (Specification of LIN Interface) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 073 | | 文档状态 | Final | | 所属 AUTOSAR 标准 | Classic Platform | | 所属标准版本 | 4.4.0 | ## 文档变更历史 | 日期 | 版本 | 变更方 | 变更说明 | | --- | --- | --- | --- | | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 将 TP 定时器改为通道特定;删除虚拟 API(LinIf_CancelTransmit 等)并以 LinIfChannel.ShortName 替换 ChannelId;将 LIN 2.1 引用替换为 ISO 17987:2016(无功能修改);LIN Slave 支持(CONC_631);头文件清理;细微更正/澄清/编辑 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 运行时错误的引入;节点配置请求的 SRF 处理澄清;初始化时通道状态不一致的解决;LIN 调度表切换行为澄清 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 更改每个通道 MainFunction_ 的调用方式;新增调度表变更函数;变更 User_TxConfirmation 签名 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 移除可选接口配置类中 PostBuildTime;调用 增加 buffer 长度参数;改用默认错误跟踪器(DET) | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 更改 LinIf_Wakeup 返回 E_NOT_OK 描述;LinIfFrameRef.upperMultiplicity 由 '*' 改为 '1';修正 SWS_LinIf_00614 错别字 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | LinIfSlave 与 LinIfLength 标记为 obsolete;修改 签名 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 为 LINTP 物理与功能请求增加并行处理;LIN 总线唤醒处理调整;删除 NotifResultType 类型 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 修改 LinTp 重试与失败时缓冲区处理;调整 LinTp 接收非预期 PDU 的错误处理;调整向睡眠状态过渡时的唤醒操作 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 为 LIN TP 增加 As/Cs/Cr 超时观测;澄清 LIN TP 缓冲区处理需求;删除 LIN TP 的 CDD;补充收发器唤醒规范 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 添加 5.3.3 版本检查;参数 "NetworkHandleType Transceiver" 改名 "NetworkHandleType Channel";LinIf_TrcvModeType 等类型从 LIN 接口中删除;统一函数名 "WakeUp" 为 "Wakeup";时间配置参数单位改为 "秒" | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 支持 LIN 2.1 规范;增加 LIN 收发器驱动支持;移除 LIN 调度表管理器(由 BSW 模式管理器接管);扩展与复杂设备驱动交互;法律声明修订 | | 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 | | 2007-12-21 | 3.0.1 | AUTOSAR Administration | 增加与 LIN 状态管理器的交互;重新设计 LIN 接口配置;增加 LIN 响应错误检测;唤醒概念重新设计 | | 2007-01-24 | 2.1.15 | AUTOSAR Administration | 启动与唤醒针对收发器需求重做;文件结构与需求可追溯性按新模板调整;集成商反馈后配置重做;移除 API:LinIf_InitChannel() 和 LinIf_DeInitChannel() | | 2006-05-16 | 2.0 | AUTOSAR Administration | 初始发布 | --- ## 目录 - [1. 介绍与功能概述](#1-介绍与功能概述) - [1.1 架构概述](#11-架构概述) - [1.2 功能概述](#12-功能概述) - [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 接口** (LinIf) 与 **LIN 传输协议** (LIN TP) 的功能、API 和配置。LIN TP 是 LIN 接口的组成部分。 唤醒功能由 LIN 接口、LIN 驱动与 LIN 收发器驱动共同覆盖。 本文档基于 ISO 17987 系列规范 [19]。假定读者已熟悉这些规范。本文档不会重复说明 ISO 17987 的 LIN 功能。 LIN 接口模块适用于 ISO 17987 主节点和从节点(与 LIN 2.2、LIN 2.1 主节点兼容)。AUTOSAR 中的 LIN 实现在某些方面偏离了 ISO 17987 规范(如本文档所述),但在 LIN 总线上的行为不会改变。我们的目标是能够在 AUTOSAR LIN 实现(即 LIN 接口)中重用所有现有的 LIN 节点。 LIN 接口设计为硬件无关。与上层(PDU 路由器)和下层(LIN 驱动)模块之间的接口是良好定义的。 LIN 接口可以处理多个 LIN 驱动。一个 LIN 驱动可以支持多个通道。 ### 1.1 架构概述 根据分层软件架构 [2],LIN 接口在 BSW 架构中位于通信硬件抽象层。下图示例中,LIN 接口连接两个 LIN 驱动,但最常见配置是连接一个 LIN 驱动。 ``` AUTOSAR COM 诊断通信 LIN 状态管理器 管理器 或复杂驱动 | | I-PDU 复用器 PDU 路由器/复杂驱动 | =====通信硬件抽象===== LIN 接口(含 LIN TP) | LIN 收发器驱动 | I/O 驱动 通信驱动 DIO 驱动 LIN 驱动 1 LIN 驱动 2 | | µC LIN 1 LIN 2 ``` *图 1 – AUTOSAR BSW 软件架构(LIN 相关模块)* ### 1.2 功能概述 LIN 接口负责提供 ISO 17987 LIN 功能,即: - 为 ECU 作为主节点连接的每条 LIN 总线执行当前选定的调度(发送 header 与发送/接收 response)。 - 当上层请求时,切换主节点的调度表。 - 接受上层的帧传输请求并在合适的 LIN 帧中作为响应发送数据。 - 在合适的帧中收到响应时,向上层提供帧接收通知。 - 进入睡眠和唤醒服务。 - 错误处理。 - 诊断传输层服务。 - 从节点的节点配置与识别服务。 --- ## 2. 缩略语 除 ISO 17987 LIN 规范 [19] 中的缩略语外,本文档使用如下缩略语: | 缩略语 | 含义 | | --- | --- | | CF | LIN TP 中的 Continuous Frame | | FF | LIN TP 中的 First Frame | | ID | 标识符 (Identifier) | | LDF | LIN Description File (LIN 描述文件) | | LIN TP | LIN Transport Protocol (LIN 接口的组成部分) | | MRF | Master Request Frame | | NAD | Node Address (LIN 中每个从节点必须有唯一 NAD) | | NC | Node Configuration | | N_As | 发送方在 LIN 帧(任意 N-PDU)上的传输时间(见 ISO 17987-2 [19]) | | N_Cr | 直到下一个连续帧 N-PDU 接收的时间 | | N_Cs | 直到下一个连续帧 N-PDU 发送的时间 | | P2 | 诊断请求最后一帧在 LIN 总线上被接收 与 从节点能提供响应数据 之间的时间 | | P2* | 发送响应挂起帧(0x78)与 LIN 从节点能提供响应数据之间的时间 | | PID | Protected ID (受保护标识符) | | RX | Reception (接收) | | SID | Service Identifier (节点配置服务标识符) | | SF | LIN TP 中的 Single Frame | | SRF | Slave Response Frame | | SRS | Software Requirement Specification | | TX | Transmission (发送) | | 术语 | 描述 | | --- | --- | | Slot Delay | 调度表中两帧起始之间的时间。单位为特定集群的时基个数 | | Jitter | 最长延迟与最短延迟之间的差值(例如最差情况执行时间与最佳情况执行时间之差) | | Maximum frame length | 最大帧长是 ISO 17987-3 [19] 中定义的 TFRAME_MAX (标称帧长加 40%) | | Schedule entry is due | LIN 接口到达调度表中新条目,即将发起一帧(接收或发送) | | Slave-to-slave | 从主节点视角,LIN 总线上响应方向有 3 种:主节点发送、主节点接收、由一从节点发送给另一从节点接收。slave-to-slave 描述最后一种 | | Irrelevant frame | 从从节点视角,有 3 种方向:从节点发送、从节点接收、被忽略(主-另一从或两从之间)。被忽略的帧称为不相关帧 | | Relevant frame | 从从节点视角,被发送或接收的帧。不相关帧的对立面 | | Sporadic frame | 附加到 sporadic slot 的非条件帧之一 | | Sporadic slot | sporadic 帧的占位槽。命名为槽是因为它没有 LIN 帧 ID | | Tick | 处理所有通道通信的最小时间单位 | | Bus idle timeout | 总线无活动持续的时间 | --- ## 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] Requirements on LIN — AUTOSAR_SRS_LIN.pdf - [7] Specification of LIN Driver — AUTOSAR_SWS_LINDriver.pdf - [8] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf - [9] Specification of ECU State Manager — AUTOSAR_SWS_ECUStateManager.pdf - [10] Specification of LIN State Manager — AUTOSAR_SWS_LINStateManager.pdf - [11] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf - [12] Specification of LIN Transceiver Driver — AUTOSAR_SWS_LINTransceiverDriver.pdf - [13] Specification of PDU Router — AUTOSAR_SWS_PDURouter.pdf - [14] Specification of Communication Stack Types — AUTOSAR_SWS_CommunicationStackTypes.pdf - [15] Specification of Basic Software Mode Manager — AUTOSAR_SWS_BSWModeManager.pdf - [16] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf ### 3.2 相关标准与规范 - [17] LIN Specification Package Revision 2.1, November 24, 2006 — http://www.lin-subbus.org/ - [18] SAE J2602-1 (2012-11), LIN Network for Vehicle Applications - [19] ISO 17987:2016 (所有部分), Road vehicles – Local Interconnect Network (LIN) 注:非 ISO 的 LIN 规范(LIN 2.2A 与 LIN 2.1 by LIN Consortium)在 LIN 联盟关闭后仍可于 获取。 ### 3.3 相关规范 AUTOSAR 提供了通用的基础软件模块规范 [16] (SWS BSW General),该规范同样适用于 LIN 接口。因此,SWS BSW General 应被视为 LIN 接口的附加且必需规范。 --- ## 4. 约束与假设 ### 4.1 限制 LIN 接口模块在 LIN 集群中可用作 LIN 主节点或 LIN 从节点。每个 ECU 中只有一个 LIN 接口实例。如果底层 LIN 驱动支持多通道,则 LIN 接口可作用于多个集群。 假定所有已连接的 LIN ECU 在已运行时能够接收唤醒帧(因为 LIN ECU 以 LINIF_CHANNEL_SLEEP 状态启动)。 LIN 接口模块不支持以下功能: - ConditionalChangeNAD (SID 0xB3,LIN 2.1 定义,ISO 17987-3 已废弃) - DataDump (SID 0xB4,ISO 17987-3 中可选) 对于从节点,LIN 接口模块不支持: - ReadByIdentifier 使用非 0 和非 2 的标识符 (SID 0xB2,ISO 17987-3 强制) - 序列号 (Serial Number,ISO 17987-3, 第 6.2.2 条定义)。这意味着没有对应配置或访问序列号的 API。 - AutoAddressingSlave (SID 0xB8,ISO 17987-3 可选);Slave 节点位置检测 (SID 0xB5,LIN 2.x 可选) 对于主节点,LIN 接口模块不支持: - ReadByIdentifier (SID 0xB2,ISO 17987-3 强制) 注:ReadByIdentifier 不被视为节点配置,而是识别服务。因此,将其作为调度表命令支持没有意义。诊断层负责实现 ReadByIdentifier 的功能。 注:一个 ECU 在某通道上是主节点的同时,可以在另一通道上作为从节点。 ### 4.2 适用车域 本规范适用于所有使用 LIN 的车域。 ### 4.3 关于其他 LIN 标准的说明 J2602 [18] 与 LIN 2.1 [17] 是 ISO 17987 [19] 的其他标准化形式。这些替代标准是 ISO 17987 的前身,共享相同概念。 ISO 17987 节点与 LIN 2.1 节点兼容(见 ISO 17987-3, 附录 B.2.3)。 AUTOSAR LinIf 在与 ISO 17987 相同的部分支持上述标准。出于兼容性原因,基于较旧 LIN 标准(LIN 1.3、LIN 2.0、LIN 2.1、LIN 2.2)的现有从节点在与 ISO 17987 相同的部分受到支持。 --- ## 5. 与其他模块的依赖关系 本节描述 LIN 接口与基础软件中其他模块的关系,以及所使用的服务。 LIN 接口与下列模块对接: - Default Error Tracer – DET - ECU State Manager – EcuM - PDU Router – PduR - LIN State Manager – LinSM - BSW Mode Manager – BswM - AUTOSAR COM – Com - LIN Driver – Lin - LIN Transceiver Driver – LinTrcv ### 5.1 上层 #### 5.1.1 PDU Router 与 CDD LIN 接口连接到 PDU 路由器和/或上层的替代模块(如复杂驱动)用于帧的发送和接收。假定这些模块负责接收和发送时帧数据的拷贝。对于 TP 而言,PDU 路由器是上方唯一的模块,处理 TP 消息缓冲区(无论完整或分段消息)。 #### 5.1.2 镜像 (Mirroring) LIN 接口还连接到 Bus Mirroring 模块。如启用镜像,将报告所有接收和发送的 LIN 帧内容。TP 消息不报告给 Bus Mirroring 模块。 #### 5.1.3 LIN 状态管理器 LIN 接口连接到 LIN 状态管理器,后者负责整个 LIN 协议栈的控制流。它对 LIN 接口的作用: 1. 对于主节点,状态管理器向 LIN 接口转发调度表请求; 2. 状态管理器请求唤醒发送,对主节点还请求 sleep 命令发送。 #### 5.1.4 BSW 模式管理器 作为 LIN 接口一部分的 LIN TP 连接到 BSW 模式管理器,在上层请求 LIN TP 操作时请求调度表切换。 #### 5.1.5 AUTOSAR COM LIN 接口作为 LIN 从节点时,连接到 COM 以更新 response_error 信号值。 ### 5.2 下层 #### 5.2.1 LIN 驱动 LIN 接口需要由 [7] 定义的底层 LIN 驱动服务。LIN 接口假定 LIN 驱动提供以下原语: - 主节点的帧 header 和响应部分发送 (Lin_SendFrame),也指示帧响应方向(发送、接收或 slave-to-slave)。 - 主节点的进入睡眠命令发送 (Lin_GoToSleep)。 - 不发送 sleep 命令直接将通道设置为 LIN_CH_SLEEP 状态 (Lin_GoToSleepInternal)。 - 唤醒命令发送 (Lin_Wakeup)。 - 不发送唤醒命令直接将通道设置为 LIN_CH_OPERATIONAL 状态 (Lin_WakeupInternal)。 - 查询发送状态及接收响应部分 (Lin_GetStatus)(主节点),区分以下情形:成功接收/发送、未接收、错误接收/发送、接收中、发送中、通道在 sleep。 对于从节点,LIN 接口额外要求 LIN 驱动提供: - 接收到 header 的指示 (LinIf_HeaderIndication),也指示响应方向。 - 接收到响应的指示 (LinIf_RxIndication)。 - 发送响应的确认 (LinIf_TxConfirmation)。 - 检测到通信错误事件的指示 (LinIf_LinErrorIndication),区分:header 接收错误、响应帧错误、校验和错误、响应发送中位错误、不完整响应、无响应。 LIN 接口不直接使用或访问 LIN 硬件,所有交互均通过上述函数调用。 #### 5.2.2 LIN 收发器驱动 LIN 接口可选地需要 [12] 中定义的底层 LIN 收发器驱动服务。它将以下服务统一为一个接口: - 各底层 LIN 收发器设备的工作模式请求与读取服务。 - LIN 收发器唤醒原因支持的读取服务。 - 各使用的 LIN 收发器的唤醒事件状态启用/禁用/清除请求服务。 ### 5.3 文件结构 #### 5.3.1 头文件结构 本章描述将由 LIN 接口及其他模块包含的头文件。 - **[SWS_LinIf_00497]** ⌈LIN 接口应包含其连接到的所有上层 BSW 模块定义的头文件,如连接到 PDU Router 时包含 PduR_LinIf.h。⌋ () - **[SWS_LinIf_00561]** ⌈如启用 LIN TP (配置参数 LinIfTpSupported),LIN 接口应包含 PduR_LinTp.h。⌋ () - **[SWS_LinIf_00555]** ⌈如配置参数 LinIfTrcvDriverSupported 为 TRUE,LIN 接口应包含 LinTrcv.h。⌋ () - **[SWS_LinIf_00669]** ⌈LIN 接口应包含 CDD 回调声明所用的 ,该文件由配置参数 LinIfPublicCddHeaderFile 配置。⌋ () - **[SWS_LinIf_00872]** ⌈如启用 Bus Mirroring (配置参数 LinIfBusMirroringSupported),LIN 接口应包含 Mirror.h。⌋ () --- ## 6. 需求可追溯性 本章包含将 LIN 接口的 SWS 需求与输入需求文档(SRS)关联的矩阵。 | 需求 ID | 描述 | 满足者 | | --- | --- | --- | | SRS_BSW_00003 | 所有软件模块应提供版本与标识信息 | SWS_LinIf_99999 | | SRS_BSW_00010 | 所有 BSW 模块的内存消耗应在所有支持平台的定义配置下记录 | SWS_LinIf_99999 | | SRS_BSW_00101 | BSW 模块应能在独立的初始化函数中初始化变量和硬件 | SWS_LinIf_00198, SWS_LinIf_00350 | | SRS_BSW_00167 | 所有 AUTOSAR BSW 模块应提供配置规则和约束以支持合理性检查 | SWS_LinIf_00375 | | SRS_BSW_00170 | AUTOSAR 软件组件应提供有关其对故障、信号质量、驱动需求依赖的信息 | SWS_LinIf_00373 | | SRS_BSW_00171 | ECU 中不需要的 BSW 组件可选功能应在预编译时可配置 | SWS_LinIf_00310, SWS_LinIf_00387 | | SRS_BSW_00321 | AUTOSAR BSW 模块版本号应按特定规则枚举 | SWS_LinIf_99999 | | SRS_BSW_00327 | 错误值命名约定 | SWS_LinIf_00376, SWS_LinIf_00729 | | SRS_BSW_00328 | 所有 BSW 模块应避免代码重复 | SWS_LinIf_00386 | | SRS_BSW_00331 | 所有 BSW 模块应严格分离错误和状态信息 | SWS_LinIf_99999 | > **[摘要]** 需求追溯表共包含 90+ 条目,涵盖 SRS_BSW_*、SRS_Lin_* 系列。完整表见原文 PDF 第 22-25 页。 主要 LIN 特定需求: | 需求 ID | 描述 | 满足者 | | --- | --- | --- | | SRS_Lin_01502 | LIN 接口应支持 RX/TX 通知 API | SWS_LinIf_00033, SWS_LinIf_00128, SWS_LinIf_00734, SWS_LinIf_00741 | | SRS_Lin_01504 | AUTOSAR 架构适用于 LIN 主节点 | SWS_LinIf_00248 | | SRS_Lin_01514 | LIN 接口应通知上层唤醒事件 | SWS_LinIf_00378 | | SRS_Lin_01515 | LIN 接口应提供唤醒 LIN 通道集群的 API | SWS_LinIf_00205 | | SRS_Lin_01523 | 应有 API 调用以使 LIN 总线进入睡眠 | SWS_LinIf_00204 | | SRS_Lin_01534 | AUTOSAR LIN 传输层应支持半双工物理连接 | SWS_LinIf_00062 | | SRS_Lin_01540 | LIN 传输层应提供初始化 API | SWS_LinIf_00350 | | SRS_Lin_01544 | 应处理错误 | SWS_LinIf_00079, SWS_LinIf_00651 | | SRS_Lin_01546 | LIN 接口应为主节点提供调度表处理器 | SWS_LinIf_00028, SWS_LinIf_00384, SWS_LinIf_00393 | | SRS_Lin_01551 | 一个 LIN 接口应支持一个或多个 LIN 驱动 | SWS_LinIf_00386 | | SRS_Lin_01594 | LIN 从节点应支持节点配置与识别服务 | SWS_LinIf_00810, SWS_LinIf_00811, SWS_LinIf_00813 | | SRS_Lin_01595 | LIN 接口应支持 LIN 从节点 response_error 信号设置与清除 | SWS_LinIf_00763, SWS_LinIf_00764 | | SRS_Lin_01596 | LIN 接口应为从节点提供总线空闲条件观测 | SWS_LinIf_00751, SWS_LinIf_00755 | --- ## 7. 功能规范 无需重新阐述 ISO 17987 规范 [19] 中已规定的需求。但 AUTOSAR 有一些特定细节和未充分定义的部分,这些将在此规定。 LIN 接口应支持 ISO 17987 规范中主节点和从节点的行为。 - **[SWS_LinIf_00248]** ⌈LIN 接口应支持 ISO 17987 规范中主节点和从节点的行为。⌋ (SRS_BSW_00425, SRS_Lin_01576, SRS_Lin_01504, SRS_Lin_01577) 上述需求基本上意味着从 ISO 17987 节点到 LIN 接口节点的通信将是等效的。 - **[SWS_LinIf_00249]** ⌈LIN 接口应以现有 LIN 节点可重用的方式实现 LIN 行为。⌋ () - **[SWS_LinIf_00386]** ⌈LIN 接口应能处理一个或多个 LIN 通道。⌋ (SRS_BSW_00328, SRS_Lin_01551) ### 7.1 帧传输 ISO 17987 中协议规范的全部功能均被使用。某些部分需要澄清和附加需求以适配 LIN 接口。 #### 7.1.1 帧类型 适用于 ISO 17987 规范中规定的不同帧类型。现有帧类型: - Unconditional frame (无条件帧) - Event-triggered frame (事件触发帧) - Sporadic frame (Sporadic 帧) - Diagnostic frames MRF 与 SRF (诊断帧) - Reserved frames (保留帧) ##### 7.1.1.1 无条件帧 LIN 集群中的常规帧类型。其在总线上的传输严格遵循调度表。 ##### 7.1.1.2 事件触发帧 事件触发帧的报文设计应使其能与等效的无条件帧区分。 - **[SWS_LinIf_00009]** ⌈LIN 接口应将事件触发帧视为无条件帧,但接收端的 PID 不需与帧 ID 相同。⌋ () ##### 7.1.1.3 Sporadic 帧 Sporadic 帧总是从主节点发送。当 sporadic slot 到期时: - **[SWS_LinIf_00010]** ⌈LIN 接口仅在帧的至少一个信号被更新时才发送对应于该 sporadic slot 的 sporadic 帧。⌋ () ##### 7.1.1.4 诊断帧 MRF 与 SRF MRF 与 SRF 用于 LIN TP。 ##### 7.1.1.5 保留帧 保留帧不被 LIN 接口处理。 #### 7.1.2 帧接收 - **[SWS_LinIf_00033]** ⌈LIN 接口应轮询 LIN 驱动以确定帧成功接收/发送状态。⌋ (SRS_Lin_01502, SRS_Lin_01558) - **[SWS_LinIf_00128]** ⌈如帧接收/发送成功,LIN 接口应分别调用相关上层模块的 RX 指示或 TX 确认。⌋ (SRS_Lin_01502, SRS_Lin_01558) - **[SWS_LinIf_00734]** ⌈帧接收失败应被 LIN 接口处理。⌋ (SRS_Lin_01502, SRS_Lin_01558) #### 7.1.3 帧发送 主节点的帧发送由调度表驱动。LIN 接口在通道到期时发送对应 header 和响应。 - **[SWS_LinIf_00201]** ⌈LIN 接口的 `LinIf_Transmit` API 应在 PDU 路由器请求时启动 LIN 帧的发送。⌋ (SRS_Lin_01571) #### 7.1.4 Slave-to-slave 通信(仅主节点) 当主节点的调度表条目到期且 PDU 方向为 slave-to-slave 时,LIN 接口发送 header 但不发送响应。 #### 7.1.5 不相关通信(仅从节点) 当从节点检测到接收的 header PID 与本节点的相关帧 PID 都不匹配时,该帧被忽略。 ### 7.2 调度(仅主节点) LIN 接口具备调度表管理器,处理调度表的切换和帧分派。 #### 7.2.1 调度表管理器 - **[SWS_LinIf_00202]** ⌈LIN 接口应支持运行调度表。⌋ (SRS_Lin_01564) - **[SWS_LinIf_00495]** ⌈LIN 接口应通过 LinSM 上层的请求切换调度表。⌋ (SRS_Lin_01564) - **[SWS_LinIf_00028]** ⌈LIN 接口应在主节点中实现调度表处理。⌋ (SRS_Lin_01546) ### 7.3 Main function LIN 接口的 main function 用于发起帧、检查发送/接收状态、超时检测等。 - **[SWS_LinIf_00384]** ⌈LIN 接口应为每个通道提供 main 函数。⌋ (SRS_BSW_00373, SRS_Lin_01546, SRS_Lin_01555, SRS_Lin_01561) ### 7.4 网络管理 #### 7.4.1 节点管理 LIN 接口为每个通道维护以下状态: - LINIF_CHANNEL_OPERATIONAL - LINIF_CHANNEL_SLEEP - LINIF_CHANNEL_SLEEP_PENDING #### 7.4.2 进入睡眠过程 当 LIN State Manager 调用 `LinIf_GotoSleep` 时: - 主节点:LIN 接口在合适的调度槽中发送 sleep 命令(MRF 0x3C with 0x00...)。 - 从节点:监测总线 sleep 命令并通知 LinSM 当总线进入睡眠。 #### 7.4.3 唤醒过程 - **[SWS_LinIf_00205]** ⌈LinIf_Wakeup API 应触发唤醒命令。⌋ (SRS_Lin_01515) - **[SWS_LinIf_00459]** ⌈如向睡眠过渡时发生唤醒,通道应返回 OPERATIONAL 状态。⌋ (SRS_Lin_01560) ### 7.5 状态管理 #### 7.5.1 Response_error 信号 (仅从节点) - **[SWS_LinIf_00763]** ⌈LIN 接口应在检测到错误时设置 response_error 信号。⌋ (SRS_Lin_01595) - **[SWS_LinIf_00764]** ⌈LIN 接口应在成功 RX 后清除 response_error 信号。⌋ (SRS_Lin_01595) ### 7.6 诊断与节点配置 #### 7.6.1 主节点中的节点配置 主节点通过 MRF/SRF 实现节点配置。 #### 7.6.2 从节点中的节点配置 - **[SWS_LinIf_00810]** ⌈LIN 从节点应支持 ISO 17987-3 强制的节点配置服务。⌋ (SRS_Lin_01594) - **[SWS_LinIf_00811]** ⌈LIN 从节点应处理 AssignNAD、AssignFrameIdRange、ReadByIdentifier (ID 0/2)、SaveConfiguration 等服务。⌋ (SRS_Lin_01594) #### 7.6.3 诊断 – 传输协议 LIN TP 支持单帧(SF)和多帧(FF + CF)报文。 - **[SWS_LinIf_00062]** ⌈LIN TP 应支持半双工连接,主节点支持功能请求传输。⌋ (SRS_Lin_01534, SRS_Lin_01592) - **[SWS_LinIf_00313]** ⌈AUTOSAR LIN TP 应基于 ISO 17987 的诊断传输层。⌋ (SRS_Lin_01579) - **[SWS_LinIf_00314]** ⌈应允许每个通道有一个 TP 实例。⌋ (SRS_Lin_01574) ##### LIN TP 超时 - **[SWS_LinIf_00617]** ⌈LIN TP 应支持 N_As 超时。⌋ (SRS_Lin_01593) - **[SWS_LinIf_00621]** ⌈LIN TP 应支持 N_Cs 超时。⌋ (SRS_Lin_01593) - **[SWS_LinIf_00623]** ⌈LIN TP 应支持 N_Cr 超时。⌋ (SRS_Lin_01593) ### 7.7 多通道与多驱动处理 #### 7.7.1 多通道 LIN 接口可处理多个通道。每个通道独立处理调度、超时、状态。 #### 7.7.2 多 LIN 驱动 LIN 接口可同时处理多个 LIN 驱动。 #### 7.7.3 多 LIN 收发器驱动 LIN 接口可与多个 LIN 收发器驱动协作。 ### 7.8 错误分类 #### 7.8.1 开发错误 | 错误名 | 错误码 | 含义 | | --- | --- | --- | | LINIF_E_UNINIT | 0x00 | API 在 LIN 接口未初始化时调用 | | LINIF_E_PARAMETER | 0x02 | API 参数错误 | | LINIF_E_PARAMETER_POINTER | 0x03 | API 空指针参数 | | LINIF_E_NONEXISTENT_CHANNEL | 0x04 | 不存在的通道 ID | | LINIF_E_NONEXISTENT_SCHEDULE | 0x06 | 不存在的调度 ID | | LINIF_E_SCHEDULE_REQUEST_ERROR | 0x07 | 调度请求错误 | | LINIF_E_PARAMETER_TIMEOUT | 0x09 | TP 超时参数错误 | | LINIF_E_RESPONSE | 0x0A | 响应错误 | #### 7.8.2 运行时错误 - **[SWS_LinIf_00729]** ⌈LIN 接口应根据规定上报运行时错误。⌋ (SRS_BSW_00452, SRS_BSW_00327, SRS_BSW_00385) #### 7.8.3 瞬态故障 LIN 接口不上报瞬态故障。 #### 7.8.4 生产错误 LIN 接口不上报生产错误。 #### 7.8.5 扩展生产错误 LIN 接口不上报扩展生产错误。 --- ## 8. API 规范 ### 8.1 导入类型 #### 8.1.1 标准类型 | 类型 | 来源 | | --- | --- | | Std_ReturnType | Std_Types.h | | Std_VersionInfoType | Std_Types.h | #### 8.1.2 类型定义 ##### LinIf_Mode ```c typedef uint8 LinIf_Mode; ``` 取值: - LINIF_OPERATIONAL = 0x00 - LINIF_SLEEP = 0x01 ##### LinIf_SchHandleType ```c typedef uint8 LinIf_SchHandleType; ``` 调度表索引类型。值 0 (LINIF_NULL_SCHEDULE) 表示空调度表。 ##### LinTp_Mode ```c typedef uint8 LinTp_Mode; ``` 取值: - LINTP_APPLICATIVE_SCHEDULE = 0 - LINTP_DIAG_REQUEST = 1 - LINTP_DIAG_RESPONSE = 2 ### 8.2 LIN 接口 API #### 8.2.1 LinIf_Init ```c void LinIf_Init( const LinIf_ConfigType* ConfigPtr ) ``` | 项目 | 内容 | | --- | --- | | Service ID | 0x01 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant | | 参数 (in) | ConfigPtr — LIN 接口配置数据指针 | | 返回值 | 无 | | 描述 | 初始化 LIN 接口模块 | - **[SWS_LinIf_00198]** ⌈LinIf_Init 应初始化所有 LIN 接口内部变量并将 LIN 通道置于 LINIF_CHANNEL_SLEEP 状态。⌋ (SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414, SRS_BSW_00416, SRS_Lin_01569) #### 8.2.2 LinIf_GetVersionInfo ```c void LinIf_GetVersionInfo( Std_VersionInfoType* versioninfo ) ``` | 项目 | 内容 | | --- | --- | | Service ID | 0x02 | | Sync/Async | Synchronous | | Reentrancy | Reentrant | | 参数 (out) | versioninfo — 版本信息指针 | - **[SWS_LinIf_00340]** ⌈返回模块的版本信息。⌋ (SRS_BSW_00407) #### 8.2.3 LinIf_Transmit ```c Std_ReturnType LinIf_Transmit( PduIdType TxPduId, const PduInfoType* PduInfoPtr ) ``` | 项目 | 内容 | | --- | --- | | Service ID | 0x04 | | Sync/Async | Synchronous | | Reentrancy | Reentrant for different PduIds | | 参数 (in) | TxPduId — 要发送的 PDU ID;PduInfoPtr — PDU 数据指针 | | 返回值 | E_OK 接受;E_NOT_OK 失败 | | 描述 | 请求传输 PDU | - **[SWS_LinIf_00201]** ⌈LinIf_Transmit API 在 PDU 路由器请求时应启动 LIN 帧的发送。⌋ (SRS_Lin_01571) #### 8.2.4 LinIf_ScheduleRequest ```c Std_ReturnType LinIf_ScheduleRequest( NetworkHandleType Channel, LinIf_SchHandleType Schedule ) ``` | 项目 | 内容 | | --- | --- | | Service ID | 0x05 | | Sync/Async | Synchronous | | Reentrancy | Non Reentrant for the same Channel | | 参数 (in) | Channel — LIN 通道索引;Schedule — 调度表索引 | | 返回值 | E_OK 接受;E_NOT_OK 失败 | | 描述 | 请求切换调度表(仅主节点) | #### 8.2.5 LinIf_GotoSleep ```c Std_ReturnType LinIf_GotoSleep( NetworkHandleType Channel ) ``` | Service ID | 0x06 | | --- | --- | | 描述 | 启动进入睡眠过程 | - **[SWS_LinIf_00204]** ⌈LinIf_GotoSleep 应启动 LIN 总线进入睡眠过程。⌋ (SRS_Lin_01523) #### 8.2.6 LinIf_Wakeup ```c Std_ReturnType LinIf_Wakeup( NetworkHandleType Channel ) ``` | Service ID | 0x07 | | --- | --- | | 描述 | 启动唤醒过程 | #### 8.2.7 LinIf_SetTrcvMode ```c Std_ReturnType LinIf_SetTrcvMode( NetworkHandleType Channel, LinTrcv_TrcvModeType TransceiverMode ) ``` | Service ID | 0x09 | | --- | --- | | 描述 | 设置收发器模式 | - **[SWS_LinIf_00544]** ⌈LIN 接口应支持收发器模式请求。⌋ (SRS_Lin_01584, SRS_Lin_01585, SRS_Lin_01586) #### 8.2.8 LinIf_GetTrcvMode ```c Std_ReturnType LinIf_GetTrcvMode( NetworkHandleType Channel, LinTrcv_TrcvModeType* TransceiverModePtr ) ``` | Service ID | 0x0A | | --- | --- | | 描述 | 读取收发器模式 | - **[SWS_LinIf_00545]** ⌈LIN 接口应支持读取收发器模式。⌋ (SRS_Lin_01587) #### 8.2.9 LinIf_GetTrcvWakeupReason ```c Std_ReturnType LinIf_GetTrcvWakeupReason( NetworkHandleType Channel, LinTrcv_TrcvWakeupReasonType* TrcvWuReasonPtr ) ``` | Service ID | 0x0B | | --- | --- | | 描述 | 读取收发器唤醒原因 | - **[SWS_LinIf_00547]** ⌈LIN 接口应支持读取收发器唤醒原因。⌋ (SRS_Lin_01588) #### 8.2.10 LinIf_SetTrcvWakeupMode ```c Std_ReturnType LinIf_SetTrcvWakeupMode( NetworkHandleType Channel, LinTrcv_TrcvWakeupModeType LinTrcvWakeupMode ) ``` | Service ID | 0x0C | | --- | --- | | 描述 | 配置收发器唤醒模式 | - **[SWS_LinIf_00550]** ⌈LIN 接口应支持配置收发器唤醒通知。⌋ (SRS_Lin_01589) #### 8.2.11 LinIf_GetPIDTable (从节点) ```c Std_ReturnType LinIf_GetPIDTable( NetworkHandleType Channel, uint8** PidBufferPtr, uint8* PidBufferLengthPtr ) ``` | Service ID | 0x16 | | --- | --- | | 描述 | 读取从节点的 PID 表 | #### 8.2.12 LinIf_SetPIDTable (从节点) ```c Std_ReturnType LinIf_SetPIDTable( NetworkHandleType Channel, uint8* PidBufferPtr, uint8 PidBufferLength ) ``` | Service ID | 0x17 | | --- | --- | | 描述 | 设置从节点的 PID 表 | #### 8.2.13 LinIf_GetConfiguredNAD (从节点) ```c Std_ReturnType LinIf_GetConfiguredNAD( NetworkHandleType Channel, uint8* NadPtr ) ``` | Service ID | 0x18 | | --- | --- | | 描述 | 读取已配置的 NAD | #### 8.2.14 LinIf_SetConfiguredNAD (从节点) ```c Std_ReturnType LinIf_SetConfiguredNAD( NetworkHandleType Channel, uint8 Nad ) ``` | Service ID | 0x19 | | --- | --- | | 描述 | 设置已配置的 NAD | #### 8.2.15 LinTp_Init ```c void LinTp_Init( const LinTp_ConfigType* ConfigPtr ) ``` | Service ID | 0x40 | | --- | --- | | 描述 | 初始化 LIN TP | - **[SWS_LinIf_00350]** ⌈LinTp_Init 应初始化所有 LIN TP 内部变量。⌋ (SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414, SRS_BSW_00416, SRS_Lin_01540) #### 8.2.16 LinTp_Transmit ```c Std_ReturnType LinTp_Transmit( PduIdType TxPduId, const PduInfoType* PduInfoPtr ) ``` | Service ID | 0x49 | | --- | --- | | 描述 | 请求传输 TP 消息 | #### 8.2.17 LinTp_GetVersionInfo ```c void LinTp_GetVersionInfo( Std_VersionInfoType* versioninfo ) ``` | Service ID | 0x42 | | --- | --- | | 描述 | 获取 TP 版本信息 | #### 8.2.18 LinTp_Shutdown ```c void LinTp_Shutdown(void) ``` | Service ID | 0x43 | | --- | --- | | 描述 | 关闭 LIN TP | #### 8.2.19 LinTp_ChangeParameter ```c Std_ReturnType LinTp_ChangeParameter( PduIdType id, TPParameterType parameter, uint16 value ) ``` | Service ID | 0x44 | | --- | --- | | 描述 | 在 TP 运行时修改参数 | #### 8.2.20 LinIf_CheckWakeup ```c Std_ReturnType LinIf_CheckWakeup( EcuM_WakeupSourceType WakeupSource ) ``` | Service ID | 0x60 | | --- | --- | | 描述 | 检查唤醒源 | #### 8.2.21 LinIf_EnableBusMirroring ```c Std_ReturnType LinIf_EnableBusMirroring( NetworkHandleType Channel, boolean MirroringActive ) ``` | Service ID | 0x61 | | --- | --- | | 描述 | 启用/禁用 LIN 通道总线镜像 | ### 8.3 回调通知 #### 8.3.1 LinIf_WakeupConfirmation ```c void LinIf_WakeupConfirmation( EcuM_WakeupSourceType WakeupSource ) ``` 由 ICU 驱动调用,确认 LIN 接口的唤醒事件。 #### 8.3.2 LinIf_HeaderIndication (从节点) ```c Std_ReturnType LinIf_HeaderIndication( NetworkHandleType Channel, Lin_PduType* PduPtr ) ``` LIN 驱动收到 header 时通知 LIN 接口。 #### 8.3.3 LinIf_RxIndication (从节点) ```c void LinIf_RxIndication( NetworkHandleType Channel, uint8* Lin_SduPtr ) ``` LIN 驱动收到响应时通知 LIN 接口。 #### 8.3.4 LinIf_TxConfirmation (从节点) ```c void LinIf_TxConfirmation( NetworkHandleType Channel ) ``` LIN 驱动确认响应已发送。 #### 8.3.5 LinIf_LinErrorIndication (从节点) ```c void LinIf_LinErrorIndication( NetworkHandleType Channel, Lin_SlaveErrorType ErrorStatus ) ``` LIN 驱动通知 LIN 接口出现通信错误。 ### 8.4 调度函数 #### 8.4.1 LinIf_MainFunction_ ```c void LinIf_MainFunction_(void) ``` 每通道一个 main 函数。负责轮询 LIN 驱动、调度表执行、超时观测。 ### 8.5 期望接口 #### 8.5.1 强制接口 - Lin_SendFrame - Lin_GoToSleep - Lin_GoToSleepInternal - Lin_Wakeup - Lin_WakeupInternal - Lin_GetStatus - PduR_LinIfRxIndication - PduR_LinIfTxConfirmation - PduR_LinIfTriggerTransmit - Det_ReportError #### 8.5.2 可选接口 - LinTrcv_SetOpMode、LinTrcv_GetOpMode、LinTrcv_GetBusWuReason、LinTrcv_SetWakeupMode、LinTrcv_CheckWakeup - BswM_LinTp_RequestMode - Com_ReceiveSignal、Com_SendSignal - Mirror_ReportLinFrame - Det_ReportRuntimeError - EcuM_BswErrorHook #### 8.5.3 可配置接口 - - - --- ## 9. 时序图 > **[摘要]** 本章包含主从节点的帧发送、帧接收、slave-to-slave、不相关通信、sporadic 帧、事件触发帧、TP 消息发送/接收、进入睡眠过程、唤醒过程、内部唤醒等场景的 UML 时序图。详细图见原文 PDF 第 110-128 页。 ### 9.1 帧发送 #### 9.1.1 主节点中的帧发送 主节点调度表条目到期时,主流程: 1. LinIf 在 main 函数中检查调度表条目; 2. 调用 PduR 获取数据; 3. 调用 Lin_SendFrame 发送 header + response; 4. 下次 main 调用时检查 Lin_GetStatus; 5. 成功后调用 PduR_LinIfTxConfirmation。 #### 9.1.2 从节点中的帧发送 从节点接收 header 时: 1. LIN 驱动调用 LinIf_HeaderIndication; 2. LinIf 调用 PduR_LinIfTriggerTransmit 获取数据并交给驱动; 3. 驱动调用 LinIf_TxConfirmation; 4. LinIf 调用 PduR_LinIfTxConfirmation。 ### 9.2 帧接收 类似过程,使用 RX 通知。 ### 9.6 TP 消息发送 TP 消息分段为 SF 或 FF + CF 序列,通过 MRF/SRF 在专门调度表中发送。 --- ## 10. 配置规范 ### 10.1 如何阅读本章 参考 [ECU Configuration Specification] 文档了解参数定义结构。 ### 10.2 容器与配置参数 #### 10.2.1 配置工具 LIN 接口配置由生成器工具基于 ARXML 输入生成 C 代码与头文件。 ### 10.3 LinIf_Configuration #### 10.3.1 LinIf 根容器。 #### 10.3.2 LinIfGlobalConfig 全局配置容器。 #### 10.3.3 LinIfGeneral | 参数 | 类型 | 说明 | | --- | --- | --- | | LinIfDevErrorDetect | bool | 启用/禁用开发错误检测 | | LinIfMultipleDriversSupported | bool | 是否支持多 LIN 驱动 | | LinIfTrcvDriverSupported | bool | 是否支持 LIN 收发器驱动 | | LinIfTpSupported | bool | 是否支持 LIN TP | | LinIfBusMirroringSupported | bool | 是否支持总线镜像 | | LinIfMainFunctionPeriod | float | main 函数周期(秒) | | LinIfMaxFrameLength | int | 最大帧长 | | LinIfPublicCddHeaderFile | string | CDD 头文件名 | > **[摘要]** 完整参数列表(包含 LinIfChannel、LinIfFrame、LinIfNodeType、LinIfScheduleTable、LinIfEntry、LinIfMaster、LinIfSlave、LinIfNodeConfigurationIdentification、LinIfTransceiverDrvConfig 等容器)详见原文 PDF 第 129-157 页。 #### 10.3.4 LinIfChannel LIN 通道配置容器。 | 参数 | 类型 | 说明 | | --- | --- | --- | | LinIfChannelId | int | 通道 ID | | LinIfChannelRef | ref | 引用 LIN 通信通道 | | LinIfNodeType | ref | 引用主节点或从节点类型 | | LinIfMainFunctionPeriod | float | 通道 main 函数周期 | #### 10.3.5 LinIfNodeType 主节点或从节点容器。包含从节点的 NAD、PID 表、调度表等。 #### 10.3.6 LinIfFrame LIN 帧定义。 | 参数 | 类型 | 说明 | | --- | --- | --- | | LinIfChecksumType | enum | CLASSIC 或 ENHANCED | | LinIfFrameId | int | 帧 ID (0-59) | ### 10.4 LIN 传输层配置 #### 10.4.1 LinTp LIN TP 根容器。 #### 10.4.2 LinTpGeneral 启用开发错误检测、版本信息 API 等通用参数。 #### 10.4.3 LinTpGlobalConfig | 参数 | 类型 | 说明 | | --- | --- | --- | | LinTpMaxBufReq | int | 最大缓冲区请求次数 | | LinTpVersionInfoApi | bool | 是否启用版本信息 API | #### 10.4.4 LinTpChannelConfig 每通道 TP 配置。 | 参数 | 类型 | 说明 | | --- | --- | --- | | LinTpNas | float | N_As 超时(秒) | | LinTpNcs | float | N_Cs 超时(秒) | | LinTpNcr | float | N_Cr 超时(秒) | #### 10.4.5 LinTpRxNSdu RX TP 消息(N-SDU)配置。 #### 10.4.6 LinTpTxNSdu TX TP 消息(N-SDU)配置。 ### 10.5 已发布信息 按 BSW General 提供模块版本信息。 --- ## 11. 不适用需求 部分 SRS_BSW 通用需求在 LIN 接口规范范围之外。详细列表见原文 PDF 第 169 页。 --- ## 翻译说明 - 本译本基于 AUTOSAR CP 4.4.0 (2018-10-31 发布) 的 LIN 接口规范 (Document ID 073) - 严格保留 API 名称、SWS 需求 ID、协议 ID、AUTOSAR 方框符 ⌈⌋ - 部分大型参考表与时序图采用摘要标记,完整内容请参阅原文 PDF (169 页) - 摘要标记位置: - 第 6 章需求可追溯性表 - 第 9 章时序图章节 - 第 10.3 章配置参数表(详细参数) - 第 11 章不适用需求列表