自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记

文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。


笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888

文章目录

    • 1、简述
    • 2、VSOME/IP 协议网络架构
    • 3、VSOME/IP 的几种服务接口
      • 3.1、Method
      • 3.2、Event
      • 3.3、Field
    • 4、VSOME/IP 数据格式(消息组成)
      • 4.1、Message ID
      • 4.2、Length
      • 4.3、Request ID
      • 4.4、Protocol Version:
      • 4.5、Interface Version:
      • 4.6、Message Type:
      • 4.7、Return Code:
      • 4.8、Payload

1、简述

  SOME/IP 协议于2011年由当时在 BMW 集团的 Lars Völker 设计,并于2013年纳入 AUTOSAR 4.1规范。目前主要实现了 SOME/IP 的通信和服务发现功能,并在此基础上增加了少许的安全机制。

  SOME/IP 全称为 可扩展的面向服务的基于IP的中间件(Scalable service-Oriented MiddlewarE over IP),是用于控制消息的汽车中间件解决方案。此中间件是为典型的汽车用例设计的,并且与 AUTOSAR 兼容(至少在线格式级别上)。

 SOME/IP 是一种面向服务的可伸缩的协议。

2、VSOME/IP 协议网络架构

  SOME/IP 在以太网协议栈中处于四层协议之上,属于应用层协议,底下的传输可以使用 TCP 或者 UDP 协议。基于 UDP 协议的 SOME/IP 实现限制了单条消息长度不能超过单个 UDP 包的大小,为解决这个问题2016年的 AUTOSAR 4.3 规范中添加了SOME/IP-TP 协议,定义了如何在 UDP 上分段传输更大的 SOME/IP 消息。

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第1张图片

  SOME/IP 在 标准的网络七层架构中的位置。

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第2张图片

3、VSOME/IP 的几种服务接口

  服务是 SOME/IP 的最核心概念。在一个服务中,定义了 Server 和 Client 两个角色:Server 提供服务,Client 调用服务。对于同一个服务,只能存在一个 Server,但可以同时存在多个Client调用服务。一个 Service 由 0~多个 Event/Method/Field 组成。

  SOME/IP 定义服务的接口包含方法(Methods),事件(Events),字段(Fields)和事件组(Eventgroups),可以支持请求/响应模式的远程服务调用,也可以支持订阅/发布模式的消息通知。

  SOME/IP 的一个主要用例是控制消息的通讯,类似于传统 CAN 总线架构的控制信号传输, SOME/IP 在以太网上支持低延时的周期性和事件性的消息传输。所以说,与 CAN 相比,面向服务的通讯方式能够大大降低总线的负载率。

3.1、Method

  调用或引用一个进程/函数/子程序,通常由 Client 发起,并由 Server 答复。Request 是最常见的一种 Method,由 Client 向 Server 请求数据;Response 是 Request 的结果,由 Server 答复Client 的 Request 。而 Method Fire & Forget 方式,只 Client 向 Server 发起,但 Server 对该请求不回复。

3.2、Event

一个单向的数据传输,只能是 on change 类型,用于 Server 主动向订阅(Subscribe)了相关服务的Client 发布(Publish)信息。

3.3、Field

由以下三项内容构成:

  • Notifier:通知,Server 的 Client 订阅了服务后第一时间主动向其发送数据。

  • Getter:获取,由 Client 向 Server 请求数据。

  • Setter:设置,由 Client 修改 Server 的数据。

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第3张图片

4、VSOME/IP 数据格式(消息组成)

 SOME/IP 的数据报文格式如下图,包头部分包含服务 ID,方法 ID,消息体长度,客户端 ID,会话 ID,协议版本,消息类型等数据。

  SOME/IP 的消息有两部分:消息头 (Header)有效负载 (Payload) 。如下图中所示的消息头主要由标识符组成:

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第4张图片

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第5张图片

自动驾驶 —— 面向服务的车规级通信协议 SOME/IP 通讯原理 学习笔记_第6张图片

