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

相关文章

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2