# SOME/IP 传输协议规范 (Specification of SOME/IP Transport Protocol) > **AUTOSAR CP Release 4.4.0** > **文档 ID 893: AUTOSAR_SWS_SOMEIPTransportProtocol** ## 元信息 | 项目 | 内容 | | --- | --- | | 文档标题 | SOME/IP 传输协议规范 | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 893 | | 文档状态 | Final | | 所属 AUTOSAR 标准 | Classic Platform | | 所属标准版本 | 4.4.0 | ## 文档变更历史 | 日期 | 版本 | 变更方 | 变更说明 | | --- | --- | --- | --- | | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 引入并完善 SOME/IP-TP 分段协议 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 初版 | --- ## 目录 - [1. 介绍](#1-介绍) - [2. 缩略语](#2-缩略语) - [3. 相关文档](#3-相关文档) - [4. 约束与假设](#4-约束与假设) - [5. 与其他模块的依赖](#5-与其他模块的依赖) - [6. 需求可追溯性](#6-需求可追溯性) - [7. 功能规范](#7-功能规范) - [8. API 规范](#8-api-规范) - [9. 时序图](#9-时序图) - [10. 配置规范](#10-配置规范) --- ## 1. 介绍 本规范规定了 AUTOSAR 基础软件模块 **SOME/IP 传输协议** (SomeIpTp) 的功能、API 和配置。 SOME/IP-TP 是 SOME/IP 协议的扩展,用于在 UDP 上传输超过 1400 字节(MTU 上限)的大型 SOME/IP 消息。它通过将消息分段为多个 UDP 包来实现。 ### 1.1 角色 - 发送端:将大型 SOME/IP 消息分段为多个 SOME/IP-TP 段 - 接收端:重组分段为完整 SOME/IP 消息 --- ## 2. 缩略语 | 缩略语 | 描述 | | --- | --- | | API | Application Programming Interface | | BSW | Basic Software | | DET | Default Error Tracer | | ECU | Electronic Control Unit | | IPduM | I-PDU Multiplexer | | MTU | Maximum Transmission Unit | | PDU | Protocol Data Unit | | PduR | PDU Router | | SOME/IP | Scalable service-Oriented MiddlewarE over IP | | SOME/IP-TP | SOME/IP Transport Protocol | | TCP | Transmission Control Protocol | | UDP | User Datagram Protocol | --- ## 3. 相关文档 ### 3.1 输入文档 - [1] List of Basic Software Modules - [2] Layered Software Architecture - [3] General Requirements on Basic Software Modules - [4] General Specification of Basic Software Modules - [5] Specification of Communication Stack Types - [6] Specification of PDU Router - [7] Specification of Socket Adaptor - [8] Specification of SOME/IP Transformer ### 3.2 相关标准 - SOME/IP Protocol Specification ### 3.3 相关规范 AUTOSAR SWS BSW General [4] 适用。 --- ## 4. 约束与假设 ### 4.1 限制 SomeIpTp 仅适用于 UDP 上的 SOME/IP。TCP 不需要分段(TCP 已分段)。 ### 4.2 适用车域 适用于所有车域。 --- ## 5. 与其他模块的依赖 - **PduR**:与上层 SWC/transformer 链接 - **SoAd**:与下层 UDP 链接 - **DET**:错误上报 --- ## 6. 需求可追溯性 | 需求 ID | 描述 | 满足者 | | --- | --- | --- | | SRS_BSW_00101 | 初始化 | SWS_SomeIpTp_00010 | | SRS_BSW_00407 | 版本信息 | SWS_SomeIpTp_00020 | > **[摘要]** 完整需求追溯表见原文 PDF 第 18-22 页。 --- ## 7. 功能规范 ### 7.1 SOME/IP-TP 头部 每个 SOME/IP-TP 段在标准 SOME/IP 头之后添加一个 32 位的 TP 头: | 字段 | 大小 | 含义 | | --- | --- | --- | | Offset | 28 位 | 段在原消息中的偏移(字节,按 16 字节对齐) | | Reserved | 3 位 | 保留 | | More Segments Flag | 1 位 | 1 = 还有后续段;0 = 最后一段 | ### 7.2 发送(分段) - **[SWS_SomeIpTp_00030]** ⌈SomeIpTp_Transmit 触发分段发送。⌋ - 段大小由配置参数 `SomeIpTpSegmentSize` 决定(默认 1400 字节)。 - 每段携带 SOME/IP-TP 头。 ### 7.3 接收(重组) - **[SWS_SomeIpTp_00040]** ⌈SomeIpTp 应根据 Offset 和 More Segments Flag 重组段。⌋ - 重组失败时(超时、序列错误):丢弃 + 通知。 ### 7.4 超时监视 | 定时器 | 含义 | | --- | --- | | SomeIpTpRxTimeoutTime | 接收段间最大时间 | | SomeIpTpTxRetryTime | 重传间隔 | ### 7.5 错误分类 #### 7.5.1 开发错误 | 错误名 | 错误码 | 含义 | | --- | --- | --- | | SOMEIPTP_E_UNINIT | 0x01 | 未初始化 | | SOMEIPTP_E_PARAM_POINTER | 0x02 | NULL 指针 | | SOMEIPTP_E_INVALID_PDU_ID | 0x03 | 无效 PDU ID | #### 7.5.2 运行时错误 | 错误名 | 含义 | | --- | --- | | SOMEIPTP_E_REASSEMBLY_TIMEOUT | 重组超时 | --- ## 8. API 规范 ### 8.1 导入类型 | 模块 | 头文件 | 导入类型 | | --- | --- | --- | | ComStack_Types | ComStack_Types.h | PduIdType, PduInfoType, PduLengthType, RetryInfoType, BufReq_ReturnType | | Std_Types | Std_Types.h | Std_ReturnType, Std_VersionInfoType | ### 8.2 类型定义 #### 8.2.1 SomeIpTp_ConfigType ```c typedef struct SomeIpTp_ConfigType SomeIpTp_ConfigType; ``` ### 8.3 函数定义 #### 8.3.1 SomeIpTp_Init ```c void SomeIpTp_Init(const SomeIpTp_ConfigType* config) ``` | Service ID | 0x01 | | --- | --- | #### 8.3.2 SomeIpTp_GetVersionInfo ```c void SomeIpTp_GetVersionInfo(Std_VersionInfoType* versioninfo) ``` | Service ID | 0x02 | | --- | --- | #### 8.3.3 SomeIpTp_Transmit ```c Std_ReturnType SomeIpTp_Transmit( PduIdType TxPduId, const PduInfoType* PduInfoPtr ) ``` | Service ID | 0x05 | | --- | --- | ### 8.4 回调通知 #### 8.4.1 SomeIpTp_RxIndication ```c void SomeIpTp_RxIndication( PduIdType RxPduId, const PduInfoType* PduInfoPtr ) ``` SoAd 通知 SomeIpTp 收到 PDU。 #### 8.4.2 SomeIpTp_TxConfirmation ```c void SomeIpTp_TxConfirmation(PduIdType TxPduId) ``` SoAd 通知段已发送。 ### 8.5 调度函数 #### 8.5.1 SomeIpTp_MainFunctionRx ```c void SomeIpTp_MainFunctionRx(void) ``` 处理接收超时。 #### 8.5.2 SomeIpTp_MainFunctionTx ```c void SomeIpTp_MainFunctionTx(void) ``` 处理发送和重传。 ### 8.6 期望接口 #### 8.6.1 强制接口 - PduR_SomeIpTpRxIndication - PduR_SomeIpTpTxConfirmation - SoAd_IfTransmit - Det_ReportError --- ## 9. 时序图 > **[摘要]** 详细时序图见原文 PDF 第 35-45 页:分段发送、重组接收、超时处理等。 --- ## 10. 配置规范 ### 10.1 容器与配置参数 #### 10.1.1 SomeIpTp 根容器。 #### 10.1.2 SomeIpTpGeneral | 参数 | 类型 | 说明 | | --- | --- | --- | | SomeIpTpDevErrorDetect | bool | DET 启用 | | SomeIpTpVersionInfoApi | bool | 版本信息 API | | SomeIpTpMainFunctionPeriod | float | main 周期 | #### 10.1.3 SomeIpTpRxNPdu, SomeIpTpTxNPdu 接收/发送 N-PDU 配置(PDU ID、引用 SoAd 等)。 #### 10.1.4 SomeIpTpRxNSdu, SomeIpTpTxNSdu 接收/发送 N-SDU 配置(N-SDU ID、最大长度等)。 | 参数 | 类型 | 说明 | | --- | --- | --- | | SomeIpTpMaxSegmentSize | int | 段最大尺寸(默认 1400) | | SomeIpTpRxTimeoutTime | float | 接收超时 | > **[摘要]** 完整配置详见原文 PDF 第 45-54 页。 ### 10.2 已发布信息 按 BSW General。 --- ## 翻译说明 - 本译本基于 AUTOSAR CP 4.4.0 的 SOME/IP 传输协议规范 (Document ID 893,共 55 页) - 摘要标记位置:第 6 章需求追溯、第 9 章时序图、第 10 章配置参数