车载以太网网络测试-21【传输层-DOIP协议-4】

目录

  • 1 摘要
  • 2 DoIP entity status request/response(0x4001、0x4002)
    • 2.1 使用场景
    • 2.2 报文结构
      • 2.2.1 0x4001:DoIP entity status request
      • 2.2.2 0x4002:DoIP entity status response
  • 3 Diagnostic power mode information request/response(0x4003、0x4004)
    • 3.1 使用场景
    • 3.2 报文结构
      • 3.2.1 0x4003:Diagnostic power mode information request
      • 3.2.2 0x4004:Diagnostic power mode information response
  • 4 0x8001-0x8003:Diagnostic Message and Positive/Negetive Acknowledgment
    • 4.1 DOIP诊断报文处理流程
    • 4.2 报文结构
      • 4.2.1 诊断报文(0x8001-Diagnostic Message)
      • 4.2.2 诊断肯定确认报文(0x8002-Diagnostic message positive acknowledgment)
      • 4.2.3 诊断否定响应报文(0x8003-Diagnostic message negative acknowledgment)
  • 5 总结

1 摘要

本文接着对DOIP报文的车辆信息类以及诊断类报文进行介绍。主要从各类报文的使用场景、报文结构以及实例示例等方面进行详细解析。建议大家回顾上文专题的介绍,有利于系统性学习。
上文回顾:
车载以太网网络测试-20【传输层-DOIP协议-3】

2 DoIP entity status request/response(0x4001、0x4002)

2.1 使用场景

  1. 查询DoIP实体的状态
    该报文用于向目标DoIP实体(如车辆中的ECU)请求其当前的状态信息。状态信息可能包括DoIP实体的活动状态、网络配置、诊断能力等。

  2. 诊断系统监控
    诊断工具或测试设备可以通过发送DoIP entity status request报文,监控车辆中各个DoIP实体的运行状态,确保它们正常工作。

  3. 故障排查
    当诊断系统出现通信问题时,可以通过发送该报文检查目标DoIP实体的状态,帮助排查问题。

  4. 支持动态配置
    在诊断过程中,诊断工具可能需要动态获取DoIP实体的状态信息,以调整通信参数或诊断策略。

  • 应用场景
    • 车辆诊断过程中,诊断工具需要检查某个ECU的DoIP状态。
    • 在车辆启动或网络初始化时,诊断系统需要确认所有DoIP实体的状态。
    • 在通信故障时,诊断工具需要检查目标DoIP实体的状态以定位问题。

通过DoIP entity status request报文,诊断系统可以高效地获取DoIP实体的状态信息,确保诊断通信的可靠性和稳定性。

2.2 报文结构

2.2.1 0x4001:DoIP entity status request

在这里插入图片描述
DoIP entity status request 报文的 Payload Type 为 0x0004,且没有有效载荷(Payload Length 为 0x00000000)。因此,其帧结构如下:

字段描述
Protocol Version0x02DoIP 协议版本。
Inverse Version0xFD协议版本的反码。
Payload Type0x0004报文类型,表示 DoIP entity status request。
Payload Length0x00000000有效载荷长度为 0。
Payload无有效载荷。

一个完整的 DoIP entity status request 报文的十六进制表示如下:

02 FD 00 04 00 00 00 00

2.2.2 0x4002:DoIP entity status response

该报文是DoIP entity status request的响应报文,DoIP节点用该响应报文来向诊断设备发送状态信息。报文的数据段定义如下:
在这里插入图片描述
DoIP实体状态请求和应答报文通过UDP报文实现。

  • Node Type (1 byte)
    • 节点类型,表示实体的类型(如0x00表示未定义,0x01表示DoIP网关,0x02表示DoIP节点等)。
  • Max Concurrent TCP Data Connections (1 byte)
    • 最大并发TCP数据连接数,也即是最多允许同时多少个TCP的连接存在。
  • Currently Open TCP Data Connections (1 byte)
    • 当前打开的TCP数据连接数。
  • Max Data Size (4 bytes)
    • 最大数据大小(以字节为单位),DoIP实体在一次逻辑请求中能够处理的最大数据量。

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

3 Diagnostic power mode information request/response(0x4003、0x4004)

3.1 使用场景

