UDS诊断笔记

news2024/12/22 23:49:48

文章目录

  • 常见缩写
  • 简介
  • UDS寻址模式
    • 1. 物理寻址(点对点、一对一)
    • 2. 功能寻址(广播、一对多)
    • 3. 功能寻址使用场景举例
  • UDS报文格式
  • UDS协议栈
    • 网络层
      • 网络层功能
      • 网络层协议
      • 1. 单帧 SF(Single Frame)
      • 2. 首帧 FC(First Frame)
      • 3. 流控帧 FC(Flow Control Frame)
      • 4. 连续帧 CF(Continuous Frame)
      • 定时参数
  • UDS诊断服务
    • 1. 诊断和通信管理功能单元
    • 2. 数据传输功能单元
    • 3. 存储数据传输功能单元
    • 4. IO 控制功能单元
    • 5. 例程功能单元
    • 6. 上传下载功能单元
  • 引用与参考

常见缩写

  • ECU: 电 子 控 制 单 元
  • UDS:Unified Diagnostic Service( 统 一 诊 断 服 务 )
  • SID:Service Identifier(服 务 标 识 符 )
  • DID:Data Identifier(数 据 标 识 符 )
  • DTC:Diagnostic Trouble Code(故 障 诊 断 代 码 )
  • NRC:Negative Response Code(否 定 响 应 码 )
  • EOL:End Of Line(下 线 )
  • ISO:International Standards Organization(国际标准组织)
  • NA:Not Applicable(不适用)
  • NRC: 否定响应代码
  • USDT: Unacknowledged Segmented Data Transfer(不需响应的分段数据传输)
  • APP: Application(应用程序)
  • FBL: Flash Boot Loader(刷写引导程序)
  • OBD: 车辆诊断连接接口

简介

UDS本质上是一系列服务的集合。UDS的服务包含6大类,共26种。每种服务都有自己独立的ID,即SID(Service Identifier)。

UDS本质上是一种定向的通信,是一种交互协议Request/Response)
在这里插入图片描述

Tester发给ECU的数据,应包含 SID,且SID处于该 应用层数据 的第一个字节。

  • 如果是肯定的响应(Positive Response)首字节回复[SID+0x40]外,其他字节根据服务返回;例如,请求0x10,响应返回0x50
  • 如果是否定的响应(Negative Response)首字节回复0x7F第二字节回复刚才询问的SID第三字节NRC(否定响应码),代表否定的依据

在这里插入图片描述

  • 如上图,TesterECU 发送的数据 为 02 10 01 AA AA AA AA AA
    • N_PCI = 02, 表示 此帧为单帧有效数据长度2
    • N_Data = 10 01, 表示 Tester 发送的有效信息,请求ECU进入默认会话
    • AA AA AA AA AA自定义自动填充数据
  • ECUTester 响应的数据 为 06 50 01 00 32 01 F4 CC
    • N_PCI = 06, 表示 此帧为单帧有效数据长度6
    • N_Data = 50 01 00 32 01 F4, 50 =[SID+0x40], 后面为该服务返回数据
    • CC 为自定义自动填充数据

UDS寻址模式

1. 物理寻址(点对点、一对一)

根据物理地址的不同进行访问,但只能访问(通过CAN ID访问)单个ECU节点,TesterSA源地址,ECU作为TA目标地址

2. 功能寻址(广播、一对多)

根据功能的不同进行访问,它能访问(通过CAN ID访问)多个ECU节点,对于标准帧来说,通常是0x7DF,也就是说本网络中所有ECU都要对这条指令做出响应,即一对多模式

每个ECU 都有2个 CAN的诊断帧ID,分别对应物理寻址时 ECU发到CAN线上的报文CAN ID和处理指定CAN ID的数据报文

通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息

3. 功能寻址使用场景举例

  1. 刷写前使用0x85(ControlDTCSetting)服务关闭ECU故障检查功能
  2. 刷写前使用0x28(CommunicationControl)服务对某些ECU禁言
  3. 使用0x14(ClearDiagnosticInformation)服务清除多个ECU DTC等

UDS报文格式

