目录
1. SOME/IP 概述
2. 服务和服务接口
2.1 Method
2.2 Event
2.3 Field
2.4 接口示例
3. SOME/IP 报文格式
4. SOME/IP SD
5.小结
1. SOME/IP 概述
在入门车载以太网(4) -- 传输层(TCP/UDP 它来了)里,我们了解到,在当前汽车领域数据通信方式主要有两种:
- Signal-Oriented Communication,面向信号的通信,例如 CAN、LIN、FlexRay 总线,发送方会周期或者在数据更新时发送信息,不管网络中的接收节点当前是否需要这些数据。;
- Service-Oriented Communication,面向服务的通信,服务请求方Client 只需要发送 SID 来调取各种功能服务,服务提供方 Server,根本不关心服务内部是如何实现。这种情况下,服务都有一个唯一且互不影响的 ID 号,通过服务中间件完成自身发布、订阅其他服务和通讯工作,例如 SOME/IP,很明显,这种通信方式只有在网络中至少有一个接收节点需要数据时,发送节点才会发送数据,网络总线负载可控。
在面向服务的通信中,我们提到了服务中间件的概念,中间件运行在操作系统和应用软件之间,为应用软件提供运行环境,起到“承上启下”的作用。举个例子,假设两个不同操作系统的 ECU(QNX、Linux)想要相互通信,可以设计一个“中间件”,用来管理不同软件之间的数据交互,这使得应用软件开发者就不用去关心底层的通信,不同软件单元之间的“墙”变得透明。我们今天聊的 SOME/IP 协议理论上是一种中间件。
SOME/IP,全称 Scalable Service-Oriented MiddlewarE over IP,基于IP的面向服务的可扩展的中间件,在 2014 年被纳入 AUTOSAR 规范,在车载以太网架构中提供面向服务的通信接口。它在车载以太网模型中位于应用层(Layer5~7),作为客户端(client)和服务端(Server)之间的通信方式。
SOME/IP 协议的设计支持多种操作系统,甚至在没有操作系统的嵌入式设备上也可以使用,例如 T-BOX、摄像头、符合AUTOSAR 架构的 ECU 等等,它有如下功能:
- 序列化和反序列化:将数据结构转换成二进制串或者将二进制串转换为数据结构,这样有利于数据的高效传输;
- 远程过程调用 (RPC):支持跨网络的服务或过程调用,实现不同 ECU 之间的紧密协作;
- 服务发现:客户端寻找所需的服务,服务端告诉网络节点自己提供哪些服务,这是一个动态过程,有了服务发现(SD)方便后续功能的扩展,系统更加灵活;
- 发布和订阅:动态配置哪些数据是需要的,哪些数据应该发送到客户端;
- UDP 消息分段:允许在 UDP 上传输大的 SOME/IP 消息,而不需要在 IP 层分片。
值得一提的是,根据 AUTOSAR 标准要求,该协议的缩写只能为 SOME/IP,Some/IP 这类似的均是错误的。
2. 服务和服务接口
服务(Service):是一个离散的功能单元,可以远程访问、独立更新,更具体一点,服务对消费者是一个黑盒的功能单元,使用标准接口进行通信,本身包含一种或者多种功能,可重用、无状态。
服务接口则是访问服务具体功能的手段,在 SOME/IP 中服务接口主要由三种类型组成:Methods(方法)、Event(事件)、Fields(字段)。
2.1 Method
远程过程调用(RPC)的一种形式,客户端可以调用服务端的函数或程序,在 SOME/IP 中,方法又分为两种形式:
- Request/Response:客户端发送请求,服务端处理请求后返回响应
- Fire & Forget:客户端发送请求,但不需要服务端的响应
2.2 Event
Event(事件)是一种单向通信机制,客户端订阅这些事件,服务端向客户端发送通知,就像公众号一样,一旦订阅了,就会收到该公众号的推送。而这个推送,可以是周期性发送,也可以是有变化或者更新后发送,就像我这几天断更一样。通讯模型为 Publish/Subscribe。
2.3 Field
在面向对象编程里,Field 字段是类的成员变量,表征一个状态、具有有效值。一旦声明为私有变量,则只能在类的内部被访问或者修改,那么就需要对外提供获取\、设置值的一种方法,即 Setter 和 Getter;此外,Fiels 还需具备通知的方法,即 Notifier。
AUTOSAR_PRS_SOME/IP Protocol 规定 Fields 至少一个 Setter、一个 Getter 和一个 Notifier。
Setter 和 Getter 的通信示例如下:
从上图可以看到,客户端可以通过 Setter/Getter 去设置/获取某一属性和状态的值,因此,理论上它也是一个 Request/Response 类型的方法。
Notifier 的通信示例如下:
与 Event 类似,客户端订阅该字段时,服务器应立即发送一条事件消息将该字段的值传输给客户端,后续字段里的值发生变化时发送,无法像 Event 一样周期性发送。不过 Field 是一个持续存在的变量,比如车速、环境温度等,这些可以在任何时刻获取,也有历史数据;而 Event 指的是一个事件,事件没有发生就不存在。
2.4 接口示例
因此,在 SOME/IP 里,服务接口主要就是两类:Method 和 Event;
Method(方法):Request/Response,Fire & Forget,Setter/Getter Fields;
Event(事件):Publish/Subscribe Event、Notifier Field
下图为怿星科技提供的服务接口示例:
摄像头检测服务标志本身是一个服务,服务提供者是一个智能摄像头控制器,服务消费方例如 ADAS 控制器,需要使用检测限速标志这个服务;
摄像头控制器的服务接口包括
- R/R Method:摄像头状态检测,ADAS 查看摄像头状态,因此需要Response;
- F&F Method:ADAS 通知摄像头:我下线了
- Field:限速值、距离等等,可通过 Setter、Getter 设置或者获取,当值发生变化时,通过 notifier 进行通知;
- Events:ADAS 订阅了该事件,当检测到限速标志时,摄像头主动向 ADAS 发起 event。
3. SOME/IP 报文格式
SOME/IP 在车载以太网中位于应用层,封装和解封装流程如下:
SOME/IP 整体报文格式如下:
每个位域的解释如下表所示:
值得一提的是 Message Type 这个位域, 前面提到的 R/R method、F&F method,event 就是利用该位域表征,具体如下:
当客户端发起一个 R/R method,该位域为 00,如果是 F&F method,该位域为 0x01;
紧接着 Return Code 则表示对请求的处理,例如 0x00(E_OK),0x06(Timeout)等。
4. SOME/IP SD
我们知道在网络互联的背景下,服务并不完全是静态配置,前面我们了解到SOME/IP 的工作过程,但是客户端 Client 如何发现 Server 提供的服务并订阅?
这就需要 SOME/IP SD(Service Discovery)。本质上,SOME/IP SD 是一种特殊服务,主要用于实现服务发布订阅。服务器可以发送“Offer Service”向网络发布自己能提供的所有服务,客户端可以发送"Find Service"来订阅所需服务。
具体讲,SOME/IP SD 功能主要分为
服务寻址
- FindService
- OfferService
- StopOffer Service
订阅事件
- Subscribe Event groupAck
- Subscribe Event group
- Subscribe Event groupNack
- StopSubscribe Eventgroup
具体通信模型如下所示:
由于 SOME/IP SD 也属于一种特殊的 SOME/IP 报文,因此格式比较类似,如下:
可以看到,SOME/IP SD 的 message ID 固定为 0xFFFF8100,其余字段参考 SOME/IP。
比较特殊为 Flag 位域,格式如下:
在重启或上电时置 1,当 Session ID 完成 1~0xFFFF 之后,该位置 0;Session ID 是一个唯一的标识符,它区分来自同一发送者的顺序消息或请求。
根据 AUTOSAR 标准,1 个 SD message 可能包含 1 个或者多个 Entry,值得注意的是每个 Entry 大小都是 16 个字节,一个 Entry 可能包含 0 - 2 个 Option。如下图所示:
Type 位域:0x00(FindService)、0x01(OfferService)、0x01(StopOfferService);
TTL 位域:该 entry 的生命周期,单位为秒;
Option 是用来传输 Entry 的附加信息的。每个 Entry 可以包含一个或多个 Option,这些 Option 提供了关于服务实例的额外信息,例如服务实例的IP地址、传输层协议和端口号等。
Option 的主要用途包括:
- 传输附加信息:包含服务实例的详细信息,如 IPv4 或 IPv6 的地址、端口号和传输协议类型 。
- 配置信息:包含配置信息,这些信息对于服务的发现和订阅是必要的。
- 负载均衡:在某些情况下,Option 可以用于负载均衡,提供每个实例的优先级信息,客户端可以根据这些信息选择实例。
- 多播选项:用于广播 IPv4 或 IPv6 的 IP 地址及端口号,其中传输层协议只能使用 UDP 协议。
以如下通信过程为例:
客户端发送 SD 报文,类型为 FindService;客户端返回 OfferService,其中 Entry 参数为 IPV4 endpoint、IP 地址、协议为 UDP、端口号为 30509;依次类推。
5.小结
SOME/IP 是一种专为汽车电子领域设计的中间件协议,它支持面向服务的通信,允许汽车中的电子控制单元(ECU)作为服务提供者或消费者进行交互。
SOME/IP SD 是 SOME/IP 协议的一部分,用于服务的发现和管理。它允许 ECU 动态地发现网络中的服务实例,检测服务实例的状态,并实现发布/订阅处理。SOME/IP SD 通过在 SOME/IP 消息的 payload 中传输服务实例的信息来实现服务发现。
SOME/IP 及其服务发现机制 SOME/IP SD 为汽车电子系统提供了一种高效、灵活且安全的通信解决方案,支持现代汽车网络的复杂需求,并推动了智能汽车技术的发展。
END
作者:快乐的肌肉
来源:汽车MCU软件设计
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。)