在 DoIP 协议中,Diagnostic power mode information request/response 是用于获取或设置车辆电源模式信息的诊断服务。

  1. Diagnostic power mode information request (0x4003)

    • 作用:客户端(如诊断工具)使用此请求向车辆电子控制单元(ECU)查询当前的电源模式状态。
    • 使用场景:在诊断过程中,诊断工具可能需要了解车辆的电源模式(如点火状态、休眠状态等),以便执行适当的诊断操作。
    • 数据格式:通常是一个简单的请求报文,不包含额外的数据参数
  2. Diagnostic power mode information response (0x4004)

  • 作用:ECU 对 Diagnostic power mode information request 的响应,返回当前车辆的电源模式信息。
  • 数据内容:响应报文通常包含以下信息:
    • 电源模式状态:如“点火开关打开”、“点火开关关闭”、“休眠模式”等。
    • 其他相关信息:如电源模式的转换状态或时间戳等(具体取决于实现)。
  • 使用场景:诊断工具根据返回的电源模式信息,决定下一步的诊断操作。例如,如果车辆处于休眠模式,诊断工具可能需要先唤醒车辆。
  1. 电源模式的意义
    车辆的电源模式是诊断通信的重要参数,因为它直接影响诊断操作的可行性和安全性。例如:
    • 在点火开关关闭的情况下,某些 ECU 可能无法响应诊断请求。
    • 在休眠模式下,车辆可能处于低功耗状态,诊断工具需要发送唤醒信号才能进行通信。

3.2 报文结构

3.2.1 0x4003:Diagnostic power mode information request

在这里插入图片描述
该报文可以被诊断设备用来请求DoIP节点的电源模式信息,报文数据段没有数据

3.2.2 0x4004:Diagnostic power mode information response

该报文是Diagnostic power mode information request的响应报文。报文的数据段定义如下:

在这里插入图片描述
示例如下图:
在这里插入图片描述

4 0x8001-0x8003:Diagnostic Message and Positive/Negetive Acknowledgment

0x8001到0x8003是用于诊断报文和确认的报文类型。

4.1 DOIP诊断报文处理流程

  • DoIP遵循如下流程:
  1. 诊断设备发送一条诊断请求(0x8001-Diagnostic Message),该请求报文中包含有UDS诊断数据(DOIP报文的Payload);
  2. DoIP节点收到后先对DoIP帧头、诊断数据长度等做判断,先返回一个DoIP层(传输层)的响应,如果各个条件都满足,则返回肯定响应(0x8002-Diagnostic message positive acknowledgment),否则返回否定响应(0x8003-Diagnostic message negative acknowledgment)。
  3. 当DoIP节点的DOIP传输层返回肯定响应后,再将诊断请求报文中包含的UDS诊断数据上报给UDS应用程序(应用层)进行处理,处理完成后,**不论是UDS肯定响应还是UDS否定响应,都用诊断报文(0x8001-Diagnostic Message)**将UDS诊断响应数据发送给诊断设备。

4.2 报文结构

4.2.1 诊断报文(0x8001-Diagnostic Message)

  • 用于发送诊断请求或响应消息。诊断请求通常由诊断客户端(如诊断工具)发送,诊断响应由诊断服务器(如车辆ECU)返回。
  • 典型场景包括读取故障码、读取传感器数据、执行诊断例程等。
字段长度 (字节)描述
Source Address(SA)2发送诊断报文的源地址(通常是测试设备的地址)。
Target Address(TA)2接收诊断报文的目标地址(通常是ECU的地址)。
User Data(UD)可变实际的诊断数据(如 UDS 请求或响应)。

以下是一条包含UDS诊断请求数据的DoIP诊断报文示例:
在这里插入图片描述
说明:

  • 诊断请求报文:
  协议版本:02协议版本取反:FDPayload type:8001(诊断报文)Payload Length:00 00 00 06源逻辑地址:0E 80(诊断设备逻辑地址)目标逻辑地址:10 21(DOIP节点逻辑地址)UDS数据:3E 00(请求UDS的3E服务)
  • 诊断肯定响应
  协议版本:02协议版本取反:FDPayload type:8002(诊断肯定确认报文)Payload Length:00 00 00 05源逻辑地址:10 21目标逻辑地址:0E 80UDS数据:00(诊断请求报文争取被处理)
  • 诊断响应响应
  协议版本:02协议版本取反:FDPayload type:8001(诊断报文)Payload Length:00 00 00 06源逻辑地址:10 21(DOIP节点逻辑地址)目标逻辑地址:0E 80(诊断设备逻辑地址)UDS数据:7E 00(肯定响应UDS的3E服务)