在这里插入图片描述

UDS协议栈

UDS协议栈主要分为网络层和应用层两大部分
在这里插入图片描述

网络层

为了解决ISO 11898 协议中的经典can数据链路层与UDS 应用层 ISO 14229 协议中定义的应用层,彼此的数据长度不一样问题。经典can数据链路层最大支持8字节,但 ISO 14229 不仅仅支持can总线设计的,其最大容量是达到4095字节

例如,UDS应用需要发送20字节数据信息,而 经典CAN不能一帧报文处理完,需要3帧才能发送完毕。那么如何将多字节数据通过can进行有效,有序的传输呢?ISO 15765-2 由此而生。

网络层功能

  • 应用层诊断服务can数据帧的转发;
  • 多帧数据传输,进行数据的打包、解包,协调上下层工作;

网络层协议

N_PDU(网络层协议数据单元) 一般包含3个领域,N_PDU: { N_AI, N_PCI, N_Data }

参数名称缩写描述
寻址信息N_AI隐含源地址、目标地址和寻址方式信息
协议控制信息N_PCI用于标识N_PDU帧类型
数据N_Data包含应用层数据A_Data

网络层对于N_PDU分为单帧(SF)首帧(FF)流控帧(FC)连续帧(CF)这四种类型,每种类型是通过协议控制信息(N_PCI)进行区分的,每一个N_PDU都只有一个N_PCI。通常对于CAN诊断来说,就可以通过识别每条CAN帧数据域的 首个字节 来确定它属于四种类型中的哪类。

N_PDU类型N_PCI
Byte 1Byte 2Byte 3
Bit 7-4 Bit 3-0
单帧(SF) N_PCI Type = 0 SF_DL <= 7 N_Data
首帧(FF) N_PCI Type = 1 7 < FF_DL <= 4095 N_Data
流控帧(FC) N_PCI Type = 3 FS BS STmin
连续帧(CF) N_PCI Type = 2 SN (0-F循环计数) N_Data

网络层分为单帧和多帧,单帧(SF)就是一帧can报文8字节内就可以把uds数据处理完毕。多帧就是一帧can报文8字节内处理不完,需分为首帧(FF),流控帧(FC),连续帧(CF)来处理。网络层还有时间参数,如N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs。后续网络层会详细讲解。

1. 单帧 SF(Single Frame)

单帧 顾名思义就是一帧can报文就可以处理完uds服务

2. 首帧 FC(First Frame)

发送方发送 N_Data 数据过长 时,则需要拆分成多帧报文 被拆分后的报文需要通过多个N_PDU来发送,而接收方接收到多个N_PDU信息后进行重组。
发送方发送多帧时,需要先发送首帧来告知接收方有多少字节数要发送到接收方。

3. 流控帧 FC(Flow Control Frame)

UDS多帧通讯时:

  1. 发送方 发送首帧FF 给接收方。
  2. 接收方接收到首帧, 解析首帧
  3. 接受方根据自身条件判断后(如:接收数据缓存大小,接收数据快慢能力,当前是否可以接收数据等), 回复一帧流控帧FC给发送方。
  4. 发送方根据接收到接收方的流控帧FC来决定后续的操作。

FS (Flow State) 流状态:

  • 0 : 继续发送
  • 1 : 等待
  • 2 : 溢出,即第一帧中的FF_DL信息的长度超过接受实体缓冲区的大小)

BS 表示 块大小(允许一次可连续发送连续帧 CF 的次数)
STmin 表示 发送方发送连续帧 CF 与连续帧 CF 间的最小间隔时间

4. 连续帧 CF(Continuous Frame)

发送方发送首帧FF,然后接收到接收方的流控帧FC后,若条件允许可继续发送信息,则需根据连续帧CF的控制信息格式来发送信息。

对于所有的拆分信息,SN开始于0。第一帧应当分配值为0。 虽然第一帧 N_PCI 没有明确表示出序列号,但是应该将首帧当作0号序列对待,第一个流控帧FC后的 连续帧SN设置为1,同一拆分信息上,每一个新增的连续帧顺序号SN增1,连续帧顺序号SN的值不受流控帧的影响,当连续帧顺序号SN值为0x0F时,下一个连续帧中将顺序号SN重置为0。

