# I-PDU 复用器规范 (Specification of I-PDU Multiplexer) > **AUTOSAR CP Release 4.4.0** > **文档 ID 182: AUTOSAR_SWS_IPDUMultiplexer** ## 元信息 | 项目 | 内容 | | --- | --- | | 文档标题 | I-PDU 复用器规范 | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 182 | | 文档状态 | Final | | 所属 AUTOSAR 标准 | Classic Platform | | 所属标准版本 | 4.4.0 | ## 文档变更历史 | 日期 | 版本 | 变更方 | 变更说明 | | --- | --- | --- | --- | | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | Container PDU 支持;细微更正 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 修正/澄清 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 多 PDU 到 Container 处理 | | 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 | TX 触发增强 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 配置增强 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 多段静态/动态部分 | | 2010-09-30 | 3.1.5 | 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 基础软件模块 **I-PDU 复用器** (IpduM) 的功能、API 和配置。 PDU 复用是指对一个 PDU(协议数据单元)的 PCI(协议控制信息)使用多种 SDU(服务数据单元)布局。**选择字段(selector field)** 是复用 PDU SDU 的一部分,用于区分不同复用 PDU 的内容。 PDU 复用目前已知用于 CAN,但不限于此通信系统。 在发送端,I-PDU 复用器模块负责将 COM 的合适 I-PDU 组合为新的复用 I-PDU,并发回 PDU 路由器。在接收端,负责解释复用 I-PDU 的内容,根据选择字段值,将适当的分离 I-PDU 提供给 COM。 --- ## 2. 缩略语 | 缩略语 | 描述 | | --- | --- | | COM I-PDU | 由 COM 模块从 COM 信号组装的 I-PDU | | contained I-PDU | 组装到 Container PDU 中或从中提取的 I-PDU | | Container PDU | 包含 I-PDU 和头的 PDU | | dynamic part | 动态部分 | | instance of an I-PDU | IpduM I-PDU 具有特定布局和内容的实例 | | Instances of a Container | 同一 Container PDU 的实例 | | IpduM | I-PDU Multiplexer | | IpduM I-PDU | 由 IpduM 模块从两个 COM I-PDU 组装的 I-PDU | | multiplexed I-PDU | 见 IpduM I-PDU | | segment | 段(静态或动态部分可由多个段组成) | | selector field | 选择字段 | | static part | 静态部分 | --- ## 3. 相关文档 ### 3.1 输入文档 - [1] Layered Software Architecture - [2] General Requirements on Basic Software Modules - [3] Specification of RTE - [4] Requirements on I-PDU Multiplexer - [5] Specification of Communication - [6] General Specification of Basic Software Modules ### 3.2 相关标准 无。 ### 3.3 相关规范 AUTOSAR SWS BSW General [6] 适用。 --- ## 4. 约束与假设 ### 4.1 限制 发送复用 I-PDU 时,无法考虑最小延迟时间(MDT)。详见 [5] 和 7.2.4.1。 静态布局 Container PDU 发送中,若两个或多个被包含的 PDU 都配置了 MDT,则无法保证 MDT。 ### 4.2 适用车域 无限制。 ### 4.3 与安全相关环境的适用性 本文档在无安全案例的情况下创建。直接结果只能在重复 IEC 61508 中所要求的某些过程步骤后在安全相关系统中使用。 --- ## 5. 与其他模块的依赖 ### 5.1 AUTOSAR OS IpduM 不直接使用 OS,但通过 Schedule Manager 调用 main 函数。 ### 5.2 RTE (BSW Scheduler) IpduM_MainFunction 由 BSW 调度器调用。 ### 5.3 PDU Router IpduM 通过 PduR 收发 I-PDU。 ### 5.4 COM IpduM 与 COM 交互(IpduM 作为 PduR 上层)。 ### 5.5 文件结构 IpduM 提供 IpduM.h、IpduM_Cfg.h 等头文件。 --- ## 6. 需求可追溯性 | 需求 ID | 描述 | 满足者 | | --- | --- | --- | | SRS_IPDUM_00002 | 支持选择字段位置可配 | SWS_IpduM_00027 | | SRS_IPDUM_00003 | 支持多个布局 | SWS_IpduM_00041 | | SRS_IPDUM_00006 | 多容器 PDU 处理 | SWS_IpduM_00200 | | SRS_BSW_00101 | 初始化 | SWS_IpduM_00012 | | SRS_BSW_00407 | 版本信息 | SWS_IpduM_00220 | > **[摘要]** 完整需求追溯表见原文 PDF 第 16-20 页。 --- ## 7. 功能规范 ### 7.1 通用 IpduM 通过 PduR 与上下层交互。 ### 7.2 I-PDU 复用 #### 7.2.1 定义与布局 - 选择字段:1-32 位的字段,用于识别 PDU 实例 - 静态部分:所有实例共有的部分 - 动态部分:不同实例不同的部分 #### 7.2.2 通用 - **[SWS_IpduM_00027]** ⌈IpduM 应支持可配置的选择字段位置。⌋ #### 7.2.3 初始化 - **[SWS_IpduM_00012]** ⌈IpduM_Init 应初始化所有内部变量。⌋ #### 7.2.4 发送 ##### 7.2.4.1 MDT 最小延迟时间在 COM 中处理,但 IpduM 无法保证。 #### 7.2.5 接收 - **[SWS_IpduM_00041]** ⌈IpduM 应解析接收 I-PDU 的选择字段并指示给 COM。⌋ #### 7.2.6 MetaData 处理 IpduM 支持 N-PDU 的 MetaData 处理。 ### 7.3 多 PDU 到 Container 处理 #### 7.3.1 动态 Container 布局 PDU 在 Container 中带头信息,可有变化。 #### 7.3.2 静态 Container 布局 PDU 在 Container 中位置固定。 #### 7.3.3 发送 - **[SWS_IpduM_00200]** ⌈IpduM 应支持 Container PDU 发送。⌋ #### 7.3.4 动态 Container 发送 按累积策略或基于触发发送 Container。 #### 7.3.5 静态 Container 发送 固定时间或基于触发发送。 #### 7.3.6 接收 解析 Container PDU 并通知 COM 各被包含 PDU。 #### 7.3.7 动态 Container 接收 根据头信息解析。 #### 7.3.8 静态 Container 接收 根据固定位置解析。 #### 7.3.9 错误处理 处理过载、不一致等错误。 #### 7.3.10 MetaData 处理 被包含 PDU 的 MetaData。 ### 7.4 错误分类 #### 7.4.1 开发错误 | 错误名 | 错误码 | 含义 | | --- | --- | --- | | IPDUM_E_INIT_FAILED | 0x01 | 初始化失败 | | IPDUM_E_UNINIT | 0x02 | 未初始化即调用 | | IPDUM_E_PARAM | 0x03 | 参数错误 | | IPDUM_E_PARAM_POINTER | 0x04 | NULL 指针 | #### 7.4.2 运行时错误 | 错误名 | 含义 | | --- | --- | | IPDUM_E_BUFFER_OVERFLOW | 缓冲区溢出 | | IPDUM_E_CONTAINER_FULL | Container 已满 | #### 7.4.3 瞬态故障 无。 #### 7.4.4 生产错误 无。 #### 7.4.5 扩展生产错误 无。 ### 7.5 错误检测与通知 应通过 DET 检测并上报开发错误。 --- ## 8. API 规范 ### 8.1 导入类型 | 模块 | 头文件 | 导入类型 | | --- | --- | --- | | ComStack_Types | ComStack_Types.h | PduIdType, PduInfoType, RetryInfoType | | Std_Types | Std_Types.h | Std_ReturnType, Std_VersionInfoType | ### 8.2 类型定义 #### 8.2.1 IpduM_ConfigType ```c typedef struct IpduM_ConfigType IpduM_ConfigType; ``` ### 8.3 函数定义 #### 8.3.1 IpduM_Init ```c void IpduM_Init(const IpduM_ConfigType* Config) ``` | Service ID | 0x00 | | --- | --- | | 描述 | 初始化 IpduM 模块 | #### 8.3.2 IpduM_GetVersionInfo ```c void IpduM_GetVersionInfo(Std_VersionInfoType* VersionInfo) ``` | Service ID | 0x01 | | --- | --- | #### 8.3.3 IpduM_Transmit ```c Std_ReturnType IpduM_Transmit( PduIdType TxPduId, const PduInfoType* PduInfoPtr ) ``` | Service ID | 0x02 | | --- | --- | | 描述 | 请求传输 I-PDU | ### 8.4 回调通知 #### 8.4.1 IpduM_RxIndication ```c void IpduM_RxIndication( PduIdType RxPduId, const PduInfoType* PduInfoPtr ) ``` PduR 通知 IpduM 收到 I-PDU。 #### 8.4.2 IpduM_TxConfirmation ```c void IpduM_TxConfirmation(PduIdType TxPduId) ``` PduR 通知 IpduM I-PDU 已发送。 #### 8.4.3 IpduM_TriggerTransmit ```c Std_ReturnType IpduM_TriggerTransmit( PduIdType TxPduId, PduInfoType* PduInfoPtr ) ``` PduR 请求 IpduM 提供数据。 ### 8.5 调度函数 #### 8.5.1 IpduM_MainFunction ```c void IpduM_MainFunction(void) ``` | Service ID | 0x05 | | --- | --- | | 描述 | 处理超时、Container 发送等 | ### 8.6 期望接口 #### 8.6.1 强制接口 - PduR_IpduMTransmit - PduR_IpduMRxIndication - PduR_IpduMTxConfirmation - Det_ReportError #### 8.6.2 可选接口 - Det_ReportRuntimeError #### 8.6.3 可配置接口 无。 --- ## 9. 时序图 ### 9.1 复用 I-PDU 发送和发送确认 ### 9.2 复用 I-PDU 无触发发送 ### 9.3 复用 I-PDU 接收 ### 9.4 触发发送 > **[摘要]** 详细时序图见原文 PDF 第 49-53 页。 --- ## 10. 配置规范 ### 10.1 如何阅读本章 参考 [ECU Configuration Specification]。 ### 10.2 容器与配置参数 #### 10.2.1 配置概述 IpduM 配置包含发送/接收路径、动态/静态部分、选择字段等。 #### 10.2.2 IpduM 根容器。 #### 10.2.3 IpduMConfig 配置集容器。 #### 10.2.4 IpduMGeneral | 参数 | 类型 | 说明 | | --- | --- | --- | | IpduMDevErrorDetect | bool | DET 启用 | | IpduMVersionInfoApi | bool | 版本信息 API | | IpduMMainFunctionPeriod | float | main 周期 | #### 10.2.5 IpduMTxPathway 发送路径配置。 #### 10.2.6 IpduMTxRequest 发送请求配置。 #### 10.2.7-10.2.10 IpduMTxDynamicPart/Segment, IpduMTxStaticPart/Segment TX 动态/静态部分和段配置。 #### 10.2.11 IpduMRxPathway 接收路径配置。 #### 10.2.12-10.2.16 IpduMRxIndication, IpduMRxDynamic/StaticPart/Segment RX 指示、动态/静态部分和段。 #### 10.2.17 IpduMSelectorField 选择字段配置(起始位、长度)。 #### 10.2.18-10.2.21 IpduMContainerRx/TxPdu, IpduMContainedRx/TxPdu Container PDU 和被包含 PDU 配置。 > **[摘要]** 完整配置详见原文 PDF 第 54-88 页。 ### 10.3 已发布信息 按 BSW General。 ### 10.4 配置规则 - 选择字段位置规则 - 静态/动态部分放置规则 - 多 PDU 到 Container 映射规则 - 优先级规则 --- ## 11. 不适用需求 详见原文 PDF 第 92 页。 --- ## 翻译说明 - 本译本基于 AUTOSAR CP 4.4.0 的 I-PDU 复用器规范 (Document ID 182,共 92 页) - 摘要标记位置:第 6 章需求追溯、第 9 章时序图、第 10 章配置、第 11 章不适用需求