北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章564 浏览9688173

车辆以太网诊断协议连载(1)——报文结构

随着汽车新功能(辅助驾驶、信息娱乐、软件更新、远程诊断等)的出现,其内部电子系统需要传输的数据量日益增多,以往基于CAN/CANFD网络的诊断协议逐渐不能满足要求,于是基于以太网的诊断协议便应运而生了。

cover.png

车辆以太网诊断协议,英文名称“Diagnostic over Internet Protocol”,简称“DoIP”。2011年,国际标准化组织首次发布了ISO 13400-1:2011国际标准,其中明确了DoIP的概念、应用场景。2012年发布了ISO 13400-2:2012,详细规定了传输层、网络层的服务,以及DoIP报文的具体格式。2019年发布了ISO 13400-2:2019,对之前的协议进行改进,提升了稳定性。2025年发布了ISO 13400-2:2025,本文基于该版本进行介绍。

DoIP协议在开放互联参考模型(OSI)中的位置如下图所示(与传统协议进行对比):

OSI参考模型.png

简单理解:DoIP协议的物理层和数据链路层依赖于百兆以太网,位于传输层TCP/UDP协议之上,同时又位于应用层协议(比如UDS)之下。

DoIP协议的报文由报文头和负载两部分组成。

报文头长度固定为8字节,包括:协议版本号、版本号取反、负载类型和负载长度,如下面的表格所示:

名称长度(字节数)
协议版本号1
版本号取反
1
负载类型2
负载长度4

其中:

协议版本号:长度1字节,取值范围包括:

  • 0x00(ISO 13400-1:2011);

  • 0x02(ISO 13400-2:2012);

  • 0x03(ISO 13400-2:2012);

  • 0x04(ISO 13400-2:2025);

  • 0x05~0xFE(保留);

2.协议版本号取反:协议版本号按位取反(长度1字节)。与协议版本号配合使用,作为协议验证模式,以确保接收到格式正确的DoIP报文;

3.负载类型:长度2字节,取值范围:0x0000~0xFFFF(下文详述)。

4.负载长度:长度4字节,取值范围:0~4 294 967 295。(四字节无符号数的表达范围,2的32次方)。负载长度的单位为字节。有些报文不需要负载,因此长度可以为0;

DoIP协议对负载类型进行了定义与归类,如下面的表格所示:

取值名称协议
0x0000

通用报文头负响应

generic DoIP header negative acknowledge

UDP_DISCOVER

UDP_TEST_EQUIPMENT_REQUEST

TCP_DATA

0x0001

车辆识别请求消息

vehicle identification request message

UDP_DISCOVER
0x0002

带EID的车辆识别请求消息

vehicle identification request message with EID

UDP_DISCOVER
0x0003

带VIN的车辆识别请求消息

vehicle identification request message with VIN

UDP_DISCOVER
0x0004

车辆声明消息/车辆识别应答消息

vehicle announcement message/

vehicle identification response message

UDP_DISCOVER

UDP_TEST_EQUIPMENT_REQUEST

0x0005

路由激活请求 

routing activation request

TCP_DATA
0x0006

路由激活应答

routing activation response

TCP_DATA
0x0007车辆保活请求alive check requestTCP_DATA

0x0008

车辆保活应答alive check responseTCP_DATA

0x0009

~

0x4000

保留

0x4001

DoIP实体状态请求

DoIP entity status request

UDP_DISCOVER
0x4002

DoIP实体状态应答

DoIP entity status response

UDP_TEST_EQUIPMENT_REQUEST
0x4003

诊断电源模式信息请求

diagnostic power mode information request

UDP_DISCOVER
0x4004

诊断电源模式信息应答

diagnostic power mode information response

UDP_TEST_EQUIPMENT_REQUEST

0x4005

~

0x8000

保留
0x8001诊断消息diagnostic messageTCP_DATA
0x8002

诊断消息正响应

diagnostic message positive acknowledgement

TCP_DATA
0x8003

诊断消息负响应

diagnostic message negative acknowledgement

TCP_DATA
0x8004周期性诊断消息

periodic diagnostic message

TCP_DATA

0x8005

~

0x8FFF

保留
0x9000保留
0x9001

DOIP网关连接的子网传输协议负载消息结构


TCP_DATA

0x9002

~

0x9FFF

保留

0xF000

~

0xFFFF

为制造商保留

reserved for manufacture-specific use


负载的内容根据类型不同而有所不同,将在后面的文章中陆续介绍。

好了,关于DoIP的报文结构就先介绍到这里。


取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论