上次我们聊了什么是DoIP,以及DoIP在车载网络以及车载ECU中的作用,我们应该有大概的了解,以及它的极大地作用,今天我们开始全面的去了解它,毕竟只有等我们了解它以后,才能更好的应用。今天要聊的第一个内容呢就DoIP所包含的报文类型有哪些?如果读文章的朋友做过CAN/CANFD的话,我们知道CAN报文就有通信报文、诊断报文;而在车载以太网中,为了进一步的细分各个场景下的使用,因此会对每一个块的报文都有很详细的划分,不仅仅是在DoIP中,在SomeIP中也是划分了多类型的报文;好了废话不多说,今天主要聊下DoIP的报文类型。
注意:如果看文章的时候有些缩写词不懂,可以查看DoIP相关的缩写词:车载以太网 - 诊断协议常用缩写_车载网络测试的博客-CSDN博客
02、DoIP的报文类型
Payload type value | Payload type name | Specified in subclause | Support (DoIP gateways) | Support (DoIP nodes) | Port and protocol |
0x0000 | Generic DoIP header negative acknowledge | 7.1.2 | mandatory | mandatory | UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST TCP_DATA |
0x0001 | Vehicle identification request message | 7.1.4 | mandatory | mandatory | UDP_DISCOVERY |
0x0002 | Vehicle identification request message with EID | 7.1.4 | optional | optional | UDP_DISCOVERY |
0x0003 | Vehicle identification request message with VIN | 7.1.4 | mandatory | mandatory | UDP_DISCOVERY |
0x0004 | Vehicle announcement message/vehicle identification response message | 7.1.4 | mandatory | mandatory | UDP_DISCOVERY UDP_TEST_EQUIPMENT_REQUEST |
0x0005 | Routing activation request | 7.1.5 | mandatory | mandatory | TCP_DATA |
0x0006 | Routing activation response | 7.1.5 | mandatory | mandatory | TCP_DATA |
0x0007 | Alive check request | 7.1.7 | mandatory | mandatory | TCP_DATA |
0x0008 | Alive check response | 7.1.7 | mandatory | mandatory | TCP_DATA |
0x0009 to 0x4000 | Reserved by this part of ISO 13400 | ||||
0x4001 | DoIP entity status request | 7.1.9 | optional | optional | UDP_DISCOVERY |
0x4002 | DoIP entity status response | 7.1.9 | optional | optional | UDP_TEST_EQUIPMENT_REQUEST |
0x4003 | Diagnostic power mode information request | 7.1.8 | mandatory | mandatory | UDP_DISCOVERY |
0x4004 | Diagnostic power mode information response | 7.1.8 | mandatory | mandatory | UDP_TEST_EQUIPMENT_REQUEST |
0x4005 to 0x8000 | Reserved by this part of ISO 13400 | ||||
0x8001 | Diagnostic message | 7.1.6 | mandatory | mandatory | TCP_DATA |
0x8002 | Diagnostic message positive acknowledgement | 7.1.6 | mandatory | mandatory | TCP_DATA |
0x8003 | Diagnostic message negative acknowledgement | 7.1.6 | mandatory | mandatory | TCP_DATA |
0x8004 to 0xEFFF | Reserved by this part of ISO 13400 | ||||
0xF000 to 0xFFFF | Reserved for manufacturer-specific use | — | optional | optional | — |
1、0x0000:通用DoIP标头否定确认,这个类型为ISO13400强制必须实现的报文类型,同时支持UDP和TCP协议
2、0x0001:车辆信息请求,这个用于请求当前车辆的VIN码、EID码、GID码等信息,无需任何payload内容,也是13400协议强制要求实现的,仅支持UDP协议,不支持TCP协议
3、0x0002:带有EID的车辆信息请求,这个功能跟0x0001 payload type有点类似,都是请求车辆的VIN码、EID码、GID码等信息,但是他需要带上EID信息才能获取到,如果没有EID信息则无法获取车辆的这些信息,为可选择实现,仅支持UDP协议,不支持TCP协议
4、0x0003:带有VIN的车辆信息请求,这个功能跟0x0001、0x0002 payload type有点类似,都是请求车辆的VIN码、EID码、GID码等信息,但是他需要带上VIN信息才能获取到,如果没有VIN信息则无法获取车辆的这些信息,也是13400协议强制要求实现的,仅支持UDP协议,不支持TCP协议
5、0x0004:车辆公告消息/车辆识别响应消息,这个类型其实就是对于0x0001、0x0002、0x0003等信息的响应类型,当出现上面3种类型的请求后,DUT会以0x0004类型为应答,返回给Tester带有车辆的VIN码、EID码、GID码等信息,为13400强制要求实现的。仅支持UDP协议,不支持TCP协议
6、0x0005:路由激活请求,这个类型会非常重要,在ECU中想要对其进行诊断,前置步骤必须实现路由激活,而0x0005就是路由激活请求,在激活请求发布后,DUT返回激活应答,才可以进行正常的DoIP诊断通信;为13400强制实现内容。仅支持TCP协议
7、0x0006:路由激活应答,这个类型是对路由激活请求的应答,可以把它们类比成CAN诊断中的一对诊断,比如10 01,50 01;这是一对肯定的诊断请求和应答。不过在DoIP中,他有更多的类型和含义;包含各种激活成功或者失败的原因,都会返回给Tester。当然也是13400强制实现内容。仅支持TCP协议
8、0x0007&0x0008:已激活的Socket是否在使用的请求和应答,这个类型是Tester检查我们之前激活的Socket是否依然在使用,DUT通过0x0008类型返回应答结果。虽然在测试中不常用,但依然是一个重要的功能,大家注意。为13400强制实现内容。仅支持TCP协议
9、0x4001:DoIP实体状态请求,这个主要用于检查当前网关状态响应值的请求,Tester获取响应值为多少是否与规范一致等信息检查。选择性实现,仅支持UDP协议
10、0x4002:DoIP实体状态应答,跟DoIP实体状态请求构成一对交互,DUT返回当前实体的状态信息给Tester,选择性实现,仅支持UDP协议
11、0x4003:DoIP电源状态信息请求,DoIP部分存在电源激活线,这里用于读取DoIP电源状态的信息的获取请求。13400强制实现内容,不过部分主机厂以及协议栈并不一定支持,仅支持UDP协议
12、0x4004:DoIP电源状态信息应答,返回当前DUT的DoIP激活线的状态,与0x4003构成一对。13400强制实现内容,不过部分主机厂以及协议栈并不一定支持,仅支持UDP协议
13、0x8001:DoIP诊断信息,我们常见的ISO 14229中定义的服务都是通过0x8001类型进行发送和应答,实现Tester和DUT、ECU与ECU之间的诊断信息交互,方便不同的设备之间的信息交流。02 FD 80 01 00 00 00 06 ** ** ** **(源逻辑地址+目的逻辑地址)10 01
02 FD 80 01 00 00 00 0A ** ** ** **(源逻辑地址+目的逻辑地址)50 01 ** ** ** **
这个为13400强制实现内容,仅支持TCP协议
14、0x8002:DoIP诊断信息的肯定应答,当我们的诊断请求信息没有问题后,以太网协议栈会返回肯定应答类型0x8002然后在使用0x8001将诊断应答内容返回。如果14229的诊断内容有问题,则通过不同的否定应答码来识别。仅支持TCP协议
15、0x8003:DoIP诊断信息的否定应答,当我们的诊断请求信息有问题后,这里一般是DoIP协议问题,DUT会返回0x8003,然后DUT将不在处理后面的诊断信息(例如10 01),直接在这里就是否定应答了。仅支持TCP协议。
今天的内容有点多,感谢大家全部看完,这里主要作为初步了解DoIP负载类型有哪些,给大家有个初步的印象,为下一步进一步了解DoIP完整内容做准备,大家如果想要学习的话要用心去记忆,如果仅做了解大家着重了解下0x8001、0x8002、0x8003和0x0005、0x0006这几个负载类型。
下篇介绍DoIP协议处理的报文头处理逻辑。