定时参数

网络层定义了N_ArN_AsN_BrN_BsN_CrN_Cs六个时间参数

定时参数描述
N_As发送方数据帧经数据链路层发送的时间
N_Ar接收方数据帧经数据链路层发送的时间
N_Bs发送方接收流控制帧的等待时间
N_Br接收方发送流控制帧的间隔时间
N_Cs发送方发送连续帧的间隔时间
N_Cr接收方接收连续帧的等待时间
  • N_As超时:发送方没有及时发送N_PDU
  • N_Ar超时:接收方没有及时发送N_PDU
  • N_Bs超时:发送方没有接收到流控帧。
  • N_Br超时:接收方没有发出流控帧。
  • N_Cs:即STmin,发送两个连续帧需要等待的最短时间,N_Cr最大1000ms
  • N_Cr超时:接收方没有收到连续帧。

UDS诊断服务

1. 诊断和通信管理功能单元

序号ID服务说明服务详解
10x10Diagnostic Session Control
(诊断会话控制)
客户端请求通过服务器控制会话点击此处跳转
20x11ECU Reset
(ECU重置)
客户端强制服务器执行重置点击此处跳转
30x27Security Access
(安全访问)
客户端请求解锁受保护的服务器点击此处跳转
40x28Communication Control
(通信控制)
客户端控制服务器内通信参数的设置(例如,通信波特率)点击此处跳转
50x3ETester Present
(测试仪 保活)
客户端向服务器发送其仍处于保活状态消息点击此处跳转
60x83Access Timing Parameter
(访问计时参数)
客户端使用该服务来读取/修改 有效通信的计数参数点击此处跳转
70x84Secured Data Transmission
(受保护的数据传输)
客户端使用该服务来执行具有扩展数据链路安全性的数据传输点击此处跳转
80x85Control DTC Setting
(控制DTC设置)
客户端控制服务器内DTC设置点击此处跳转
90x86Response On Event
(基于事件响应)
客户端请求设置/控制 服务器内的事件机制点击此处跳转
100x87Link Control
(链路控制)
客户端请求控制通信波特率点击此处跳转

2. 数据传输功能单元

序号ID服务说明服务详解
10x22Read Data By Identifier
(按标识符读取数据)
客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的当前值点击此处跳转
20x23Read Memory By Address
(按地址读取内存)
客户端请求读取给定范围的当前值点击此处跳转
30x24Read Scaling Data By Identifier
(按标识符读取换算数据)
客户端请求读取通过给定 Data Identifier(数据标识符)所识别的记录的换算信息点击此处跳转
40x2ARead Data By Periodic Identifier
(按周期性标识符读取数据)
客户端请求调度服务器中的数据供周期性传输点击此处跳转
50x2CDynamically Define Data Identifier
(动态定义数据标识符)
客户端请求动态定义后续可能成为 22 服务所读取的数据标识符点击此处跳转
60x2EWrite Data by Identifier
(按标识符写数据)
客户端请求写入通过给定 Data Identifier(数据标识符)所指定的记录点击此处跳转
70x3DWrite Memory By Address
(受保护的数据传输)
客户端请求改写给定的内存范围的值点击此处跳转

3. 存储数据传输功能单元

序号ID服务说明服务详解
10x14Clear Diagnostic Information
(清除诊断信息)
允许客户端从服务器中清除诊断信息(包括DTC 和捕获的数据等)点击此处跳转
20x19Read DTC Information
(读取诊断信息)
允许客户端从服务器中请求诊断信息(包括DTC 和捕获的数据等)点击此处跳转

4. IO 控制功能单元

序号ID服务说明服务详解
10x2FInput Output Control By Identifier
(按标识符输入输出控制)
客户端请求服务器控制特定 输入/输出点击此处跳转

5. 例程功能单元

序号ID服务说明服务详解
10x31Routine Control
(例程控制)
客户端请求启动、停止服务器的例程,或请求例程结果点击此处跳转

