Uds诊断协议的请求和响应的寻址

2024-04-22 22:28

本文主要是介绍Uds诊断协议的请求和响应的寻址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一根总线上挂载着很多ECU,那么基于CAN协议UDS的诊断请求报文,诊断仪是如何发给ECU的?如何精准的找到想要诊断的那个ECU?ECU又是如何将诊断响应的报文返回给诊断仪?

在UDS协议中,规定了诊断请求和响应报文发送时,必须要指明寻址信息(源地址和目标地址)

发送方:源地址。接收方:目标地址。

基于CAN总线的诊断通信来说,由于每个ECU可以根据事先设定只处理总线上,指定CAN报文ID的这个报文,因此UDS协议中的诊断请求响应的地址信息,本质上就是CAN报文的ID。

假设一个汽车仪表的ECU,如果给它提前设定好了总线上发出CAN报文ID为701的报文。那就代表是发送给这个仪表ECU自己的诊断请求的报文。

有了这样的设定后,如果想给汽车仪表ECU发送数据。

只需要发送CAN报文ID为701的报文,就是发送给仪表ECU的诊断请求报文。

当仪表ECU收到这个请求CAN报文,处理完成后。同样会以一个事先设定好的CAN报文ID,本次以709为诊断响应报文的CAN报文ID。诊断请求的服务数据包含在这一帧CAN报文中,这一帧CAN报文ID为701,8个字节。

诊断仪根据约定,一旦收到了这个CAN报文ID为709的报文,就知道这是仪表ECU发回的诊断响应的报文。诊断响应的服务数据也包含在这帧CAN报文的八个字节的数据中。

Uds诊断通信的报文是通过CAN协议传输的,UDS诊断的报文就是CAN报文,请求和响应的地址信息就是CAN报文的ID。请求和响应的服务信息就是CAN报文中的数据域的字节。

在车企中其实会为总线上的每个ECU都设定一个唯一的UDS诊断请求的CAN报文ID,以及一个唯一的UDS诊断响应的CAN报文ID。

现在有一个需求

我要通过UDS诊断来升级,某一个ECU,那么会有大量的数据要进行传输,因为要把这个ECU的整个固件程序,写入到ECU中,会涉及到大量的数据进行传输。这个时候需要暂停 除了当前要升级的这个ECU以外的,其他的所有的ECU的网络通讯。此时可以使用UDS诊断中的28服务(通讯控制)来完成。28服务可以暂停我们ECU上面的总线的通信,此时总线上有数十个通讯,不可能每个ECU都给它发一次28请求。我们就可以利用请求中的功能寻址(请求中分为物理寻址和功能寻址,只有请求中有,响应中没有)。

物理寻址其实就是诊断仪与单个ECU之间的通讯,功能寻址其实就是诊断仪与多个ECU之间的通讯。通过功能寻址的方式发送请求报文的时候,总线上的所有ECU都需要回复响应的报文。车企中有一个不成文的规定,会把功能寻址的ID设置为7DF。

总的来说,就是用诊断仪发送一帧ID为7DF的28服务的诊断请求的报文,这样总线上的所有ECU就都会停止网络通讯了。

这篇关于Uds诊断协议的请求和响应的寻址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927034

相关文章

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

Java http请求示例

使用HttpURLConnection public static String httpGet(String host) {HttpURLConnection connection = null;try {URL url = new URL(host);connection = (HttpURLConnection) url.openConnection();connection.setReq

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有