车载测试之UDS诊断协议

2024-08-31 19:12
文章标签 协议 测试 uds 诊断 车载

本文主要是介绍车载测试之UDS诊断协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是UDS诊断

也被称为离线诊断或者增强型诊断,面向汽车上的所有ECU的诊断,可以通过UDS进行读取、写入ECU运行时的一些数据,刷写ECU、获取故障信息等,UDS是一套统一的诊断服务命令,分为6大类26个服务

26个诊断服务

UDS中的26个服务是规定在ISO的14229-1协议中

诊断和通信管理功能单元

故障码传输功能单元

数据传输类功能单元

输入输出控制功能单元

例行程序功能单元

上传和下载功能单元

诊断的请求与响应

UDS协议规定诊断的整个过程是是请求响应模式,其实这个做web的就很好理解了,就如同我们http请求,基于请求响应的,发送请求获取响应,在USD诊断中是由诊断仪发送诊断请求,ECU接收到诊断请求后处理,再发回给诊断仪

诊断请求和诊断响应的本质就是一段符合UDS协议规范的16进制的报文

下图所示:

这里我们看到开头SID是22,可以回头去看是6大服务内的哪个功能,可以找到是数据传输类功能单元里面包含22,作用是通过ID读取数据,实际上这段诊断请求就是读取ECU当前工作的电压信息

这里的7F 22 11 这个其实是负响应(否定响应),是失败的,这个之前工作中没有Zenzifi认证经常碰到这个否定响应

下面会肯定响应,才代表这次诊断请求响应正常的

否定响应码

否定响应码也叫NRC(Negative Response Code),当一次UDS诊断请求失败的时候ECU会返回一个否定响应码

常见的否定响应码

11:代表ECU不支持该服务

12:代表EUC不支持当前服务的子功能

22:某一项诊断请求需要在某个更高级的扩展会话下进行

31:很多请求需要提供一些数据参数,有些数据参数是不被支持的

33:权限问题

请求和响应的寻址

CAN总线上面会有很多个ECU是如何实现将诊断请求发送给某个具体的ECU呢?

在UDS诊断协议中除了规定26个服务的服务细节,还规定了诊断请求和响应报文发送时必须要指明寻址信息,寻址信息包含了源地址和目标地址

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

诊断请求之物理寻址

物理寻址其实是诊断仪与单个ECU之间的通信,只有指向的ECU可以响应报文

诊断请求之功能寻址

诊断仪与多个ECU之间的通信,可以理解为群发,一般企业都把功能寻址的CAN报文ID设置为7DF

诊断会话控制

首先要知道会话有哪些:

10 01:默认会话

10 02:编程会话

10 03:扩展会话

不同会话下所能操作的诊断请求是不同的

10服务请求和响应的报文格式

 

这篇关于车载测试之UDS诊断协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

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

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

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

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

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

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接