1 概述
SOME/IP 是智能汽车通信领域的核心协议之一,可理解为一种为汽车电子系统量身定制的通信"语言"和"规则"。它使车上不同电子控制单元(ECU)之间能够高效、灵活地交换数据,是汽车行业实现 SOA(面向服务的架构)的重要基础。
本文档用于说明 SOME/IP 的基本定义、在汽车通信架构中的层级位置以及其技术表现形式。
2 术语与缩写
| 缩写/术语 | 全称 | 说明 |
|---|---|---|
| SOME/IP | Scalable service-Oriented MiddlewarE over IP | 运行于 IP 之上的可扩展面向服务中间件 |
| ECU | Electronic Control Unit | 电子控制单元 |
| SOA | Service-Oriented Architecture | 面向服务的架构 |
| AUTOSAR | AUTomotive Open System ARchitecture | 汽车开放系统架构 |
| OSI | Open Systems Interconnection | 开放系统互连参考模型 |
| TCP | Transmission Control Protocol | 传输控制协议 |
| UDP | User Datagram Protocol | 用户数据报协议 |
| IP | Internet Protocol | 互联网协议 |
| SD | Service Discovery | 服务发现 |
| RPC | Remote Procedure Call | 远程过程调用 |
3 SOME/IP 定义
3.1 全称与中文含义
SOME/IP 全称为:
Scalable service-Oriented MiddlewarE over IP
中文含义为:
运行于 IP 之上的可扩展的面向服务的中间件
3.2 名称解析
| 组成 | 含义 | 说明 |
|---|---|---|
| Scalable | 可扩展 | 兼容不同硬件、操作系统和软件,具有良好互操作性 |
| service-Oriented | 面向服务 | 核心思想是服务化通信,仅在接收方需要数据时发送,降低网络负载 |
| MiddlewarE | 中间件 | 位于应用层,为上层应用提供通用通信服务,屏蔽底层通信细节 |
| over IP | 基于 IP | 运行在 IP 协议之上,通常依托车载以太网,使用 TCP 或 UDP 传输 |
3.3 起源与标准化
SOME/IP 最初由宝马公司开发,后于 2014 年被纳入 AUTOSAR 标准。目前,它已成为汽车行业实现 SOA 架构最核心的通信协议之一。
4 技术定位
4.1 在 OSI 模型中的位置
SOME/IP 位于汽车通信架构的应用层。
- 在 OSI 模型中,它位于第 4 层传输层之上,功能上属于第 5 至第 7 层,即会话层、表示层和应用层的范畴。
- 通常将其归类为应用层协议。
4.2 在车载以太网协议栈中的位置
SOME/IP 直接构建在 TCP/IP 或 UDP/IP 协议栈之上,是应用层协议的一部分。
| 层级 | 协议/组件 | 说明 |
|---|---|---|
| 应用层 | SOME/IP | 提供面向服务的通信能力,如方法调用、事件通知等 |
| 传输层 | TCP / UDP | 为 SOME/IP 提供可靠的 TCP 或高效的 UDP 数据传输 |
| 网络层 | IP(IPv4/IPv6) | 负责数据包的路由和寻址 |
| 数据链路层与物理层 | 车载以太网 | 提供物理连接和帧传输 |
5 技术形式
SOME/IP 以软件中间件的形式存在,具体表现为定义好的数据包格式和一套通信交互机制。
5.1 软件中间件形式
SOME/IP 作为中间件位于应用层,为上层应用软件提供通用通信服务。应用软件无需关心底层通信细节,只需按照服务接口进行调用、订阅或属性访问。
5.2 报文形式
SOME/IP 通信的基本单元是 SOME/IP 报文 ,由**消息头(Header)和数据段(Payload)**组成。
消息头中包含关键控制信息,主要包括:
| 字段 | 说明 |
|---|---|
| Message ID | 标识具体的服务和方法 |
| Length | 指明报文长度 |
| Request ID | 用于匹配请求和响应 |
| Message Type | 区分报文类型,如请求、响应、通知 |
| Return Code | 表示请求的处理结果 |
5.3 核心通信机制
SOME/IP 主要通过以下三种模式进行通信,以适应不同业务场景。
| 通信机制 | 模式 | 说明 | 适用场景 |
|---|---|---|---|
| Methods | 请求/响应 | 客户端主动向服务端发起请求,服务端处理后返回响应 | 查询数据或执行特定功能 |
| Events | 发布/订阅 | 服务端在状态变化时,主动向已订阅的客户端推送信息 | 实时状态监控或告警 |
| Fields | 远程属性访问 | 结合前两者特点,客户端可读取、设置服务端属性,并可订阅属性变化通知 | 远程属性管理 |
5.4 服务发现机制
SOME/IP 配套有 SOME/IP-SD(Service Discovery,服务发现) 协议。
SOME/IP-SD 相当于整个通信架构的"指挥中枢",其作用是:
- 让网络中的客户端动态发现服务端提供了哪些服务;
- 获知这些服务位于哪个 ECU;
- 避免在代码中硬编码地址信息。
通过服务发现机制,SOME/IP 能够在运行时建立客户端与服务端之间的通信关系,提高系统的灵活性和可扩展性。
6 特点总结
| 特点 | 说明 |
|---|---|
| 可扩展 | 支持异构硬件、操作系统和软件互操作 |
| 面向服务 | 以服务为中心,按需发送数据,降低网络负载 |
| 中间件形态 | 为应用层提供通用通信服务,屏蔽底层细节 |
| 基于 IP | 运行于 TCP/IP 或 UDP/IP 之上,依托车载以太网 |
| 标准化 | 2014 年纳入 AUTOSAR,成为 SOA 核心通信协议 |
| 动态发现 | 通过 SOME/IP-SD 实现服务动态发现与订阅 |
|------------------------|----------------|-------------------------|--------------|-------------------------|------------------------------|-----------------------|-----------------------------------|---------------------|---------------------------------|---------------------------------------------------------------------|------------------------|-------------------|-----------------------------|--------------------------|----------------------------------------|--------------------------|-------------------|----------------------|
| Service Name | Service ID | Service Description | RPC Type | Field Property Name | Field Property Data Type | RPC Specific Type | Method/Event Name | Method/Event ID | Method/Event Description | Eventgroup Name@EventgroupID | Transport Protocol | Client | Input Parameter | Output Parameter | Event/Notification Event Parameter | Serialization Config | Send Strategy | Cyclic Time (ms) |
| ADC_HMI_AP_Service | 0x004B | SOC发往HMI显示的AP相关信号 | | | | | | | | | | | | | | | | |
| | | | Event | | | Notification Event | Event_AP_SR_Object | 0x8003 | ADC提供的泊车环境重构信息:目标物(车辆/行人/静态障碍物) | ++EventGroup_AP_SR@0x0030++ | TCP | bmaifusionservice | | AP_Object_Array | AP_Object_Array | config1 | cyclic | 100 |
| | | | Event | | | Notification Event | Event_AP_SR_SpeedBump | 0x8009 | ADC提供的泊车环境重构信息:减速带 | ++++EventGroup_AP_SR@0x0030++++ | TCP | bmaifusionservice | | AP_SpeedBump_Array | AP_SpeedBump_Array | config1 | cyclic | 100 |
| | | | Event | | | Notification Event | Event_AP_SR_Pillar | 0x800B | ADC提供的泊车环境重构信息:立柱 | ++EventGroup_AP_SR@0x0030++ | TCP | bmaifusionservice | | AP_Pillar_Array | AP_Pillar_Array | config1 | cyclic | 100 |
| | | | Event | | | Notification Event | Event_AP_SR_ParkingSlot | 0x800C | ADC提供的泊车环境重构信息:车位 | ++EventGroup_AP_SR@0x0030++ | TCP | bmaifusionservice | | AP_ParkingSlot_Array | AP_ParkingSlot_Array | config1 | cyclic | 100 |
| | | | F&F Method | | | Fire_Forget | FF_AP_SR_ParkingSlotSelect | 0x000C | CDC请求的泊车环境重构信息:车位选择 | | TCP | bmaifusionservice | AP_ParkingSlotSelect_Struct | | | config1 | | |
| | | | Event | | | Notification Event | Event_AP_Plan_GuideLine | 0x8010 | ADC提供的泊车规划信息:引导线 | ++EventGroup_AP_Route@0x0040++ | TCP | bmaifusionservice | | AP_GuideLine_Array | AP_GuideLine_Array | config1 | cyclic | 100 |
| | | | Event | | | Notification Event | Event_AP_Route_APA | 0x8014 | ADC提供的泊车路线信息:自动泊车 | ++EventGroup_AP_Route@0x0040++ | TCP | bmaifusionservice | | AP_APA_Struct | AP_APA_Struct | config1 | cyclic | 100 |
| | | | Event | | | Notification Event | Event_AP_Pos_EgoPositioning | 0x8020 | ADC提供的泊车定位信息:自车定位 | ++EventGroup_AP_Pos@0x0050++ | TCP | bmaifusionservice | | AP_EgoPositioning_Struct | AP_EgoPositioning_Struct | config1 | cyclic | 100 |
| CONFService | 0x004D | CDC请求ADCU提供传感器配置信息 | | | | | | | | | | | | | | | | |
| | | | R/R Method | | | Request_Response | RR_CONF_CameraIntrinsicParameters | 0x0030 | CDC请求ADCU响应的摄像头内参信息 | | TCP | HMIService | CONF_Ctype | CONF_CIPDataArray | | config1 | | |
一、表格整体结构
这张表按 Service(服务) 分组,每个服务下面列出它的 Method(方法) 、Event(事件) 或 Field(字段)。
你贴的内容主要包含两个服务:
-
ADC_HMI_AP_Service
0x004B描述:SOC 发往 HMI 显示的 AP 相关信号。
下面有多个 Event 和一个 F&F Method。
-
CONFService
0x004D描述:CDC 请求 ADCU 提供传感器配置信息。
下面有一个 R/R Method。
二、各列含义解析
| 列名 | 含义 |
|---|---|
| Service Name | 服务名称,一组接口的命名空间 |
| Service ID | 服务唯一 ID,16 位,如 0x004B |
| Service Description | 服务功能描述 |
| RPC Type | 接口大类:Method / Event / Field |
| Field Property Name | 如果是 Field,字段名称 |
| Field Property Data Type | 如果是 Field,字段数据类型 |
| RPC Specific Type | 更细类型:Request_Response、Fire_Forget、Notification Event 等 |
| Method/Event Name | 方法或事件名称 |
| Method/Event ID | 方法或事件 ID,16 位。方法通常 0x0000~0x7FFF,事件通常 0x8000~0xFFFF |
| 安全相关 | 功能安全/信息安全标记,如 E2E、SecOC,空表示未定义 |
| Method/Event Description | 方法或事件描述 |
| Eventgroup Name@EventgroupID | 事件组名和 ID,SOME/IP-SD 中订阅的单位 |
| Transport Protocol | 传输协议:TCP / UDP |
| Client | 客户端/订阅者 |
| Input Parameter | 方法请求参数 |
| Output Parameter | 方法响应参数;事件行中常与事件负载相同 |
| Event/Notification Event Parameter | 事件通知负载类型 |
| Serialization Config | 序列化配置引用,如 config1,定义字节序、对齐等 |
| Send Strategy | 发送策略:cyclic(周期)、on change(变化时)等 |
三、逐行解读你的表格
1. ADC_HMI_AP_Service 0x004B
服务描述:SOC 发往 HMI 显示的 AP 相关信号。
事件组 EventGroup_AP_SR@0x0030
| 事件名 | Event ID | 描述 | 负载类型 | 传输 | 发送策略 |
|---|---|---|---|---|---|
Event_AP_SR_Object |
0x8003 |
泊车环境重构:目标物(车辆/行人/静态障碍物) | AP_Object_Array |
TCP | cyclic |
Event_AP_SR_SpeedBump |
0x8009 |
泊车环境重构:减速带 | AP_SpeedBump_Array |
TCP | cyclic |
Event_AP_SR_Pillar |
0x800B |
泊车环境重构:立柱 | AP_Pillar_Array |
TCP | cyclic |
Event_AP_SR_ParkingSlot |
0x800C |
泊车环境重构:车位 | AP_ParkingSlot_Array |
TCP | cyclic |
这些事件都是 Notification Event ,客户端 bmaifusionservice 订阅了事件组 EventGroup_AP_SR@0x0030,服务端会通过 TCP 周期发送这些数组数据。
Fire & Forget 方法
| 方法名 | Method ID | 类型 | 描述 | 输入 | 输出 | Client |
|---|---|---|---|---|---|---|
FF_AP_SR_ParkingSlotSelect |
0x000C |
Fire_Forget | CDC 请求车位选择 | AP_ParkingSlotSelect_Struct |
无 | bmaifusionservice |
Fire & Forget 表示客户端发完请求就走,服务端不返回响应。
事件组 EventGroup_AP_Route@0x0040
| 事件名 | Event ID | 描述 | 负载类型 |
|---|---|---|---|
Event_AP_Plan_GuideLine |
0x8010 |
泊车规划:引导线 | AP_GuideLine_Array |
Event_AP_Route_APA |
0x8014 |
泊车路线:自动泊车 | AP_APA_Struct |
事件组 EventGroup_AP_Pos@0x0050
| 事件名 | Event ID | 描述 | 负载类型 |
|---|---|---|---|
Event_AP_Pos_EgoPositioning |
0x8020 |
泊车定位:自车定位 | AP_EgoPositioning_Struct |
以上事件都通过 TCP 周期发送,客户端均为 bmaifusionservice,序列化配置为 config1。
2. CONFService 0x004D
服务描述:CDC 请求 ADCU 提供传感器配置信息。
| 方法名 | Method ID | 类型 | 描述 | Client | 输入 | 输出 | 传输 |
|---|---|---|---|---|---|---|---|
RR_CONF_CameraIntrinsicParameters |
0x0030 |
Request_Response | CDC 请求 ADCU 响应的摄像头内参信息 | HMIService |
CONF_Ctype |
CONF_CIPDataArray |
TCP |
这是一个标准的请求/响应方法:客户端 HMIService 发请求,服务端返回摄像头内参数据。
四、几个关键点
-
Message ID 组合规则
SOME/IP 的完整 Message ID =
Service ID+Method/Event ID。例如:
Event_AP_SR_Object:0x004B+0x8003=0x004B8003FF_AP_SR_ParkingSlotSelect:0x004B+0x000C=0x004B000CRR_CONF_CameraIntrinsicParameters:0x004D+0x0030=0x004D0030
-
事件 ID 与方法 ID 的范围
方法 ID 一般在
0x0000~0x7FFF;事件 ID 一般在0x8000~0xFFFF。你表里的事件都是0x80xx,方法都是0x00xx,符合规范。 -
Eventgroup 是订阅单位
客户端不是单独订阅某个事件,而是订阅一个 Eventgroup。
例如订阅
EventGroup_AP_SR@0x0030,就会收到该组内所有事件:目标物、减速带、立柱、车位。 -
Send Strategy = cyclic
表示这些事件周期发送,适合状态流、感知数据流。
config1是序列化配置,决定数据怎么变成字节流。 -
空单元格
通常表示"不适用"或"继承上方服务信息",不是没有意义。
五、总结
这张表就是 SOME/IP 通信矩阵,它用二维表格描述了一个 SOA 架构下的服务接口契约:
- 服务有哪些;
- 每个服务下有哪些方法、事件、字段;
- 它们的 ID、参数、传输协议、客户端、事件组、发送策略、序列化配置是什么。
它是汽车以太网 SOA 开发中非常核心的设计文档,后续会用来生成 ARXML、配置 SOME/IP 通信栈、开发客户端/服务端代码以及编写测试用例。