DoIP(三)—— 通信流程

本文详细阐述了DoIP(Diagnostic over Internet Protocol)诊断通信的流程,包括物理连接建立、车辆发现、DoIP会话及GID同步四个关键步骤。在物理连接中,通过直接或网络连接方式建立诊断设备与车辆的联系,并通过DHCP协议分配IP地址。车辆发现阶段,DoIP节点通过发送车辆声明报文自我宣告,诊断设备也可主动请求车辆信息。DoIP会话涉及TCP连接建立、路由激活、诊断通信和连接关闭。最后,GID同步确保同一车辆上的DoIP节点拥有相同标识以便通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文我们来梳理一下DoIP诊断通信的整个流程。

1. 物理连接建立与车辆发现

首先第一步是将外部诊断设备与车上的DoIP节点网络连接起来,有以下两种连接方法:

(1)直接连接

拓扑图如下图所示:
在这里插入图片描述

(2)网络连接

网络连接中,诊断设备和DoIP节点之间不再是直接连接,而是通过路由器进行连接
在这里插入图片描述
不管是哪种连接方式,都要经历以下几个步骤:

① 物理层连接与IP地址分配

最先要做的是在诊断设备和DoIP节点间建立物理连接,即连接以太网线。之后采用DHCP协议进行IP地址分配。【目前车上的以太网节点还比较少,通常都是固定IP地址,这时候就不需要动态分配了】

有的时候一辆车上是存在多个DoIP节点的,这个时候与诊断设备相连的DoIP节点叫做边缘节点-Edge Node(或DoIP master),其余DoIP节点是普通节点,普通节点与诊断设备之间的DoIP通信都需要经过DoIP边缘节点的转发,所以边缘节点充当了路由器的作用,在直接连接的情况下有时也会作为DHCP Server,为诊断设备和车上其它DoIP节点分配IP地址。

详细步骤如下图所示,需要注意的一点是DoIP边缘节点有一个硬线激活线,在建立物理连接的时候要连接该硬线激活线,才能激活边缘节点的DoIP通信。边缘节点与车上其它节点的连接如何激活标准中没有定义,主机厂可自定义。
在这里插入图片描述

② DoIP节点发送车辆声明报文

我们前文讲过车辆声明报文,就是用在这个时候,由DoIP节点主动发送3次,用UDP协议向整个网络进行广播,目的端口是UDP_DISCOVERY,源端口可以是UDP_DISCOVERY,也可以动态分配。

③ 诊断设备请求车辆信息

如果诊断设备没有收到DoIP节点的车辆声明报文,则需要主动请求车辆信息,使用UDP协议,目的端口是UDP_DISCOVERY,源端口是动态定义的UDP_TEST_EQUIPMENT_REQUEST。

2. DoIP会话

所谓DoIP会话就是指DoIP传输诊断数据的整个流程,如下图所示:
在这里插入图片描述

① 添加车辆至列表

在经过上文的物理连接建立和车辆发现步骤后,诊断设备已经获取到了DoIP节点的必要信息,此时诊断设备应将该DoIP节点的信息添加至车辆列表中,供操作人员选择。

② 建立TCP连接

操作人员选择该车辆后,诊断设备与DoIP节点间建立TCP连接。

③ 路由激活

TCP连接建立成功后,诊断设备发送路由激活报文,DoIP节点给出响应。诊断设备向操作人员指示连接成功。

④ 诊断通信

路由激活步骤执行完毕后,就可以进行诊断通信了,在诊断设备和DoIP节点间传输诊断数据。

⑤ 操作结束,关闭TCP连接

所有诊断操作完成后,操作人员注销诊断设备,诊断设备关闭与DoIP节点间的TCP连接。

以上就是诊断通信的最基础的步骤。

3. GID同步

我们前文讲过,GID是同一辆车上一组DoIP节点的组标识,通常情况下也可以用VIN来标识一辆车上所有的DoIP节点,能起到GID同样的作用,但又有时候VIN可能还没有被写入DoIP节点中,如测试时或下线标定之前,这个时候就需要用GID来标识车上的一组DoIP节点。

DoIP节点刚被装到车上的时候,GID也是没有同步过的,我们前文讲DoIP报文类型的时候,提到车辆声明报文中有一个VIN/GID同步状态,初始状态就是未同步。这个时候一辆车上的多有DoIP节点首先要进行GID同步,再进行通信。

GID同步由边缘节点发起,具体的通信协议标准中没有定义,主机厂可以自己定义,总之能够实现车上的所有节点都存储了相同的GID即可。GID是6个字节,通常会使用DoIP边缘节点的MAC地址作为所有节点的GID。

流程如下图所示:
在这里插入图片描述

03-29
### DoIP 协议在汽车诊断中的应用 #### 什么是DoIP协议? DoIP(Diagnostics over Internet Protocol)是一种基于互联网协议的诊断技术,主要用于现代汽车中电子控制单元(ECU)之间的通信。它允许通过IP网传输诊断数据,从而实现高效的远程车辆诊断功能[^1]。 #### DoIP的主要特点 - **标准化**:DoIP严格遵循ISO 13400标准,这使得不同制造商生产的设备能够相互兼容并进行无缝交互。 - **高效性**:相比传统的串口或CAN总线方式,DoIP提供了更高的数据传输速率和支持多ECU的同时连接能力。 - **安全性保障**:内置的安全机制可防止未经授权的操作,并提供错误检测与报告的功能来增强系统的可靠性。 #### 功能概述 DoIP不仅限于简单的状态查询或者参数读取,还涵盖了复杂的故障排查以及软件更新等功能。其核心优势在于支持多个ECUs间的协同工作,在不牺牲性能的前提下完成全面深入的分析任务。 #### 实现细节 为了满足日益增长的需求,特别是在高性能计算(HPC)环境下,定义了一个标准化的服务API接口用于处理新型HPC相关联的传统诊断案例。这种设计有助于解决实际应用场景中存在的各种挑战[^2]。 另外值得注意的是,尽管某些特定层面比如信号过滤可能仅由微控制器(MCU)单独执行,但这并不影响整体框架下其他部分正常运作的能力[^3]。 ```python # Python伪代码展示如何初始化一个基本的DoIP客户端 class DoIPClient: def __init__(self, ip_address, port=13400): self.ip_address = ip_address self.port = port def connect(self): # 建立TCP/IP连接逻辑 pass def send_diagnostic_message(self, message_id, payload=None): # 构建并发送诊断消息包 pass client = DoIPClient('192.168.1.1') client.connect() message_response = client.send_diagnostic_message(0x1234) ``` 上述代码片段展示了创建简单DoIP客户端类的方法,该类可用于建立到指定目标地址上的链接,并向对方发出请求指令。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孟的孟不是很老的孟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值