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
@@ -0,0 +1,554 @@
# LIN 状态管理器规范 (Specification of LIN State Manager)
> **AUTOSAR CP Release 4.4.0**
> **文档 ID 255: AUTOSAR_SWS_LIN_StateManager**
## 元信息
| 项目 | 内容 |
| --- | --- |
| 文档标题 | LIN 状态管理器规范 |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 255 |
| 文档状态 | Final |
| 所属 AUTOSAR 标准 | Classic Platform |
| 所属标准版本 | 4.4.0 |
## 文档变更历史
| 日期 | 版本 | 变更方 | 变更说明 |
| --- | --- | --- | --- |
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | LIN Slave 支持 (CONC_634);LIN 2.1 引用替换为 ISO 17987:2016 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 修正/澄清/编辑 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 修复 LinSM_ScheduleRequest 时序 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | DET 引用更名为"默认错误跟踪器" |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 增加 LIN 模式请求重试 |
| 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 | 调度切换的细化 |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 重新设计模式管理交互 |
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 加入更多调度同步管理 |
| 2010-02-02 | 3.1.4 | AUTOSAR Administration | 与 ComM 集成 |
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 法律声明修订 |
| 2007-12-21 | 3.0.1 | 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 状态管理器** (LinSM) 的功能、API 和配置。
LinSM 负责 LIN 总线的控制流。
### 1.1 架构概述
LinSM 位于通信服务层,与 ComM(上层)、LinIf(下层)、BswM 交互。
### 1.2 功能概述
LinSM 负责:
- 当上层请求时切换调度表 (仅 LIN 主节点)
- 处理进入睡眠和唤醒(上层请求或下层指示)
- 通知上层进入新状态
---
## 2. 缩略语
| 缩略语 | 描述 |
| --- | --- |
| API | Application Program Interface |
| AUTOSAR | Automotive Open System Architecture |
| BSW | Basic Software |
| BswM | BSW Mode Manager |
| ComM | Communication Manager |
| DCM | Diagnostic Communication Manager |
| DEM | Diagnostic Event Manager |
| DET | Default Error Tracer |
| ECU | Electric Control Unit |
| ID | Identifier |
| ISR | Interrupt Service Routine |
| LIN | Local Interconnect Network |
| LinIf | LIN Interface |
| LinSM | LIN State Manager |
| MCAL | Microcontroller Abstraction Layer |
| PDU | Protocol Data Unit |
| RTE | Run Time Environment |
| RX | Receive |
| SPAL | Standard Peripheral Abstraction Layer |
| SRS | Software Requirement Specification |
| SW | Software |
| SWS | Software Design Specification |
| TP | Transport Protocol |
| TX | Transmit |
---
## 3. 相关文档
### 3.1 输入文档
- [1] List of Basic Software Modules
- [2] Layered Software Architecture
- [3] General Requirements on Basic Software Modules
- [4] Specification of Standard Types
- [5] Specification of Default Error Tracer
- [6] Requirements on LIN
- [7] Specification of LIN Interface
- [8] Specification of Diagnostic Event Manager
- [9] Specification of ECU Configuration
- [10] Specification of LIN Driver
- [11] Specification of Communication Manager
- [12] Specification of Basic Software Mode Manager
- [13] General Specification of Basic Software Modules
### 3.2 相关标准
- [14] ISO 17987:2016 (所有部分)
### 3.3 相关规范
AUTOSAR 提供 SWS BSW General [13],该规范同样适用于 LIN 状态管理器。
---
## 4. 约束与假设
### 4.1 限制
每个 ECU 最多一个 LinSM 实例。如底层 LIN 驱动支持多网络,LinSM 可作为多个集群的主或从节点。
所有调度表切换引用仅适用于 LIN 主节点。
### 4.2 适用车域
适用于所有使用 LIN 的车域。
---
## 5. 与其他模块的依赖
- **[SWS_LinSM_00001]** ⌈LIN Interface LinIf⌋ (SRS_BSW_00384)
- **[SWS_LinSM_00085]** ⌈Diagnostic Event Manager DEM⌋ (SRS_BSW_00384)
- **[SWS_LinSM_00086]** ⌈Default Error Tracer DET⌋ (SRS_BSW_00384)
- **[SWS_LinSM_00105]** ⌈Communication Manager ComM⌋ (SRS_BSW_00384)
- **[SWS_LinSM_00196]** ⌈BSW Mode Manager - BswM⌋ (SRS_BSW_00384)
### 5.1 上层关系
#### 5.1.1 操作系统
LinSM 内部数据访问无需 OS 保护(仅简单类型访问)。
#### 5.1.2 DET 模块
Det_ReportError 用于上报开发和运行时错误。
#### 5.1.3 DEM 模块
未使用。
#### 5.1.4 ComM 模块
ComM 是 LinSM 的主要客户端。通过 LinSM_RequestComMode 请求通信模式;通过 ComM_BusSM_ModeIndication 反馈模式变化。
#### 5.1.5 BswM 模块
通过 BswM_LinSM_CurrentState 和 BswM_LinSM_CurrentSchedule 通知当前状态。
### 5.2 下层关系
#### 5.2.1 LinIf 模块
LinSM 调用 LinIf_GotoSleep、LinIf_Wakeup、LinIf_ScheduleRequest、LinIf_SetTrcvMode 控制 LinIf。
### 5.3 文件结构
LinSM 模块包含 LinSM.h、LinSM_Cfg.h 等头文件。
---
## 6. 需求可追溯性
| 需求 ID | 描述 | 满足者 |
| --- | --- | --- |
| SRS_BSW_00101 | BSW 模块应能在独立初始化函数中初始化 | SWS_LinSM_00155 |
| SRS_BSW_00373 | main 函数命名约定 | SWS_LinSM_00156 |
| SRS_BSW_00384 | BSW 模块需指明所需其他模块 | SWS_LinSM_00001, SWS_LinSM_00085, SWS_LinSM_00086, SWS_LinSM_00105, SWS_LinSM_00196 |
| SRS_BSW_00406 | 模块初始化标志 | SWS_LinSM_00116, SWS_LinSM_00125, SWS_LinSM_00128, SWS_LinSM_00131 |
| SRS_BSW_00407 | 版本信息读取 | SWS_LinSM_00117 |
| SRS_BSW_00414 | init 函数应有配置结构指针 | SWS_LinSM_00155 |
| SRS_Lin_01560 | 进入 sleep 时唤醒应返回运行 | SWS_LinSM_00211 |
| SRS_Lin_01590 | LIN 从节点配置仅通过主节点调度表 | SWS_LinSM_00211 |
> **[摘要]** 完整需求追溯表见原文 PDF 第 16-19 页。
---
## 7. 功能规范
本章规定 LinSM 模块的需求。
LinSM 的主要职责:
- 控制所有 LIN 网络的通信状态(无通信或全通信)
- 处理调度表切换请求(仅主节点)
- 处理通信模式请求
- 通知上层状态变化
- **[SWS_LinSM_00019]** ⌈LinSM 模块应能处理一个或多个 LIN 网络。⌋
### 7.1 LinSM 状态机的状态与转换
LinSM 模块按状态机操作。每个连接的网络运行独立的子状态机。
- **[SWS_LinSM_00020]** ⌈LinSM 模块应有一个状态机,包含 LINSM_UNINIT 和 LINSM_INIT 状态。⌋
- **[SWS_LinSM_00173]** ⌈LINSM_INIT 中应为每个网络存在子状态机,包含 LINSM_NO_COM 和 LINSM_FULL_COM。⌋
- **[SWS_LinSM_00021]** ⌈LINSM_INIT 中,每个网络可独立处于 LINSM_NO_COM 或 LINSM_FULL_COM。⌋
#### 主节点状态机
```
LINSM_UNINIT --LinSM_Init--> LINSM_INIT
|
LINSM_NO_COM
|
(reqComMode==FULL_COM)
v
LINSM_FULL_COM --> LINSM_RUN_COMMUNICATION
|
(reqComMode==NO_COM)
v
LINSM_GOTO_SLEEP --> LINSM_NO_COM
```
#### 7.1.1 LINSM_UNINIT
- **[SWS_LinSM_00022]** ⌈应有状态 LINSM_UNINIT。⌋
- **[SWS_LinSM_00161]** ⌈启动时 LINSM_UNINIT 处于活动状态。⌋
#### 7.1.2 LINSM_INIT
初始化完成后激活。包含两个子状态:LINSM_NO_COM 和 LINSM_FULL_COM。
- **[SWS_LinSM_00024]** ⌈应有状态 LINSM_INIT。⌋
- **[SWS_LinSM_00025]** ⌈调用 LinSM_Init 时,状态机转换到 LINSM_INIT。⌋
- **[SWS_LinSM_00152]** ⌈调用 LinSM_Init 时,所有网络转换到 LINSM_NO_COM 子状态。⌋
- **[SWS_LinSM_00216]** ⌈LinSM_Init 应为每个配置通道设置 NULL_SCHEDULE 调度类型(仅主节点)。⌋
#### 7.1.3 LINSM_NO_COM
- **[SWS_LinSM_00026]** ⌈LINSM_INIT 中应有 LINSM_NO_COM 子状态。⌋
- **[SWS_LinSM_00027]** ⌈进入 LINSM_NO_COM 时,LinSM 应通知 ComM (COMM_NO_COMMUNICATION)。⌋
- **[SWS_LinSM_00193]** ⌈进入 LINSM_NO_COM 时,LinSM 应通知 BswM。⌋
- **[SWS_LinSM_00166]** ⌈LinSM_Init 函数中不应通知状态变化。⌋
- **[SWS_LinSM_00203]** ⌈进入 LINSM_NO_COM 时,如 LinSMTransceiverPassiveMode=true,收发器设为 STANDBY;否则设为 SLEEP。⌋
#### 7.1.4 LINSM_FULL_COM
- **[SWS_LinSM_00032]** ⌈LINSM_INIT 中应有 LINSM_FULL_COM 子状态。⌋
- **[SWS_LinSM_00033]** ⌈进入 LINSM_FULL_COM 时,LinSM 应通知 ComM (COMM_FULL_COMMUNICATION)。⌋
- **[SWS_LinSM_00192]** ⌈进入 LINSM_FULL_COM 时,LinSM 应通知 BswM。⌋
- **[SWS_LinSM_00205]** ⌈进入 LINSM_FULL_COM 时,收发器设为活动模式。⌋
- **[SWS_LinSM_00301]** ⌈进入 LINSM_FULL_COM 时,进入子状态 LINSM_RUN_COMMUNICATION。⌋
#### 7.1.5 进入睡眠 (Goto sleep)
进入睡眠序列在主节点和从节点之间不同:
- **主节点**:ComM 请求 no communication 时,LinSM 请求在总线发送 goto-sleep 命令。
- **从节点**:LIN 接口指示总线进入睡眠事件(由收到 goto-sleep 命令或检测到总线空闲触发)。
- **[SWS_LinSM_00035]** ⌈LinSM 模块仅在 LINSM_FULL_COM/LINSM_RUN_COMMUNICATION 状态调用 LinIf_GotoSleep。⌋
- **[SWS_LinSM_00046]** ⌈LinSM_GotoSleepConfirmation 调用时,如当前状态为 LINSM_FULL_COM/LINSM_GOTOSLEEP,LinSM 应将状态置为 LINSM_NO_COM(不考虑 success 参数)。⌋
- **[SWS_LinSM_00302]** ⌈如 LinIf_GotoSleep 返回 E_OK,LinSM 进入子状态 LINSM_GOTOSLEEP。⌋
##### 7.1.5.1 主节点特定的进入睡眠
- **[SWS_LinSM_10208]** ⌈如状态为 LINSM_FULL_COM 且 ComM 请求 COMM_NO_COMMUNICATION,LinSM 应调用 LinIf_GotoSleep 在请求的网络上发送 goto-sleep 命令。⌋
- **[SWS_LinSM_00036]** ⌈ComM 调用 LinSM_RequestComMode 请求 COMM_NO_COMMUNICATION 时,LinSM 应直接调用 LinIf_GotoSleep。⌋
##### 7.1.5.2 从节点特定的进入睡眠
- **[SWS_LinSM_00230]** ⌈LIN 从节点中,ComM 请求 COMM_NO_COMMUNICATION 时,LinSM 应存储请求模式并返回 E_OK。⌋
- **[SWS_LinSM_00231]** ⌈LinSM_GotoSleepIndication 调用且当前状态为 LINSM_FULL_COM 时,LinSM 应直接调用 LinIf_GotoSleep。⌋
- **[SWS_LinSM_00233]** ⌈成功 goto-sleep 后,LinSM 调用 ComM_BusSM_BusSleepMode 通知 ComM。⌋
#### 7.1.6 切换调度表 (仅主节点)
- **[SWS_LinSM_00079]** ⌈调用 LinSM_ScheduleRequest 时,LinSM 应将请求转发至 LinIf (LinIf_ScheduleRequest)。⌋
- **[SWS_LinSM_00168]** ⌈LinSM 应将 LinIf_ScheduleRequest 返回值转发给调用者。⌋
- **[SWS_LinSM_00206]** ⌈LinSM 收到调度表设置确认时,如未超时,应调用 BswM_LinSM_CurrentSchedule。⌋
#### 7.1.7 唤醒过程
LIN 网络可通过 ComM 请求或 LIN 节点发送唤醒信号唤醒。两种情况下 ComM 都请求 full communication。
- **[SWS_LinSM_00047]** ⌈ComM 请求 COMM_FULL_COMMUNICATION 时,LinSM 应直接调用 LinIf_Wakeup。⌋
- **[SWS_LinSM_00049]** ⌈LinIf 通知唤醒成功时,状态置为 LINSM_FULL_COM。⌋
#### 7.1.8 请求超时
- **[SWS_LinSM_00175]** ⌈每个网络应有请求定时器,相互独立。⌋
- **[SWS_LinSM_00100]** ⌈调用 LinIf_GotoSleep、LinIf_Wakeup 或 LinIf_ScheduleRequest 前,启动定时器。⌋
- **[SWS_LinSM_00101]** ⌈定时器超过 LinSMConfirmationTimeout 即发生超时。⌋
- **[SWS_LinSM_00102]** ⌈超时时上报 LINSM_E_CONFIRMATION_TIMEOUT 错误给 DET。⌋
- **[SWS_LinSM_00304]** ⌈LinIf_Wakeup 超时且未达最大重试次数(LinSMModeRequestRepetitionMax)时,重新发送 LinIf_Wakeup。⌋
##### 7.1.8.1 从节点唤醒重试
- **[SWS_LinSM_00235]** ⌈从节点上,SWS_LinSM_00307 情况下应启动 silence-after-wakeup 定时器。⌋
### 7.2 错误分类
#### 7.2.1 开发错误
| 错误名 | 错误码 | 含义 |
| --- | --- | --- |
| LINSM_E_UNINIT | 0x00 | 模块未初始化即调用 |
| LINSM_E_ALREADY_INITIALIZED | 0x01 | 模块已初始化时再次调用 Init |
| LINSM_E_PARAMETER | 0x02 | 参数无效 |
| LINSM_E_PARAMETER_POINTER | 0x03 | NULL 指针 |
| LINSM_E_NONEXISTENT_NETWORK | 0x04 | 不存在的网络 ID |
#### 7.2.2 运行时错误
| 错误名 | 错误码 | 含义 |
| --- | --- | --- |
| LINSM_E_CONFIRMATION_TIMEOUT | 0x30 | LinIf 确认超时 |
---
## 8. API 规范
### 8.1 导入类型
| 模块 | 头文件 | 导入类型 |
| --- | --- | --- |
| ComM | ComM.h | ComM_ModeType |
| ComStack_Types | ComStack_Types.h | NetworkHandleType |
| LinIf | LinIf.h | LinIf_SchHandleType |
| Std_Types | Std_Types.h | Std_ReturnType, Std_VersionInfoType |
### 8.2 类型定义
#### 8.2.1 LinSM_ConfigType
```c
typedef struct LinSM_ConfigType LinSM_ConfigType;
```
LinSM 模块初始化配置数据结构。
#### 8.2.2 LinSM_ModeType
```c
typedef enum {
LINSM_FULL_COM = 0x00,
LINSM_NO_COM = 0x01
} LinSM_ModeType;
```
### 8.3 函数定义
#### 8.3.1 LinSM_Init
```c
void LinSM_Init(const LinSM_ConfigType* ConfigPtr)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x01 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| 参数 (in) | ConfigPtr — 配置数据指针 |
| 描述 | 初始化 LinSM 模块 |
- **[SWS_LinSM_00155]** ⌈LinSM_Init 应初始化所有 LinSM 内部变量,所有网络置为 LINSM_NO_COM。⌋ (SRS_BSW_00101)
#### 8.3.2 LinSM_GetVersionInfo
```c
void LinSM_GetVersionInfo(Std_VersionInfoType* VersionInfo)
```
| Service ID | 0x02 |
| --- | --- |
| 描述 | 获取模块版本信息 |
#### 8.3.3 LinSM_ScheduleRequest
```c
Std_ReturnType LinSM_ScheduleRequest(
NetworkHandleType network,
LinIf_SchHandleType Schedule
)
```
| Service ID | 0x10 |
| --- | --- |
| Sync/Async | Asynchronous |
| 描述 | 请求切换调度表(仅主节点) |
#### 8.3.4 LinSM_GetCurrentComMode
```c
Std_ReturnType LinSM_GetCurrentComMode(
NetworkHandleType network,
ComM_ModeType* mode
)
```
| Service ID | 0x11 |
| --- | --- |
| 描述 | 获取当前通信模式 |
#### 8.3.5 LinSM_RequestComMode
```c
Std_ReturnType LinSM_RequestComMode(
NetworkHandleType network,
ComM_ModeType mode
)
```
| Service ID | 0x12 |
| --- | --- |
| 描述 | ComM 请求通信模式变更 |
### 8.4 回调通知
#### 8.4.1 LinSM_ScheduleRequestConfirmation
```c
void LinSM_ScheduleRequestConfirmation(
NetworkHandleType network,
LinIf_SchHandleType schedule
)
```
LinIf 调度表切换确认。
#### 8.4.2 LinSM_GotoSleepConfirmation
```c
void LinSM_GotoSleepConfirmation(
NetworkHandleType network,
boolean success
)
```
LinIf goto-sleep 命令发送确认。
#### 8.4.3 LinSM_GotoSleepIndication (从节点)
```c
void LinSM_GotoSleepIndication(NetworkHandleType network)
```
LinIf 通知总线睡眠事件。
#### 8.4.4 LinSM_WakeupConfirmation
```c
void LinSM_WakeupConfirmation(
NetworkHandleType network,
boolean success
)
```
LinIf 唤醒发送确认。
### 8.5 调度函数
#### 8.5.1 LinSM_MainFunction
```c
void LinSM_MainFunction(void)
```
| 项目 | 内容 |
| --- | --- |
| Service ID | 0x30 |
| 描述 | 主处理函数,处理定时器和状态机 |
- **[SWS_LinSM_00156]** ⌈应提供 LinSM_MainFunction 用于定时器处理。⌋ (SRS_BSW_00373)
### 8.6 期望接口
#### 8.6.1 强制接口
- LinIf_GotoSleep
- LinIf_Wakeup
- LinIf_ScheduleRequest
- ComM_BusSM_ModeIndication
- BswM_LinSM_CurrentState
- BswM_LinSM_CurrentSchedule
- Det_ReportRuntimeError
#### 8.6.2 可选接口
- Det_ReportError
- LinIf_SetTrcvMode
- ComM_BusSM_BusSleepMode
---
## 9. 时序图
> **[摘要]** 本章包含初始化、模式请求、调度切换、进入睡眠、唤醒过程的时序图。详细图见原文 PDF 第 36-42 页。
主要场景:
- 主节点进入 FULL_COM(ComM 请求 → LinSM_RequestComMode → LinIf_Wakeup → 唤醒确认 → 模式确认)
- 主节点进入 NO_COM(ComM 请求 → LinSM_RequestComMode → LinIf_GotoSleep → goto-sleep 确认 → 模式确认)
- 主节点调度切换(BswM/上层调用 LinSM_ScheduleRequest → LinIf_ScheduleRequest → 确认)
- 从节点 LinIf 指示 bus sleep(LinSM_GotoSleepIndication → 处理)
---
## 10. 配置规范
### 10.1 如何阅读本章
参考 [ECU Configuration Specification] 文档。
### 10.2 容器与配置参数
#### 10.2.1 LinSM
根容器。
#### 10.2.2 LinSMConfigSet
LinSM 配置集容器。
#### 10.2.3 LinSMChannel
LIN 网络配置。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| LinSMComMNetworkHandleRef | ref | 引用 ComM 网络句柄 |
| LinSMConfirmationTimeout | float | 确认超时(秒) |
| LinSMModeRequestRepetitionMax | int | 模式请求最大重试次数 |
| LinSMNodeType | enum | LIN_MASTER / LIN_SLAVE |
| LinSMSilenceAfterWakeupTimeout | float | 唤醒后静默时间(从节点) |
| LinSMTransceiverPassiveMode | bool | 收发器在 NO_COM 时是否进 STANDBY |
#### 10.2.4 LinSMSchedule
调度表配置(主节点)。
#### 10.2.5 LinSMGeneral
通用配置(版本 API 启用等)。
### 10.3 已发布信息
按 BSW General 提供模块版本信息。
---
## 11. 不适用需求
部分 SRS_BSW 通用需求不在本规范范围内。详见原文 PDF 第 54 页。
---
## 翻译说明
- 本译本基于 AUTOSAR CP 4.4.0 (2018-10-31) 的 LIN 状态管理器规范 (Document ID 255,共 54 页)
- 摘要标记位置:
- 第 6 章需求可追溯性表
- 第 9 章时序图
- 第 11 章不适用需求列表