UDS诊断笔记

文章目录

  • 常见缩写
  • 简介
  • 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.hqwc.cn/news/62198.html

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

相关文章

Floyd算法

正如我们所知道的&#xff0c;Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展&#xff0c;三个for循环就可以解决问题&#xff0c;所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下&#xff1a;从任意节点A到任意节点B的最短路径不外乎2种可能&#xff…

【学习FreeRTOS】第3章——FreeRTOS移植及配置文件

1.FreeRTOS源码简介 【一级目录&#xff1a;/】以下FreeRTOS的源码&#xff0c;其中&#xff0c;FreeRTOS文件夹最为重要&#xff0c;代笔FreeRTOS内核 【二级目录&#xff1a;/FreeRTOS】以下为FreeRTOS文件夹的内容&#xff0c;比较重要的有Demo文件夹和Source文件夹 【三级…

5. 服务发现

当主机较少时&#xff0c;在抓取配置中手动列出它们的IP地址和端口是常见的做法&#xff0c;但不适用于较大规模的集群。尤其不适用使用容器和基于云的实例的动态集群&#xff0c;这些实例经常会变化、创建或销毁的情况。 Prometheus通过使用服务发现解决了这个问题&#xff1…

跨域+四种解决方法

文章目录 一、跨域二、JSONP实现跨域请求三、前端代理实现跨域请求四、后端设置请求头实现跨域请求五、Nginx代理实现跨域请求5.1 安装Nginx软件5.2 使用Ubuntu安装nginx 本文是在学习课程满神yyds后记录的笔记&#xff0c;强烈推荐读者去看此课程。 一、跨域 出于浏览器的同…

ubuntu 安装 nvidia 驱动

ubuntu 安装 nvidia 驱动 初环境与设备查询型号查询对应的驱动版本安装驱动验证驱动安装结果 本篇文章将介绍ubuntu 安装 nvidia 驱动 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;ubuntu 设备&#xff1a;Nvidia GeForce RTX 4090 查询型…

Nginx负载均衡(重点)

正向代理 部署正向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://20.0.0.60:80…

VS code 2023下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

安装步骤 1、下载后鼠标右键【解压到 Visual Studio Code2023 】&#xff1b; 2、打开解压的文件夹&#xff0c;找到【Setup.exe】运行程序&#xff0c;双击运行或者鼠标右键【以管理员身份运行】&#xff1b; 3、勾选【我同意此协议】后&#xff0c;点击【下一步】&#xff1…

使用C#加载TOOLBLOCK

前言 因为Vpp文件类型包含了以下三种 QuickBuidJobToolBlock 不同类型的打开方式不同&#xff0c;需要提前知道vpp是什么类型 例如 这个TB.vpp文件是TOOLBLOCK&#xff0c;就不能直接在visionpro中打开&#xff08;直接打开需要QuickBuid文件&#xff09;&#xff0c; 可以…

【Linux】UDP协议——传输层

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号 两个问题 netstat与iostat pidof UDP协议 UDP协议格式 UDP协议的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 在学习HTTP等应用层协议时&#xff0c;为了便于理解&#xff…

flask使用cookie (设置cookie与查看cookie内容)

1.flask包cookie的使用 设置cookie app.route(/set_cookie) def set_cookie():resp make_response(Setting cookie)resp.set_cookie(username, John)return resp查看cookie: app.route(/get_cookie) def get_cookie():username request.cookies.get(username)return Welco…

创建型模式-单例模式

文章目录 一、创建型模式1. 单例设计模式1.1 单例模式的结构1.2 单例模式的实现&#xff08;1&#xff09;饿汉式-方式1&#xff08;静态变量方式&#xff09;&#xff08;2&#xff09;饿汉式-方式2&#xff08;静态代码块方式&#xff09;&#xff08;3&#xff09;懒汉式-方…

vue elementui v-for 循环el-table-column 第一列数据变到最后一个

这个动态渲染table表格时发现el-table-column 第一列数据变到最后一个 序号被排到后面 代码 修改后 <el-table:data"tableData"tooltip-effect"dark"style"width: 100%"height"500"><template v-for"(item, index) i…