ISO 14229-1:2013 Road vehicles - Unified Diagnostic Services (UDS)Part1: Specification and
requirements;
ISO 14229-2:2013 Road vehicles - Unified Diagnostic Services (UDS)Part 2: Session layer
services;
ISO 14229-5:2013 Road vehicles - Unified Diagnostic Services (UDS)Part 5: Unified diagnostic
services on Internet Protocol implementation (UDSonIP);
ISO 13400-2:2012 Road vehicles - Diagnostic communication over Internet Protocol (DoIP) Part
2: Transport protocol and network layer services;
可以看到,ISO13400涉及到的主要分布在传输层、网络层、数据链路层、物理层四层中。
ISO13400-1处于应用层(层7)之上,是对一些通用信息、应用场景的描述。
应用层基于ISO14229-1和ISO14229-5,前者是UDS的完整定义,后者是UDS通过网络协议IP传输的实现。
会话层(层5),ISO14229-2对于所有的诊断通信都是一样的,目的是为上层提供统一的接口,使上层应用不需要随着底层通信技术的变化而改变。
传输层和网络层(层4和层3)由ISO13400-2定义,ISO13400-2中规定了DoIP通信在传输层中使用TCP和UDP协议,在网络层中使用IPv4或IPv6。此标准中还定义了专属于DoIP通信的信息内容,这些信息和上层的诊断命令共同构成了传给TCP或UDP协议的SDU。
ISO13400-2定义了DoIP诊断通信对Ethernet数据链路层(层2)和物理层(层1)的要求,比如,规定DoIP通信在这两层上支持100BASE-T1(100 Mbit/s Ethernet) 和10BASE-T (10 Mbit/s Ethernet) 两种方案。
DoIP数据的前两个部分分别是DoIP版本和DoIP版本逐比特取反,DoIP版本的取值范围如下:
0x00: reserved
0x01: DoIP ISO/DIS 13400-2:2010
0x02: DoIP ISO 13400-2:2012
0x03…0xFE: reserved by this part of ISO 13400
0xFF: default value for vehicle identifcation request messages
DoIP数据的第三个部分是data type,即描述数据包中的数据类型,取值范围如下图所示
其中最常用的数据类型应该是0x8001,0x8002,0x8003了,代表的含义分别是诊断消息、诊断消息正响应和诊断消息负响应。
0x0001至0x0004用于汽车标识上报或请求,只能通过UDP报文来发送这种命令,主要用于在汽车和诊断仪进入网络之后、诊断连接建立之前的车辆发现过程。
0x0005 和0x0006标识的Routing activation request 和 response用于在socket建立之后,进行诊断通信的请求。
0x0007和0x0008用于Alive check,用于检查当前建立的诊断连接socket是否仍然在使用中,如果不再使用,则关闭socket释放资源。
DoIP数据的第五部分很简单,分别用来标识数据的发送者和接收者,以及具体的诊断数据。
下图是一个DoIP数据完整结构的举例:
byte 0:ISO13400 版本
byte 1:ISO13400 版本逐比特取反
byte 2~3:数据类型,0x8001,表明这是一个诊断信息的数据包
byte 4~7:数据长度,在这个例子中的值是7,表示后面有7个字节的数据
byte 8~9:源地址
byte 10~11:目的地址
byte 12~13:具体的诊断命令,SID是22,表示读取,DID是0xF8 10
这个数据段作为SDU传递给下层协议,逐层封装成为完整的以太网帧发送出去。