徽州骆驼 · 1 天前

入门车载以太网(5) -- SOME/IP 协议

目录

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:客户端发送请求,但不需要服务端的响应

image.png

2.2 Event 

Event(事件)是一种单向通信机制,客户端订阅这些事件,服务端向客户端发送通知,就像公众号一样,一旦订阅了,就会收到该公众号的推送。而这个推送,可以是周期性发送,也可以是有变化或者更新后发送,就像我这几天断更一样。通讯模型为 Publish/Subscribe。

image.png

2.3 Field

在面向对象编程里,Field 字段是类的成员变量,表征一个状态、具有有效值。一旦声明为私有变量,则只能在类的内部被访问或者修改,那么就需要对外提供获取\、设置值的一种方法,即 Setter 和 Getter;此外,Fiels 还需具备通知的方法,即 Notifier。

AUTOSAR_PRS_SOME/IP Protocol 规定 Fields 至少一个 Setter、一个 Getter 和一个 Notifier。

Setter 和 Getter 的通信示例如下:

image.png

从上图可以看到,客户端可以通过 Setter/Getter 去设置/获取某一属性和状态的值,因此,理论上它也是一个 Request/Response 类型的方法。

Notifier 的通信示例如下:

image.png

与 Event 类似,客户端订阅该字段时,服务器应立即发送一条事件消息将该字段的值传输给客户端,后续字段里的值发生变化时发送,无法像 Event 一样周期性发送。不过 Field 是一个持续存在的变量,比如车速、环境温度等,这些可以在任何时刻获取,也有历史数据;而 Event 指的是一个事件,事件没有发生就不存在。

2.4 接口示例

因此,在 SOME/IP 里,服务接口主要就是两类:Method 和 Event;

Method(方法):Request/Response,Fire & Forget,Setter/Getter Fields;
Event(事件):Publish/Subscribe Event、Notifier Field

下图为怿星科技提供的服务接口示例:

image.png

摄像头检测服务标志本身是一个服务,服务提供者是一个智能摄像头控制器,服务消费方例如 ADAS 控制器,需要使用检测限速标志这个服务;

摄像头控制器的服务接口包括

  • R/R Method:摄像头状态检测,ADAS 查看摄像头状态,因此需要Response;
  • F&F Method:ADAS 通知摄像头:我下线了
  • Field:限速值、距离等等,可通过 Setter、Getter 设置或者获取,当值发生变化时,通过 notifier 进行通知;
  • Events:ADAS 订阅了该事件,当检测到限速标志时,摄像头主动向 ADAS 发起 event。

3. SOME/IP 报文格式

SOME/IP 在车载以太网中位于应用层,封装和解封装流程如下:

image.png

SOME/IP 整体报文格式如下:

image.png

每个位域的解释如下表所示:

image.png

值得一提的是 Message Type 这个位域, 前面提到的 R/R method、F&F method,event 就是利用该位域表征,具体如下:

image.png

当客户端发起一个 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

具体通信模型如下所示:

image.png

由于 SOME/IP SD 也属于一种特殊的 SOME/IP 报文,因此格式比较类似,如下:

image.png

可以看到,SOME/IP SD 的 message ID 固定为 0xFFFF8100,其余字段参考 SOME/IP。

比较特殊为 Flag 位域,格式如下:

image.png

在重启或上电时置 1,当 Session ID 完成 1~0xFFFF 之后,该位置 0;Session ID 是一个唯一的标识符,它区分来自同一发送者的顺序消息或请求。

根据 AUTOSAR 标准,1 个 SD message 可能包含 1 个或者多个 Entry,值得注意的是每个 Entry 大小都是 16 个字节,一个 Entry 可能包含 0 - 2 个 Option。如下图所示:

image.png

Type 位域:0x00(FindService)、0x01(OfferService)、0x01(StopOfferService);

TTL 位域:该 entry 的生命周期,单位为秒;

Option 是用来传输 Entry 的附加信息的。每个 Entry 可以包含一个或多个 Option,这些 Option 提供了关于服务实例的额外信息,例如服务实例的IP地址、传输层协议和端口号等。

Option 的主要用途包括:

  • 传输附加信息:包含服务实例的详细信息,如 IPv4 或 IPv6 的地址、端口号和传输协议类型 。
  • 配置信息:包含配置信息,这些信息对于服务的发现和订阅是必要的。
  • 负载均衡:在某些情况下,Option 可以用于负载均衡,提供每个实例的优先级信息,客户端可以根据这些信息选择实例。
  • 多播选项:用于广播 IPv4 或 IPv6 的 IP 地址及端口号,其中传输层协议只能使用 UDP 协议。

以如下通信过程为例:

image.png

客户端发送 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)加入技术交流群,请备注研究方向。)
推荐阅读
关注数
5713
内容数
453
汽车电子与软件行业的相关技术报道及解读。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息