基础概念
DoIP全称为基于IP网络的诊断通信Diagnostic communication over Internet Protocol,由ISO 13400标准定义,是基 于IP的汽车诊断协议。由于DoIP可以传输大量数据,以及响应速度快,且可以通过以太网进行远程诊断,因此DoIP逐步成为代替传统的CAN等总线方式,成为车载网络诊断的必然趋势。DoIP诊断经由通用的统一诊断服务 UDS协议引入诊断服务,通过传输控制协议TCP、用户数据报协议UDP和以太网协议IP,完成外部测试设备与ECU间的诊断通信。
在OSI 7层模型中,ISO 13400规定了DoIP的传输层、网络层、数据链路层和物理层。应用层和会话层部分和基于CAN总线诊断一样采用ISO 14229(UDS诊断协议)实现。
EID:Entity Identification,DoIP的实体标识符,是DoIP节点的唯一识别码,也就是地址,通常被设置为节点的MAC地址
GID:Group Identification,主要用于在车辆网络中标识一组DoIP节点。当车辆上的多个DoIP节点被编为一组时,它们会共享一个GID。这个GID在车辆内部用于同步和识别这些节点,特别是在VIN(Vehicle Identification Number,车辆识别码)未配置或不可用时。GID的使用有助于简化车辆网络的管理和诊断过程。
参考:
车载以太网DoIP 协议,万字长文详解_doip协议-CSDN博客
DoIP协议的主要功能
-
车辆发现
-
诊断通信(核心功能)
-
诊断仪在线监测
-
节点信息
-
路由激活
DoIP 诊断流程
建立连接→选择/识别车辆→路由激活→诊断报文的发送→连接断开
DoIP报文格式
CAN报文的数据帧包括帧起始、仲裁段、控制段、数据段等,同理以太网报文也具有不同的段
而对于Doip报文,是基于TCP或UDP,但在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能。
DoIP部分单独拿出来,DoIP报文由首部和数据两部分组成
其中:
协议版本,长度一个字节,遵循ISO13400的哪个版本,定义如下:
-
0x00:Reserved
-
0x01: DoIP ISO 13400-2:2010
-
0x02: DoIP ISO 13400-2:2012
-
0x03…0xFE: ISO 13400-2 2019
-
0xFF: default value for vehicle identification request messages,发送默认值,返回后就会带上正确值
~协议版本,表示协议版本取反,长度为一个字节
数据类型,长度两个字节,主要分为阶段管理报文,状态信息获取报文,诊断报文三种;参考:DoIP(二)——报文类型_doip报文解析-CSDN博客
DLC,表示负载的数据长度,四个字节表示
下面就数据类型进行具体的讲解
数据类型
阶段管理报文
-
0x0000,DoIP首部否定响应码:DoIP报文在发送出去前,如果检测到错误,比如格式错误,未知负载类型,报文过长,超出内存等会,Doip实体会响应一帧负载类型为0000,负载为1个字节的否定码的报文。
02
FD
0000
00 00 00 00
----
其中NACK Code:
0x00:代表格式错误(例如错误的协议版本) 关闭socket
0x01:代表未知负载类型(例如0xE0 01) 忽略报文
0x02:代表报文过长 忽略报文
0x03:代表超出内存 忽略报文
0x04:代表无效的负载长度 关闭socket
-
0x0001,车辆识别请求,发送方需要获取车辆的VIN码,EID,GID,逻辑地址等,DoIP实体收到返回的车辆识别响应(0x0004)报文的时候,应该包含上述内容,其负载长度为33个字节,其中各个字节代表的含义,也就是说,收到车辆请求报文的
02
FD
0001
00 00 00 00
--
-
0x0002,带EID的车辆识别请求,发送端需要带上目标的EID码,例如 02 FD 00 02 00 00 00 06
70 B3 D5 20 00 01
,如果EID正确,则DoIP实体会返回负载类型为0x0004的车辆识别响应报文,否则不响应02
FD
0002
00 00 00 06
EID(6 Byte)
-
0x0003,带VIN的车辆识别请求,与上述类似,带上的是目标的VIN码,负载长度为17个字节,例如 02 FD 00 03 00 00 00 11
50 41 4E 47 55 30 31 32 30 35 37 34 39 30 08 34 37
,如果VIN正确,则DoIP实体返回负载类型为0x0004的车辆识别响应报文,否则DoIP实体不响应。02
FD
0003
00 00 00 11
VIN(17 Byte)
-
0x0004,车辆识别响应,根据情况响应0x0001 0x0002 0x0003三种请求
02
FD
0004
00 00 00 21
EID+VIN+其他(最长33 Byte)
ISO 13400规定,当测试设备需要通过车载DoIP网关将报文路由到车辆内部网络之前,需要执行路由激活阶段,用于激活TCP_DATA Socket上的路由。该阶段包括路由激活请求和路由激活响应;路由激活请求报文由测试设备发送至DoIP实体,路由激活响应由DoIP实体发送至测试设备。
-
0x0005,路由激活请求,负载长度为11个字节,各字节的含义
02
FD
0005
00 00 00 0B
源地址地址2 Byte+激活类型1 Byte+保留位(11 Byte)
-
0x0006,路由激活响应,负载长度为13个字节,各字节的含义
02
FD
0006
00 00 00 0D
外部诊断设备逻辑地址2 Byte+DoIP实体逻辑地址2 Byte+激活类型1 Byte+保留位(13 Byte)
-
0x0007,在线检测请求报文,前提是已经建立了至少一个TCP连接的情况,测试仪再次发送路由激活请求,Doip实体才会发出在线检测请求报文,不携带DoIP数据,报文中只有DoIP报头
02
FD
0007
00 00 00 00
----
-
0x0008,在线检测响应报文
02
FD
0008
00 00 00 02
源地址2 Byte
状态信息获取报文(0x4001 0x4002 0x4003 0x4004)
- 0x4001
DoIP节点的状态请求报文,该报文数据段无数据
02 | FD | 4001 | 00 00 00 00 | ---- |
- 0x4002
DoIP节点的状态响应报文,主要是响应0x4001报文,数据长度为7个Byte
02 | FD | 4002 | 00 00 00 07 | 7 Byte |
Byte0:节点类型
0x00:DoIP网关
0x01:DoIP节点
Byte1:最大的TCP_DATA_Sockets的数量
Byte2:当前已使用的TCP_DATA_Sockets的数量
其他Byte:保留
- 0x4003
请求DoIP节点的电源模式信息,报文数据段没有数据。
02 | FD | 4004 | 00 00 00 00 | ----- |
- 0x4004
响应DoIP节点的电源模式信息,响应0x4003报文,
02 | FD | 4004 | 00 00 00 01 | 1 Byte |
Byte0:
- 0x00:表示未准备好
- 0x01:准备好
- 0x03:表示不支持
- 其他:保留
诊断报文(8001 8002 8003)
此部分就主要是前面的报文类型不同,对于数据段的具体内容,就是根据UDS协议执行,例如19服务,22服务
- 0x8001,DoIP诊断请求报文,负载长度根据诊断信息确定
02
FD
8001
00 00 00 XX
XX XX XX XX ....
负载长度主要包括:
源地址2Byte
目标地址2Byte
诊断信息(如22 F8 10)
- 0x8002,DoIP诊断肯定响应报文,同样包含发送方和接收方的逻辑地址,还有一字节响应码,以及诊断请求报文中的诊断数据,以便于分析原因。
02
FD
8002
00 00 00 XX
XX XX XX XX ....
- 0x8003,DoIP诊断否定响应报文
02
FD
8003
00 00 00 XX
XX XX XX XX ....