4.2.2 诊断肯定确认报文(0x8002-Diagnostic message positive acknowledgment)

  • 用于确认成功接收到诊断消息。例如,当诊断服务器成功接收到诊断请求后,可以发送一个Positive Acknowledgment作为确认。
  • 这种确认通常用于确保消息的可靠传输。

在这里插入图片描述

  • SA以及TA:和上文一致,为源和目标逻辑地址;
  • ACK code:包含诊断报文的肯定确认码;
  • Previous diagnostic message data:用于携带先前发送的诊断消息的相关数据。它通常包含了导致当前错误响应的原始诊断消息的内容或部分内容。这个参数的存在有助于诊断系统或测试工具识别和定位问题的根源。

对于诊断肯定确认报文的ACK code应置为0x00,具体定义如下:
在这里插入图片描述

  • 备注:
    0x00:路由确认(ACK)报文,表示诊断报文已正确接收、处理并放入目标网络的传输缓冲区。
    每个DoIP实体应在正确处理诊断报文并将其复制到目标网络传输缓冲区后,立即发送诊断消息的肯定确认(ACK),并将ACK代码设置为0x00(参见表29)。

4.2.3 诊断否定响应报文(0x8003-Diagnostic message negative acknowledgment)

  • 用于指示接收到的诊断报文存在问题,例如格式错误、不支持的功能等。
  • 当诊断服务器无法处理接收到的诊断请求时,会发送Negative Acknowledgment,并附带错误原因。

在这里插入图片描述
与肯定响应报文的区别就是响应码变成了否定响应码,用来指示否定响应的原因,定义如下:
在这里插入图片描述

  1. 示例1:(无效的SA地址NACK为0x02)
    建立TCP连接且路由激活后,使用无效的SA地址发送诊断请求,DoIP实体返回NACK为0x02的否定响应报文,并主动断开TCP连接(ISO 13400-2 强制要求)
    在这里插入图片描述
  2. 示例2:诊断否定报文示例(目的逻辑地址无效NACK为0x03)
    建立TCP连接且路由激活后,使用无效的TA地址发送诊断请求,DoIP实体返回NACK为0x03的否定响应报文(无需断开TCP连接)
    在这里插入图片描述

5 总结

上文对DOIP协议定义的车辆信息类以及诊断类报文进行了介绍,主要包含各类报文的使用场景、报文结构以及实例示例。希望能对大家学习DOIP协议有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH347使用笔记:CH347结合STM32CubeIDE实现单片机下载与调试

目录 基于 STM32CubeIDE的 CH347 JTAG/SWD调试器使用说明1. CH347驱动安装与配置2. STM32CubeIDE调试器配置2.1 打开相关工程后,进行以下操作2.2 openocd.exe替换2.3 脚本添加2.4 更改调试器选择 3. 下载程序4. 使用过程中可能遇到的问题4.1 CH347未插入4.2 Openocd…

LVGL常用功能备忘

概述 本文选用LVGL 8.3版本 8.3版本实测帧率比起9版本高,多个GUI工具支持 相关链接 LVGL官网 https://lvgl.io/ LVGL 文档 https://docs.lvgl.io/8.3/ LVGL仓库 https://github.com/lvgl LVGL移植 获取源码 https://github.com/lvgl/lvgl/tree/release/v8.3 下载文件即可 文件…

k8s搭建kube-prometheus

后续再补一个k8s集群搭建的博客,从0开始搭建k8s集群。使用kube-prometheus非常方便,主要问题只在于拉取镜像。除了拉取镜像外其他时间5分钟即可。耐心等待拉取镜像。 一.kube-prometheus简介 kube-prometheus 是一个专为 Kubernetes 设计的开源监控解决…

uni-app——数据缓存API

数据缓存API 在 uni-app 开发中,数据缓存 API 起着重要作用,它能够将需要的数据保存到本地,同时也提供了获取本地缓存数据、移除缓存数据以及清理缓存数据的功能。在实际项目里,数据缓存 API 常被用于存储会员登录状态信息、购物…

突破时空边界:Java实时流处理中窗口操作与时间语义的深度重构

一、流处理范式的革命性演进 在数字化浪潮的推动下,数据处理范式正经历着从批量到实时的根本性转变。这种转变不仅改变了数据处理的时效性特征,更重新定义了时间维度在计算模型中的战略地位。Apache Flink的统计数据显示,现代流处理系统每秒…

【2025 深圳大学-腾讯云程序设计竞赛(热身赛)】题解

