一文了解什么是SOME/IP协议(超详细)

SOME/IP

在CAN总线的车载网络中,通信过程是面向信号的

一文了解什么是SOME/IP协议(超详细)_第1张图片

当ECU的信号的值发生了改变,或者发送周期到了,就会发送消息,而不考虑接收者是否需要,这样就会造成总线上出现不必要的信息,占用了带宽

而SOME/IP的出现就是为了解决这一问题,它和CAN网络发送机制不同,它是接收者有需要时才会发送,避免了无效信息对总线造成的影响

SOME/IP

Scalable service-Oriented MiddlewarE over IP,通过网络提供面向服务的通信,不能写作Some/IP等

既然SOME/IP是一种提供服务的通信协议,我们就可以把请求服务的ECU看成是client,而提供服务的ECU就是server

SOME/IP作为一种通信协议,它也有自己的数据结构,根据官方文档

一文了解什么是SOME/IP协议(超详细)_第2张图片

SOME/IP由Header + Payload构成,其中协议头部里的字段是:

Message ID

4个字节,对应用程序方法的RPC调用或识别事件,方法和事件正好对应着Message ID的两个组成部分:Service ID和Method ID

什么是RPC?

Remote Procedure Call,A method call from one ECU to another that is transmitted using messages,使用消息从一个ECU对另一个ECU里的方法进行调用

Length

4个字节,它是从Request ID开始一直到Payload的结尾的字节数

Request ID

4个字节,它由Client ID和Session ID组成

其中Client ID是请求服务的ECU的唯一标识符,它能够让提供服务的ECU区分来自不同的客户端的SOME/IP报文

Session ID是区分来自同一发送者的消息的唯一标识符,它会随着请求/响应消息的增加而增加,如果响应Session ID和请求Session ID不匹配,则订阅者必须忽略响应

当生成响应消息时,server端会把Request ID复制到响应消息

Protocol Version

1个字节,SOME/IP协议版本号

Interface Version

1个字节,接口版本号

Message Type

1个字节,用于区分不同类型的消息

一文了解什么是SOME/IP协议(超详细)_第3张图片

request(0x00)消息如果没有错误发生应该以response(0x80)响应,如果发生错误,则发送error(0x81),也可以发送没有没有响应消息的request(0x01)

notification(0x02)属于事件通知类服务,由client向server订阅服务内容,然后server会自动给client发布服务内容

notification分为两类:Event和Field,这两类都需要先使用SOME/IP-SD对服务进行订阅,这是前提,然后再用常规的SOME/IP notification类型消息发布通知内容

Event的过程是:client发SOME/IP-SD给server订阅,server告知订阅结果,server发布通知内容,server发布的方式有三种:

  • 循环发送-以固定的时间发送更新后的值
  • 更新后发送-一旦值发生改变就会发送
  • 大于特定的值-与旧值的差值达到某个条件时发送

而Field在Event的基础上,还可以对信息进行getter/setter

TP标志类型的消息和上面的一般类型逻辑相同

Return Code

1个字节,返回码用来表示请求是否已成功处理

一文了解什么是SOME/IP协议(超详细)_第4张图片


传输层

SOME/IP属于应用层,它就需要依赖传输层的TCP/UDP协议,一个SOME/IP服务可以通过以下方式传达所有方法、事件和通知

  • TCP连接
  • UDP单播
  • UDP多播

至于哪种SOME/IP用TCP,哪种用UDP,可以根据SOME/IP的服务类型和TCP/UDP的特性来考虑(TCP是可靠的单播,UDP是不可靠的单播和多播),比如一个ECU需要给多个ECU发布服务内容时,就需要依赖UDP传输


SOME/IP-SD

SOME/IP是client和server对服务内容的请求和响应,但是client如何知道server有哪些服务可提供呢?常规的SOME/IP消息并不具有这样的功能,所以就有了SOME/IP-SD协议,可用于汽车网络中的服务发布/订阅

SOME/IP-SD

Service Discovery Protocol,服务发现协议,是SOME/IP协议的一种类型,它用于:

  • 找到服务
  • 检测服务是否正在运行
  • 实现发布/订阅处理

SOME/IP可用在TCP/UDP协议上,但是SOME/IP-SD只能用在UDP上,因为SOME/IP-SD只是为了发现服务,并不需要TCP的可靠性连接等特性

SOME/IP-SD协议结构

一文了解什么是SOME/IP协议(超详细)_第5张图片

你会发现字段Message ID、Protocol Version、Interface Version、Message Type、Return Code的值都是固定的,SOME/IP-SD的Service ID是0xFFFF,Method ID是0x8100

SOME/IP-SD有两种发现机制:

  • Find Service Entry

在服务的当前状态未知的情况下,由client向server发送请求可用的服务

  • Offer Service Entry

主动告知其他通信节点它可用的服务


Method ID是0x8100

SOME/IP-SD有两种发现机制:

  • Find Service Entry

在服务的当前状态未知的情况下,由client向server发送请求可用的服务

  • Offer Service Entry

主动告知其他通信节点它可用的服务


更多内容,请关注汽车网络诊断通信

你可能感兴趣的:(汽车通信协议,汽车总线协议,SOME/IP协议)