概述
SOME/IP 是一种汽车中间件解决方案,可用于控制消息。它从一开始就被设计为完美适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及最高主机或远程信息处理设备。还确保 SOME/IP 支持信息娱乐域以及车辆中其他域的功能,允许 SOME/IP 用于 MOST 替换场景以及更传统的 CAN 场景。
虽然 IT 解决方案通常只支持单个中间件功能(例如 RPC 或发布/订阅),但 SOME/IP 支持广泛的中间件功能:
- 序列化——在线表示的转换和转换。
- 远程过程调用 (RPC) 和消息传递——实现函数和其他消息的远程调用。
- 服务发现 (SD) – 动态查找和功能并配置其访问。
- 发布/订阅 (Pub/Sub) – 动态配置需要哪些数据并将其发送给客户端。
- UDP 消息分段– 允许通过UDP传输大型 SOME/IP 消息而无需分段。
序列化
SOME/IP 序列化被设计为非常高效;即它使用最少的 RAM 和 CPU 资源。这是通过使用二进制和非描述性格式来实现的。基本上所有参数都写在彼此后面。消息的格式与消息的内存表示(打包结构)非常相似或在许多情况下完全相同。
SOME/IP 可以序列化以下基本数据类型(数据类型默认以网络字节顺序/大端编码,但也可以以小端编码):
- 布尔值:一个 8 位字段,编码 False (0) 或 True (1)。不允许使用所有其他值。
- uint8: 8 位大小的无符号整数。
- uint16: 16 位大小的无符号整数。
- uint32: 32 位大小的无符号整数。
- uint64: 64 位大小的无符号整数。
- sint8: 8 位大小的有符号整数。
- sint16: 16 位大小的有符号整数。
- sint32: 32 位大小的有符号整数。
- sint64: 64 位大小的有符号整数。
- float32: 32 位大小的浮点数。
- float64: 64 位大小的浮点数。
SOME/IP 可以序列化以下复杂数据类型:
- struct:组合了预定义参数列表的参数。一个结构可以从一个可选的长度字段开始,该字段计算长度字段之后结构的所有字节。
- string:固定长度或动态长度的字符串,用于传输 ascii、UTF-8 或 UTF-16 字符。对于动态长度字符串,该字符串以一个 big-endian 编码的长度字段开始,计算字符串字符使用的字节数。
- 数组:包含相同参数类型的重复的参数。这可以是预定义数量或动态数量的参数。对于具有动态长度的数组,使用长度字段。
- 枚举:具有命名不同值的选项的 uint。
- 位域: 8、16 或 32 位参数,每一位代表一个布尔值。每个布尔值都可以有一个名称以及每个 True 和 False 值的名称。
- union:一个参数,可以携带一个预定义的参数类型的参数,在运行时确定。序列化使用长度字段、类型字段和参数的数据。
长度和类型字段的大小为 32 位(默认),可配置为 0、8、16 或 32 位。所有长度和类型字段都以网络字节顺序/大端编码。
远程过程调用 (RPC) 和消息传递
某些/IP 服务支持以下消息:
- 请求/响应方法:从客户端发送到服务器的请求和从服务器发送回客户端的响应。此外,SOME/IP 允许将错误响应从服务器发送回客户端,而不是常规响应。此功能可用于在错误情况下实现不同的有效负载格式。
- Fire and Forget 方法:请求从客户端发送到服务器。
- 事件:事件从服务器发送到相关客户端。哪个客户端需要此事件将通过 SOME/IP-SD 确定。
- 字段:一个字段可以有一个选项通知器(循环或更改时发送的事件)、一个可选的设置器(更新字段的请求/响应方法)和一个可选的获取器(一个请求/响应方法来读取字段的当前值。)
SOME/IP 序列化的专有扩展
SOME/IP 已经在消息序列化方面支持了很大的灵活性,比如稍后向消息或内部结构添加参数。
在后来的 AUTOSAR 版本中,专有扩展(最初被错误地称为 TLV 扩展)被添加到 SOME/IP 中,以支持更大的灵活性。基本上参数和/或结构成员可以以数据 ID 和长度指示作为前缀。虽然这会降低序列化的效率,但它增加了灵活性,例如从消息中删除参数或稍后重新排序参数。要使用此功能,API 和应用程序也需要支持此功能。
由于有限的灵活性和高开销,这个扩展目前没有被广泛使用。
请记住,并非所有 SOME/IP 实现都支持此扩展,因为它不是原始 SOME/IP 的一部分。
AUTOSAR 支持
SOME/IP 是唯一已知的旨在集成到 AUTOSAR 4.x 版本中的中间件:
- AUTOSAR 4.0 – 对已经存在的 SOME/IP 消息的基本支持。
- AUTOSAR 4.1 – 添加了对 SOME/IP-SD 和发布/订阅的支持。
- AUTOSAR 4.2 – 添加了转换器以进行序列化以及其他优化。
- AUTOSAR 4.3 – 修复了一些转换器错误,添加了对带有 SOME/IP-TP 的大型 UDP 消息的支持以及一些/IP-SD 优化。
有关 AUTOSAR 规范,请参阅出版物。
开源工具支持
由于 Wireshark 3.2 SOME/IP 支持是公开的!去Wireshark获取它。Wireshark 支持 SOME/IP、SOME/IP-SD、SOME/IP-TP 和可配置的 SOME/IP 有效载荷剖析。在接下来的版本中,添加了一些重要的改进,比如 TECMP 支持,如果你在打开的情况下进行捕获。
可以在github上找到有效载荷剖析配置的生成器。
目前,Wireshark(3.6 版?)和配置生成器中添加了一些更令人兴奋的功能。敬请关注。
版权所有 2012 – 2021 Lars Völker 博士。此处陈述的意见不一定是我雇主的意见。