2. DoIP协议核心机制
DoIP(Diagnostic over IP)是ISO 13400系列标准定义的以太网诊断传输协议,它把传统CAN上承载的UDS诊断服务,通过IP网络进行封装与传输。理解DoIP的核心机制,是使用CANoe进行诊断与刷写验证的基础。本节围绕车辆发现、TCP/UDP通信分工、路由激活、诊断报文封装以及连接状态机五个方面展开,并结合CANoe Trace窗口的观察方法进行说明。
一、车辆发现:UDP广播与响应
DoIP通信的第一步是让诊断仪(Tester,如CANoe)找到目标车辆或ECU。ISO 13400规定,车辆发现通过UDP完成,使用两个固定端口:UDP 13400用于车辆识别请求与响应,UDP 13401用于车辆公告与诊断电源模式请求。诊断仪向广播地址(如255.255.255.255)或子网广播地址发送Vehicle Identification Request(车辆识别请求),报文载荷中可携带VIN、EID(实体标识,通常为MAC地址)或GID(组标识)作为筛选条件。
车辆侧收到请求后,以Vehicle Identification Response(车辆识别响应)单播回复,内容包含VIN、逻辑地址、EID、GID以及进一步动作(Further Action)字段。Further Action用于指示车辆当前是否允许建立诊断连接,例如值为0x00表示无需进一步动作、可直接建立TCP连接,值为0x10表示需要中央安全认证等。在CANoe Trace窗口中,这类报文通常显示为UDP协议,源端口13400、目的端口13400,可在报文详情中展开DoIP层查看Payload Type(载荷类型)字段,车辆识别请求的Payload Type为0x0001,响应为0x0004。
二、TCP与UDP的分工
DoIP对UDP和TCP的使用有明确分工:UDP负责“发现与状态查询”,包括车辆识别、车辆公告、诊断电源模式查询;TCP负责“可靠诊断数据传输”,包括路由激活、诊断报文、诊断报文确认与在线检查。TCP使用端口13400,建立面向连接的可靠通道,保证UDS请求与响应的顺序和完整性。
在CANoe中,通常需要配置一个DoIP通道,指定Tester的逻辑地址(如0x0E00)和目标ECU的逻辑地址(如0x1001)。CANoe会先通过UDP完成车辆发现,再发起TCP连接。Trace窗口中,UDP报文与TCP报文会以不同颜色区分,便于快速定位发现阶段与诊断阶段。
三、路由激活:建立诊断通道
TCP连接建立后,还不能直接发送诊断报文,必须先完成路由激活(Routing Activation)。诊断仪发送Routing Activation Request,载荷中包含源逻辑地址、激活类型(Activation Type)以及可选的认证信息。激活类型常见值:0x00为默认激活,0x01为WWH-OBD激活,0xE0为中央安全激活。
车辆侧返回Routing Activation Response,其中响应码(Response Code)决定后续行为:0x10表示成功,诊断仪可开始发送诊断报文;0x00表示拒绝;0x01表示需要进一步认证;0x02表示需要确认;0x03表示已被其他诊断仪占用;0x04表示缺少认证等。只有收到0x10后,诊断通道才真正可用。在CANoe Trace中,路由激活请求的Payload Type为0x0005,响应为0x0006,响应码字段可直接在详情中查看。
四、诊断报文封装
路由激活成功后,UDS诊断服务被封装进DoIP诊断报文(Diagnostic Message,Payload Type 0x8001)中传输。DoIP头部包含协议版本、反向版本、载荷类型和载荷长度;诊断报文载荷则包含源地址、目标地址和UDS数据。例如,发送UDS服务0x22(按标识符读数据)读取DID 0xF190(VIN),UDS数据为22 F1 90,封装后源地址0x0E00、目标地址0x1001,整体作为DoIP诊断报文发送。
车辆侧收到后返回Diagnostic Message Positive Acknowledgment(Payload Type 0x8002)或Negative Acknowledgment(0x8003),随后再返回诊断响应(0x8001)。在CANoe Trace中,可观察到请求与响应成对出现,且诊断响应中的UDS数据即为ECU返回的VIN字节序列。若出现否定确认,需检查目标地址、路由激活状态或ECU是否支持该服务。
五、连接状态机与Trace观察
DoIP连接可抽象为若干状态:未连接→车辆发现完成→TCP已连接→路由已激活→诊断通信中→连接关闭。状态迁移由报文交互驱动,任一环节失败都会导致诊断无法进行。CANoe Trace窗口是观察这一过程的最佳工具:可按Payload Type过滤,只看0x0001/0x0004(发现)、0x0005/0x0006(路由激活)、0x8001/0x8002/0x8003(诊断报文),从而快速判断当前处于哪个阶段、哪一步出现异常。
六、CANoe 中的关键配置与观察要点
在CANoe中搭建DoIP诊断环境,通常需要以下配置:在Diagnostic/ISO TP或DoIP配置中设置Tester逻辑地址(如0x0E00)、目标ECU逻辑地址(如0x1001)、车辆识别方式(广播或单播)、TCP端口13400;在Trace窗口中添加DoIP协议解析,按Payload Type过滤。观察时重点关注:车辆识别响应中的Further Action是否为0x00;路由激活响应码是否为0x10;诊断报文是否收到0x8002肯定确认;UDS响应数据是否符合预期。
掌握上述机制后,在CANoe中即可按“发现→连接→激活→诊断”的顺序逐步验证,并通过Trace窗口的Payload Type和响应码快速定位问题环节,为后续的诊断服务测试与刷写验证打下基础。