比赛链接 A. Cloud Studio的共享连接 题目大意 && Solution 给定 T T T 组长度均为 12 12 12 的字符串 s s s。 对每个 s s s,将其按从左到右的顺序两两分组形成 6 6 6 个 A S C I I \rm{ASCII} ASCII 码,对这 6 6 6 个 A S C I I \…

APScheduler - 用户指南

本文翻译整理自:https://apscheduler.readthedocs.io/en/3.x/userguide.html 文章目录 一、安装 APScheduler二、代码示例三、基本概念四、选择合适的 scheduler, job store(s), executor(s) and trigger(s)五、配置调度器方法 1:方法 2:方法 3: 六、启动调度器七、…

vue3:十一、主页面布局(优化页面跳转方式)

:router"true" 一、参考文章 vue3:十一、主页面布局(实现基本左侧菜单右侧内容效果)-CSDN博客 参考上述文章可知,页面跳转是通过在js中定义的菜单中携带的path,然后通过菜单的点击事件完成的跳转,现在可以进行优化,直…

每日一题--C与C++的差别

C与C的差别 1. 编程范式 C 纯 过程式编程语言,强调函数和结构化编程。 代码通过函数和顺序步骤组织,适合底层系统开发。 C 支持 多范式编程: 过程式编程 面向对象编程(OOP)(类、继承、多态) …

Etcd 服务搭建

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Etcd 服务搭建预编译的二进制文件安装下载 etcd 的…

玩转C#函数:参数、返回值与游戏中的攻击逻辑封装

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

WebRTC建立Description的通信的实际的原理

一、正确流程的核心逻辑 // 发送端正确代码示例 const senderPC new RTCPeerConnection();// 生成Offer时立即开始收集候选 ✅ senderPC.createOffer().then(offer > {await senderPC.setLocalDescription(offer); // 触发icecandidate事件sendToReceiver(offer); });// …

EmbodiedSAM:在线实时3D实例分割,利用视觉基础模型实现高效场景理解

2025-02-12,由清华大学和南洋理工大学的研究团队开发 一种名为 EmbodiedSAM(ESAM)的在线3D实例分割框架。该框架利用2D视觉基础模型辅助实时3D场景理解,解决了高质量3D数据稀缺的难题,为机器人导航、操作等任务提供了高…

信创-人大金仓数据库创建

一. 官文 资源下载地址 https://download.kingbase.com.cn/xzzx/index.htm 下载安装文件 下载授权文件 产品文档地址:https://help.kingbase.com.cn/v8/index.html 二. 概念 2.1 体系结构 ‌ 实例结构 ‌:由数据库文件和 KingbaseES 实例组成。数据…

C++第三种异质集合 std::any方式实现

#include <type_traits> #include <any> #include <functional> #include <iomanip> #include <iostream> #include <typeindex> #include <typeinfo> #include <unordered_map> #include <vector> //any是编译期的异质…

Springboot实现使用断点续传优化同步导入Excel

springboot实现使用断点续传优化同步导入Excel 需求前言断点续传前端实现后端实现完结撒花&#xff0c;如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 需求前言 在跨境电商系统中&#xff0c…

mysql 对json的处理?

MySQL从5.7版本开始支持JSON数据类型&#xff0c;并提供了多种函数来查询和处理JSON数据。以下是一些基本的操作和函数&#xff1a; 创建包含JSON列的表&#xff1a; 可以直接在表定义中指定某列为JSON类型。 CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT,data JSON…

Nexus L2 L3基本配置

接口基本配置 N7K上所有端口默认处于shutdown状态; N5K上所有端口默认处于no shutdown状态(所有端口都是switchport) 默认所有接口都是三层route模式, 只有当线卡不支持三层的时候, 接口才会处于二层switchport模式 show run all | in “system default” 创建SVI口需要提前打…

HCIA-AI人工智能笔记3:数据预处理

统讲解数据预处理的核心技术体系&#xff0c;通过Python/Pandas与华为MindSpore双视角代码演示&#xff0c;结合特征工程优化实验&#xff0c;深入解析数据清洗、标准化、增强等关键环节。 一、数据预处理技术全景图 graph TD A[原始数据] --> B{数据清洗} B --> B1[缺…

G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门

万事开源先修 Git。Git 是当下主流的分布式版本控制工具&#xff0c;在软件开发、文档管理等方面用处极大。它能自动记录文件改动&#xff0c;简化合并流程&#xff0c;还特别适合多人协作开发。学会 Git&#xff0c;就相当于掌握了一把通往开源世界的钥匙&#xff0c;以后参与…