6. 上传下载功能单元

序号ID服务说明服务详解
10x34Request Download
(请求下载)
客户端请求从客户端向通过服务器传输数据点击此处跳转
20x35Request Upload
(请求上传)
客户端请求从服务器向客户端传输数据点击此处跳转
30x36Transfer Data
(传输数据)
客户端向服务器传输数据(下载)或请求服务器传输数据(上传)点击此处跳转
40x37Request Transfer Exit
(请求传输终止)
客户端请求传输终止点击此处跳转
50x38Request File Transfer
(请求文件传输)
客户端请求在服务器和客户端之间传输文件点击此处跳转

引用与参考

  • https://zhuanlan.zhihu.com/p/502441990
  • https://blog.csdn.net/weixin_48498880/article/details/126443147
  • https://blog.csdn.net/weixin_48498880/article/details/128255219

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

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

相关文章

matplotlib笔记:bar barh

1 bar 绘制垂直方向的条形图 x条形的 x 坐标height 条形的高度 width 条形的宽度 &#xff08;浮点数或类数组&#xff09; bottom 条形的底部的 y 坐标 &#xff08;浮点数或类数组&#xff09; align 控制条形对齐方式 center&#xff1a;将基线居中于 x 位置。ed…

cpu的cacheline对程序效率影响

什么是cpu cacheline CPU的缓存行&#xff08;Cache Line&#xff09;是存储器层次结构中的一部分&#xff0c;用于在CPU缓存和主存之间传输数据。缓存行是缓存的最小单位&#xff0c;也是处理器从主存中读取数据到缓存或将数据从缓存写回主存的最小数据块。 缓存行的大小是由…

C语言 指针与内存之间的关系

一、内存与字节 一个内存单元一个字节一个地址 整型 int 类型中int类型的字节数是4 且一个字节表示八个bite位 一个二进制数位有着32个bite 所以又可以表示为&#xff1a;一个字节 8个比特位 32位数的二进制数位的八分之一 例如&#xff1a; int a 10&#xff1b; 该表达式…

编程基础与脚本规范

编程基础与脚本规范 一.编程基础1.1程序组成1.2.编程风格1.3 编程语言的分类 二.shell脚本基础2.1shell脚本的用途和应用场景2.2常见的shell解释器2.3shell脚本基本结构2.4shell规范脚本2.5脚本的执行方式2.6脚本错误调试 三.重定向与管道符3.1标准输入去输出3.2重定向3.3 管道…

TypeError: Plain typing.NoReturn is not valid as type argument解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【C语言】初阶指针详解

目录 一、什么是指针&#xff1f; 1.指针变量 2.指针大小 二、指针类型 三、野指针 四、指针运算 1.指针-整数 2.指针-指针 3.指针的关系运算 五、指针和数组 六、二级指针 七、指针数组 一、什么是指针&#xff1f; 指针是内存中一个最小单元的编号&#xff0c;…

MySQL_数据库的DDL语句(表的创建与修改)

DDL 数据库操作 查看当前有哪些数据库 SHOW databases;#查看哪些数据库查询当前数据库 SELECT database();创建数据库 create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;创建一个sycoder数据库, 使用数据库默认的字符集 CREATE…

retrofit-helper 简洁的封装retrofit,优雅的取消请求

retrofit-helper Retrofit是很多android开发者都在使用的Http请求库&#xff01;他负责网络请求接口的封装,底层实现是OkHttp,它的一个特点是包含了特别多注解&#xff0c;方便简化你的代码量,CallAdapter.Factory 和Converter.Factory可以很灵活的扩展你的请求。我们在使用的…

“崩溃”漏洞会影响英特尔 CPU 的使用寿命,可能会泄露加密密钥等

对于 CPU 安全漏洞来说&#xff0c;本周是重要的一周。昨天&#xff0c;不同的安全研究人员发布了两个不同漏洞的详细信息&#xff0c;一个影响多代英特尔处理器&#xff0c;另一个影响最新的 AMD CPU。“ Downfall ”和“ Inception ”&#xff08;分别&#xff09;是不同的错…

