在汽车网络通信中,诊断扮演了非常重要的角色,无论是故障诊断、整车下线配置,还是ECU的软件更新、远程OTA等,都离不开诊断技术。传统基于CAN的诊断已经非常普遍了,那么如果应用了车载以太网,诊断该如何实现呢?答案是DoIP。汽车诊断使用的是UDS(ISO 14229统一诊断服务),那么使用了DoIP,是不是就不需要UDS了?DoIP只是一个传输协议,用于传输诊断服务,在车载以太网中,UDS和在其他汽车总线技术中使用的是一致的,不同的是传输是通过DoIP实现的。
DoIP (Diagnostic communication over Internet Protocol), 是基于以太网的通讯协议对UDS协议的数据进行传输,参考标准ISO13400。本文主要对ISO 13400-2进行解析。
车载以太网DOIP(Diagnostics over Internet Protocol)协议的引入背景主要源于以下几个方面的需求和发展趋势:
车辆电子系统复杂性的增加
随着汽车电子技术的快速发展,现代车辆中的电子控制单元(ECU)数量大幅增加,车辆的功能也变得越来越复杂。传统的诊断协议(如K线、CAN总线)在带宽和效率上逐渐无法满足日益增长的数据传输需求,尤其是在诊断、软件更新和远程控制等场景中。
高带宽需求
车载以太网作为一种高带宽的通信技术,能够支持更快速的数据传输,满足现代车辆对大数据量处理的需求。DOIP协议基于以太网,能够利用以太网的高带宽特性,实现更高效的诊断数据传输。
标准化和兼容性
随着汽车行业对标准化和兼容性的要求越来越高,DOIP协议应运而生。DOIP是ISO 13400标准的一部分,旨在为车辆诊断提供一个统一的、基于以太网的通信协议,确保不同厂商和车型之间的诊断系统能够兼容。
远程诊断和OTA更新的需求
随着车联网技术的发展,远程诊断和OTA(Over-The-Air)软件更新成为汽车行业的重要趋势。DOIP协议支持基于IP网络的通信,能够更好地支持远程诊断和OTA更新功能,提高车辆的维护效率和用户体验。
未来技术发展的前瞻性
DOIP协议的引入也是为了适应未来汽车技术的发展,如自动驾驶、智能网联汽车等。这些技术对通信带宽、实时性和可靠性提出了更高的要求,车载以太网和DOIP协议能够为这些技术提供更好的支持。
降低成本和复杂性
通过使用以太网作为统一的通信网络,可以减少车辆中不同通信协议的数量,从而降低系统的复杂性和成本。DOIP协议的引入有助于简化车辆的网络架构,提高系统的可维护性和可扩展性。
ISO 13400 是关于 DoIP(Diagnostics over Internet Protocol,基于互联网协议的诊断) 的标准,完整的 ISO 13400 标准包括以下部分:
ISO 13400-2: 传输协议和网络层服务
ISO 13400-3: 基于以太网的物理层和数据链路层
ISO 13400-4: 一致性测试
ISO 13400-5: 扩展诊断会话
ISO 13400-6: 安全机制
图中分为车内网(Vehicle network)和车外网(External network),车内网和车外网之间,有两组重要的线束,其中
一组是用于数据传输的以太网线:就是我们常见的四线制TX标准网线
一组是用于诊断功能激活的DOIP激活线:是用于车内诊断功能的激活。出于能耗和电磁干扰的考虑,要求非诊断通信期间,与诊断相关的功能处于关闭状态,这样一方面可以降低能耗,另一方面减少对网络带宽的消耗,从而降低电磁干扰。
车内网(Vehicle network)
边缘节点(DoIP edge node)
直接与外部诊断仪进行物理连接的节点,叫做边缘节点(DoIP edge node)。
①边缘节点可作为一个网络交换机,将车内网与车外网组成同一子网;
②也可以作为一个网关,将车内网与车外网进行安全隔离,屏蔽非法的网络访问和网络攻击。
DoIP网关节点(DoIP gateway)
除了边缘节点之外,还有另一类网关,即车内的DoIP网关节点。
车内DoIP网关节点的作用,是实现以太网到其他网络总线(如CAN、LIN)的报文路由,这样便实现了DoIP诊断与传统网络总线的兼容。多种网络总线汇聚到DoIP网关,这大大的降低了布线的复杂性,并且提高了各总线网络中ECU的诊断效率。
DoIP节点
车内网络中,还存在一般的DoIP节点,这些节点只支持对自身的诊断,而不具备路由功能。
网络节点(Network node)
网络节点(Network node),不具备DoIP诊断功能,与DoIP节点共享网络资源。
DoIP逻辑地址
在车载以太网通信中,因为数据是逐层进行封装和处理的,所以在OSI网络模型中,从数据链路层开始,每一层都会有用于标识发送端或接收端的特定地址,如数据链路层的MAC地址、VLAN ID,网络层的IP地址和传输层的端口号。在DoIP层级中,用来标识DoIP实体的地址为DoIP逻辑地址(Logical address):
ISO 13400中将逻辑地址分为物理逻辑地址(Physical logical address)和功能逻辑地址(Functional logical address),类似CAN中的物理寻址和功能寻址。
在车辆发现的过程中,收发两端会将对方的逻辑地址与IP地址进行映射,保证之后可正确进行诊断会话。逻辑地址长度为2个字节,在车辆声明报文、路由激活报文和诊断报文中都会携带
UDP_DISCOVERY:端口类型-UDP,端口号-13400
该端口有以下两个应用场景:
UDP_TEST_EQUIPMENT_REQUEST:端口类型-UDP,端口号-动态定义(49152-65535)
该端口由外部诊断设备在49152-65535范围内动态定义,用于诊断设备向DoIP节点发送的UDP报文,在报文中作为源端口,报文的目的端口应设置为UDP_DISCOVERY。
当DoIP节点向诊断设备发送响应的时候,报文中的目的端口应设置为UDP_TEST_EQUIPMENT_REQUEST,源端口可以为UDP_DISCOVERY,也可以有DoIP节点动态定义。
TCP_DATA:端口类型-TCP,端口号-13400
该端口用于外部诊断设备和DoIP节点之间的TCP通信,如路由报文和诊断报文。当诊断设备向DoIP节点发送报文时,使用TCP_DATA作为目的端口号;当DoIP节点向诊断设备发送报文时,使用TCP_DATA作为源端口号。
DoIP报文也是基于TCP或UDP,但在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能。DoIP报文的结构如下图所示:
车载以太网中的**DOIP(Diagnostics over Internet Protocol)**是一种用于车辆诊断的通信协议,它基于以太网传输诊断数据。DOIP报文帧结构主要包括以下几个部分:
DOIP报文由以太网帧头和DOIP协议数据组成。以太网帧头遵循标准以太网协议,而DOIP协议数据部分则是DOIP特有的结构。
DOIP协议报头包括以下几个字段:
Protocol Version (协议版本)
0x02
表示DOIP协议版本2。Inverse Protocol Version (协议版本的反码)
Payload Type (负载类型)
0x0001
:车辆识别请求(Vehicle Identification Request)0x0002
:车辆识别响应(Vehicle Identification Response)0x0005
:诊断消息(Diagnostic Message)0x0006
:诊断消息确认(Diagnostic Message ACK)0x0007
:诊断消息否定确认(Diagnostic Message NACK)Payload Length (负载长度)
Payload Data (负载数据)
0x0005
),负载数据包括诊断请求或响应数据。0x0002
),负载数据包括车辆识别信息(如VIN码)。0x8001
),负载数据包括逻辑地址和数据场。
[前导码 (7 bytes)] [帧起始定界符 (1 byte)] [以太网帧数据]
[目的MAC地址 (6 bytes)] [源MAC地址 (6 bytes)] [以太网类型 (2 bytes)] [以太网帧数据]
示例:
目的MAC地址:00:50:56:C0:00:08
源MAC地址:00:0C:29:AB:CD:EF
以太网类型:0x0800 (IPv4)
[版本 (4 bits)] [头部长度 (4 bits)] [服务类型 (1 byte)] [总长度 (2 bytes)]
[标识 (2 bytes)] [标志 (3 bits)] [片偏移 (13 bits)]
[生存时间 (1 byte)] [协议 (1 byte)] [头部校验和 (2 bytes)]
[源IP地址 (4 bytes)] [目的IP地址 (4 bytes)] [IP数据]
示例:
版本:4
头部长度:5
服务类型:0x00
总长度:0x0046
标识:0x1234
标志:0x02
片偏移:0x0000
生存时间:0x40
协议:0x06 (TCP)
头部校验和:0xABCD
源IP地址:192.168.1.100
目的IP地址:192.168.1.200
[源端口 (2 bytes)] [目的端口 (2 bytes)] [序列号 (4 bytes)]
[确认号 (4 bytes)] [数据偏移 (4 bits)] [保留 (3 bits)] [标志 (9 bits)]
[窗口大小 (2 bytes)] [校验和 (2 bytes)] [紧急指针 (2 bytes)] [TCP数据]
示例:
源端口:50000
目的端口:13400
序列号:0x12345678
确认号:0x87654321
数据偏移:5
标志:0x018 (ACK, PSH)
窗口大小:0xFFFF
校验和:0x1234
紧急指针:0x0000
[协议版本 (1 byte)] [反向协议版本 (1 byte)] [负载类型 (2 bytes)] [负载长度 (4 bytes)] [负载数据]
示例:
协议版本:0x02
反向协议版本:0x02
负载类型:0x8001 (Diagnostic Message)
负载长度:0x00000006
负载数据:[应用层数据]
[源地址 (2 bytes)] [目的地址 (2 bytes)] [诊断数据]
示例:
源地址:0x0E80 (ECU逻辑地址)
目的地址:0x0E81 (Tester逻辑地址)
诊断数据:0x10 0x03 (诊断请求:进入扩展会话)
6.完整报文示例
物理层:
前导码:0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA
帧起始定界符:0xAB
数据链路层:
目的MAC地址:00:50:56:C0:00:08
源MAC地址:00:0C:29:AB:CD:EF
以太网类型:0x0800
网络层:
版本:4
头部长度:5
服务类型:0x00
总长度:0x0046
标识:0x1234
标志:0x02
片偏移:0x0000
生存时间:0x40
协议:0x06
头部校验和:0xABCD
源IP地址:192.168.1.100
目的IP地址:192.168.1.200
传输层:
源端口:50000
目的端口:13400
序列号:0x12345678
确认号:0x87654321
数据偏移:5
标志:0x018
窗口大小:0xFFFF
校验和:0x1234
紧急指针:0x0000
DoIP层:
协议版本:0x02
反向协议版本:0x02
负载类型:0x8001
负载长度:0x00000006
负载数据:[应用层数据]
应用层数据:
源地址:0x0E80
目的地址:0x0E81
诊断数据:0x10 0x03
上述示例展示了从物理层到应用层的完整DoIP报文结构。每一层都有其特定的字段和功能,确保数据在车载以太网中的正确传输和处理。
本文主要对DOIP协议的背景、功能、ISO 13400-2定义的报文帧头以及实例示例进行了介绍。希望以上内容对您理解车载以太网DOIP报文帧结构有所帮助!