4.1、Message ID

  用于唯一标示消息。消息为Method类型时,由 Service ID 和 Method ID 组成;当消息为Event类型时,由Service ID和Event ID组成,如下图所示:

在这里插入图片描述

  • Service ID:单个服务唯一的标识( unique identifier for each service)。
  • Method ID: 0-32767 for methods,32768-65535 for events

4.2、Length

  • Length:length of payload in byte (covers also the next IDs, that means 8 additional bytes)

4.3、Request ID

  服务提供者和调用者可用于区分相同消息的不同调用,由 Client ID 和 Session ID 组成。如下图所示:

  通常我们称服务提供者为 Service,服务调用者为 Client,Service ID 和 Client ID 用于区分,一般会在一个 SOA 架构中统一地配置这些 ID 的数值。简单理解,在 SOA 中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个结果。
在这里插入图片描述

  • Client ID:vehicle ECU里的发出请求的客户端的唯一标识,在整车中都必须是唯一的 (unique identifier for the calling client inside the ECU; has to be unique in the overall)。
  • Session ID:会话ID,自动增加 (identifier for session handling; has to be incremented for each call)。

4.4、Protocol Version:

  协议头版本号,目前该值必须为1 。

4.5、Interface Version:

  服务接口的主要版本(major version of the service interface)。接口版本号,一般由服务提供者定义。

4.6、Message Type:

  用于标识消息的类型;期望回复的请求、只请求不回复、通知/事件(不回复)。

Number Value Description
0x00 REQUEST A request expecting a response (even void)
0x01 REQUEST_NO_RETURN Afire & forget request
0x02 NOTIFICATION A request of a notification/event callback expecting no response
0x80 RESPONSE The response message
0x81 ERROR The respones containing an error

4.7、Return Code:

  用于标识请求是否成功的处理,不同的消息类型,他们在传输过程中所携带的 Return Code 也是不同的。

Number Value Description
0x00 REQUEST N/A set to 0x00 (E_OK)
0x01 REQUEST_NO_RETURN N/A set to 0x00 (E_OK)
0x02 NOTIFICATION N/A set to 0x00 (E_OK)
0x80 RESPONSE See Return Codes in [PRS_SOMEIP_00191]
0x81 ERROR See Return Codes in [PRS_SOMEIP_00191]

Error Code Table:

ID Name Description
0x00 E_OK No error occurred
0x01 E_NOT_OK An unspecified error occurred
0x02 E_UNKONWN_SERVICE The requested Service ID is unknown
0x03 E_UNKONWN_METHOD The requested Method ID is unknown, Service ID is known
0x04 E_NOT_READY Service ID and Method ID are known, Application not running
0x05 E_NOT_REACHABLE Syetem running the service is not reachable (internal error code only)
0x06 E_TIMEOUT A timeout occurred (internal error code only)
0x07 E_WRONG_PROTOCOL_VERSION Version of SOME/IP protocol not supported
0x08 E_WRONG_INTERFACE_VERSION Interface version mismatch
0x09 E_MALFORMED_MESSAGE Desirialization error, so that payload cannot be deserialized.
0x0A E_WRONG_MESSAGE_TYPE An unexpected message type was recelved (eg:REQUEST_NOT_RETURN for method defined as REQUEST)
0x0B E_E2E_REPEARED Repeated E2E calculation error
0x0C E_E2E_WRONG_SEQUENCE Wrong E2E specified error
0x0D E_E2E Not further specified E2E error
0x0E E_E2E_NOT_AVAILABLE E2E not available
0x0F E_E2E_NOT_NEW_DATA No new data for E2E calculation present
0x10-1F RESERVED Reserved for generic SOME/IP errors. These errors will be specified in future version of this document
0x20-5E RESERVED Reserved for specific errors of services and methods. These errors are specified xxx.

4.8、Payload

  通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是 payload 。

你可能感兴趣的:(#,SOME/IP,自动驾驶,tcp/ip,网络,SOME/IP)