CEC2013(MATLAB):能量谷优化算法EVO求解CEC2013的28个函数

一、能量谷优化算法EVO 能量谷优化算法&#xff08;Energy valley optimizer&#xff0c;EVO&#xff09;是MahdiAzizi等人于2023年提出的一种新颖的元启发式算法&#xff0c;其灵感来自关于稳定性和不同粒子衰变模式的物理原理。能量谷优化算法&#xff08;Energy valley opt…

AI时代的较量,MixTrust能否略胜一筹?

人工智能的能力正在迅速接近人类&#xff0c;而在许多细分领域&#xff0c;已经超越了人类。虽然短期内这个突破是否会导致人工通用智能&#xff08;AGI&#xff09;还不清楚&#xff0c;但我们现在有的模型被训练成在数字交互中完美地模仿高能人类。尽管AGI仍不确定&#xff0…

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention时间序列预测&#xff0c;CNN-BiGRU-Attention结合注意力机制时…

Java课题笔记~ Request请求

1.请求消息格式 客户端发送一个HTTP请求到服务器的请求消息包括以下格式&#xff1a; 请求行&#xff08;request line&#xff09;、请求头部&#xff08;header&#xff09;、空行和请求数据四个部分组成。下图给出了请求报文的一般格式。 GET请求&#xff1a; POST请求&am…

每日一学——OSI参考模型

OSI参考模型&#xff08;Open Systems Interconnection Reference Model&#xff09;是国际标准化组织&#xff08;ISO&#xff09;制定的一个网络通信协议的概念框架。它将网络通信划分为七个层次&#xff0c;每个层次负责不同的功能和任务&#xff0c;从物理层到应用层依次为…

【ThreadPoolTaskSchedule】实现手动开启关闭定时任务

最近在公司呢&#xff0c;有一个需求&#xff0c;大概意思就是需要我去调用远程接口&#xff0c;但如果出现异常或者响应失败的时候&#xff0c;就需要开启重试机制&#xff0c;直到返回成功的响应为止。我很疑惑&#xff0c;按理说这种情况通常都应该有一个最大重试次数吗&…

python编程英语词汇大全app,python常用单词中英对照

大家好&#xff0c;小编为大家解答python编程英语词汇大全 知乎的问题。很多人还不知道python编程英语词汇大全app&#xff0c;现在让我们一起来看看吧&#xff01; 第1天 editor[edtr]n. 编者&#xff0c;编辑&#xff1b;社论撰写人&#xff1b;编辑装置 setting[set]n. 环境…

《爬虫》爬取页面图片并保存

爬虫 前言代码效果 简单的爬取图片 前言 这几天打算整理与迁移一下博客。因为 CSDN 的 Markdown 编辑器很好用 &#xff0c;所以全部文章与相关图片都保存在 CSDN。而且 CSDN 支持一键导出自己的文章为 markdown 文件。但导出的文件中图片的连接依旧是 url 连接。为了方便将图…

封装一个常用的Enum

前言 项目里面经常用到一些下拉框 尝试封装一个比较好用的Enum 文件目录 ├── utils.ts ├── index.txs └── package.josn代码 utils.ts class Enum {static keys: string[];static values: Enum[];/*** call this function after declare all staic enum variable*…

【效率提升-Perl脚本】根据Verilog文件自动生成tb文件

文章目录 Verilog端口文件&#xff08;仅做示范用&#xff09;对应的tb文件相应代码 在数字IC设计过程中&#xff0c;根据顶层生成testbench时存在很多重复性工作&#xff0c;因此为了提高工作效率&#xff0c;特地开发此脚本。 相应的python脚本见链接&#xff1a; 【效率提升…

跨境商城app源代码开发--Java、H5用户端

随着全球电子商务的快速发展&#xff0c;跨境贸易已经成为一种新的商业趋势。在这个背景下&#xff0c;开发一个跨境商城APP&#xff0c;提供一站式跨境贸易服务&#xff0c;具有非常重要的意义。本文将详细阐述使用Java和H5技术进行跨境商城APP用户端源代码开发的步骤。 一、…