UDS诊断ISO14229新手入门篇

前言:参考ISO-142293a90a9c6223d4c0cad4837ff9759a4ae.png

fc5691dd821643dfb48abe260597fae3.png 

UDS 诊断教程(一)

UDS 由 ISO-14229 系列标准定义,ISO 14229-1 定义了诊断服务,不涉及网络及实现,只有应用层的内容。而 ISO 14229-3 则定义了 UDS 在 CAN 总线上的实现。诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),

ECU 给出诊断响应(response),而 UDS 就是为不同的诊断功能的 request 和 response 定义了统一的内容和格式。

最近关于 UDS 的一系列专栏文章只关注应用层的诊断服务,忽略下层的通信机制。

Diagnostic request 的格式:

407ba223b9f344e5bf01516d49dda47b.png

Diagnostic request 的格式可以分为两类:一类是拥有 sub-function 的,另一类是没有 sub-function 的,如下面两张图所示。Service ID(以下简称 SID)的长度固定为 1

个字节,代表了这条诊断命令执行的什么功能。sub-function 的长度也是 1 个字节,它通常表示对这个诊断服务的具体操作,比如是启动、停止还是查询这个诊断服务。

而后面的 parameter 则根据各个诊断服务的不同具有不同的内容,长度和格式并没有统一规格,它用于限定诊断服务执行的条件,比如某个诊断服务执行的时间等。

parameter 的一个重要应用是作为标识符,标识诊断请求要读出的数据内容,我会在后续的文章里详细讲述各个诊断服务的应用。

99840c4c74f0439b81bc3e73e29beea9.png 

拥有 sub-function 的诊断请求

 bc6e8c2938b34a038f5da372992ebb48.png

无 sub-function 的诊断请求

有一点要补充的是,其实 sub-function 严格来说是 7 个 bit,而不是 1 个 byte,因为它的最高位 bit 被用于抑制正响应(suppress positive response,SPR),如果这个 bit 被置 1,则 ECU 不会给出正响应(positive response); 如果这个 bit 被置 0,则

ECU 会给出正响应。这样做的目的是可以告诉 ECU 不要发不必要的 response,从

而节约通信资源。

 

Diagnostic response 的格式:

Diagnostic response 分为 positive 和 negative 两类。positive response 意味着诊断仪发过来的诊断请求被执行了,而 negative response 则意味着 ECU 因为某种原因无法执行诊断仪发过来的诊断请求,而无法执行的原因则存在于 negative response 的报文中。

bc2f735d962e4b28bd557f0c8d8a45d5.png 

positive response

positive response 的格式如上图所示,也基本上是由三部分组成,其中的 response SID 这个字节作为诊断请求的 echo,它等于 SID + 0X40。后面的两个部分则视具体的诊断服务而定。

 f444197a4e0a460b9f0742ea4ce6bdde.png

negative response

negative response 的格式固定为 3 个字节,第一个字节为 0x7F,第二个字节是被拒绝掉的 SID,第三个字节是这个诊断服务无法被执行的原因。下面这张图列举了部分原因代码,比如,如果 ECU 给出 7F 22 13 这个 negative response,则说明 22 这个服务因为诊断请求数据长度不对的原因无法执行。

d23257485aa244ffb4779cf757b83090.png 

Negative Response Code

总结:诊断通信的过程就是诊断仪和 ECU 交换数据,前者发的是 request,后者发的是 response,而 UDS 最重要的作用就是定义了这些 request 和 response 的格式和内容。本文对 request 和 response 进行了简要介绍,在后面描述各种诊断服务的文章中我会通过更多的示例来说明这两个基本概念。

 

UDS 诊断教程 (二)

UDS 定义的诊断服务从逻辑来说分为以下几类:

  1. Diagnostic and Communication Management (诊断和通信管理)
  2. Data Transmission (数据传输)
  3. Stored Data Transmission (存储数据传输,用于操作 DTC)
  4. InputOutput Control (IO 控制)
  5. Routine Control (不知如何翻译好,作用是调用 ECU 内部的预置函数)
  6. Upload Download (上传下载)

UDS 规定使用 1 个 byte 来表示诊断服务,即所谓的 Service ID,简称 SID。本文介绍一下

Diagnostic and Communication Management 这一类诊断服务中的一部分。

DiagnosticSessionControl (0x10)

82461702d868408ba13de7facf45bf9c.png 

DiagnosticSessionControl 诊断 request 的格式 DiagnosticSessionControl 这个服务的 SID 是 0x10,request 固定为 2 个 byte,第一个 byte 是 SID,第二个 byte 的低 7bit 是 sub-function,用于指示 ECU 将进入的 session。

UDS 定义的 session 包括:

0x00 ISOSAEReserved(保留)

0x01 defaultSession

0x02 ProgrammingSession

0x03 extendedDiagnosticSession

0x04 safetySystemDiagnosticSession

0x05 – 0x3F ISOSAEReserved(保留)

0x40 – 0x5F vehicleManufacturerSpecific(由整车厂自定义使用)

0x60 – 0x7E systemSupplierSpecific(由 ECU 供应商自定义使用)

0x7F ISOSAEReserved(保留)

 

DiagnosticSessionControl 用于控制 ECU 在不同的 session 之间进行转换,session 可以看作是 ECU 所处的一种软件状态,在不同的 session 中诊断服务执行的权限不同。 ECU 上电之后,默认处在 defaultSession 中,在这个 session 中很多诊断服务不可以执行,很多诊断相关的数据不能读取或写入。一般的诊断仪启动之后,会给 ECU 发送 10 03,即让 ECU 进入 extendedDiagnosticSession 中,在这个 session 中可执行的诊断服务就很多了。而如果要让 ECU 保持在 non-defaultSession 中,则需要诊断仪每隔固定的时间发送 0x3E 服务,ECU 才会知道诊断仪有和自己通信的需求,从而保持在 non-

defaultSession 中。另一个常用的 session 是 ProgrammingSession,在这个 session 中可以进行软件刷写的一系列诊断服务。0x40 – 0x5F 这个范围中的 session 由整车厂自定义使用,比如,某些诊断服务或诊断数据的操作需要在生产线上执行,即所谓的 End-OfLine,整车厂可以从这个范围中选择一个值来表示 EOL session;又或者在开发阶段需要某种“超级”session,则也可以从这里选一个值用来使 ECU 进入开发模式的 session。 DiagnosticSessionControl 这个服务非常简单,但是它却是 ECU 和诊断通信的第一条诊断命令。

e9dfa73824734f68b3ece3f6e82e6338.png 

DiagnosticSessionControl 诊断

response 的格式

这个诊断服务的 response 分为三部分,第一部分是 0x50,作为 SID 的 echo;第二部分是进入的 session,作为 sub-function 的 echo;第三部分是 4 个字节,前两个字节代表

P2Server_max,即 ECU 在应用层上对诊断命令的响应时间,后两个字节代表

P2*Server_max

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

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

相关文章

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…

DIN模型实现推荐算法

1. 项目简介 项目A030-DIN的核心是通过深度学习技术实现个性化推荐算法,旨在为用户提供精准、高效的商品或内容推荐。在现代电子商务、社交媒体及内容平台中,推荐系统作为核心功能,极大地提升了用户体验。DIN(Deep Interest Netw…

Codeforces Round 973 (Div. 2) - D题

传送门&#xff1a;Problem - D - Codeforces 题目大意&#xff1a; 思路&#xff1a; 尽量要 最大值变小&#xff0c;最小值变大 即求 最大值的最小 和 最小值的最大 -> 二分答案 AC代码&#xff1a; 代码有注释 #include<bits/stdc.h> using namespace std; #…

无人机+自组网:中继通信增强技术详解

无人机与自组网技术的结合&#xff0c;特别是通过中继通信增强技术&#xff0c;为无人机在复杂环境中的通信提供了稳定、高效、可靠的解决方案。以下是对该技术的详细解析&#xff1a; 一、无人机自组网技术概述 无人机自组网技术是一种利用无人机作为节点&#xff0c;通过无…

指针修仙之实现qsort

文章目录 回调函数什么是回调函数回调函数的作用 库函数qsort使用qsort函数排序整形使用qsort函数排序结构体 qsort函数模拟实现说明源码and说明 回调函数 什么是回调函数 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

深度学习02-pytorch-01-张量的创建

深度学习 pytorch 框架 是目前最热门的。 深度学习 pytorch 框架相当于 机器学习阶段的 numpy sklearn 它将数据封装成张量(Tensor)来进行处理&#xff0c;其实就是数组。也就是numpy 里面的 ndarray . pip install torch1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simp…

蓝桥杯【物联网】零基础到国奖之路:七. 串口

蓝桥杯【物联网】零基础到国奖之路:七. 串口 第一节 串口通信理论第二节 软件通信协议第三节 DMA理论第四节 CubeMX的配置第五节 代码模版 第一节 串口通信理论 通用异步收发传输器&#xff08;UART&#xff09;是一种串行异步收发协议&#xff0c;应用十分广泛。UART将数据二…

HashMap扩容时机是插入前还是插入后?

结论 不管是HashMap还是ConcurrentHashMap都是插入后。 过程为&#xff1a; 先计算哈希值。对应的哈希槽插入数据&#xff0c;决定是红黑树还是链表插入完毕才计算是否需要扩容&#xff0c;假如需要则扩容 源码 源码如下&#xff1a; 其中addCount方法里面写入扩容。

Dash稳定版更新

大家好&#xff0c;今天要和大家聊聊一个开发Python网页应用的超级神器——Dash 2.18.1稳定版本正式发布啦&#xff01;此次更新&#xff0c;针对2.18.0版本的问题进行了修复和优化&#xff0c;为我们带来了更为稳定、强大的开发体验。 Dash是什么&#xff1f; Dash是一款基于P…

深度学习03-神经网络02-激活函数

可以使用这个进行跳转链接​​​​​​​http://playground.tensorflow.org/#activationrelu&batchSize11&datasetspiralDatasetreg-gauss&learningRate0.01ularizationRate0.1&noise0&networkShape7,5,4,3,2&seed0.54477&showTestDatafalse&d…

Excel VLOOKUP函数怎么用?vlookup函数的使用方法及案例

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f50e; 在Excel的世界里&#xff0c;VLOOKUP函数无疑是查询和数据分析中的明星。无论是从庞大的数据表中提取特定信息&#xff0c;还是进行数据的快速匹配&#xff0c;VLOOKUP都能大显身手。今天&#xff0c;我们将深…

第15章 程序的动态加载和执行

第15章 程序的动态加载和执行 该章节讲解了MBR加载内核&#xff0c;然后内核加载用户程序这样一套流程&#xff0c;模拟操作系统的工作原理。 本章代码清单 本章的代码实现的功能位&#xff1a;主引导扇区加载内核&#xff0c;内核加载用户程序&#xff0c;用户程序通过调用…

速通LLaMA3:《The Llama 3 Herd of Models》全文解读

文章目录 概览论文开篇IntroductionGeneral OverviewPre-TrainingPre-Training DataModel ArchitectureInfrastructure, Scaling, and EfficiencyTraining Recipe Post-TrainingResultsVision ExperimentsSpeech Experiments⭐Related WorkConclusionLlama 3 模型中的数学原理1…

【力扣每日一题——2374. 边积分最高的节点】python

2374. 边积分最高的节点 给你一个有向图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff0c;其中每个节点都 恰有一条 出边。 图由一个下标从 0 开始、长度为 n 的整数数组 edges 表示&#xff0c;其中 edges[i] 表示存在一条从节点 i 到节点 edges[…

mimics教程案例1-骨折三维重建

骨折三维重建 1 打开软件新建工程&#xff0c;将数据导入 FILE -> New Project ->找到自己的数据 ->Next ->Open 2 新建图层 SEFMENT -> New Mask ->选择阈值&#xff08;合适的阈值是可以将骨骼边缘覆盖住&#xff09;-> OK 3 使用Region Grow(区域增…

【全网最全】2024年华为杯研赛B题成品论文获取入口(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接加入【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/hMgWngXvcQhttps://qm.qq.com/q/hMgWngXvcQ你是否在寻找数学建模比赛的突破点&a…

【无标题】HG6201M路由的超级管理密码获取

这里写自定义目录标题 1、开启telnet http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable1&keyXXXXX 注意&#xff1a;此处的XXXXX为路由背面标签的MAC地址&#xff0c;去掉“-”&#xff0c;且大写。 成功后会显示&#xff1a;telnet开启 2、登录telnet 此处采…

GB28181协议接入SVMSPro平台

国标28181协议接入SVMSPro平台 步骤一&#xff1a;海康摄像机28181配置&#xff1b;登录海康摄像机网页进配置选项&#xff0c;左边选网络-高级设置-平台接入-类型选28181 勾选启用&#xff0c;28181协议版本选最新2016 SIP服务器ID:默认20位 34020000002000000001,也可在服务端…

SVTR文字识别

论文地址&#xff1a;https://arxiv.org/abs/2205.00159 notes&#xff1a; 论文2.5中说的N nodes&#xff0c;就是输出的类别数量&#xff0c;英文37&#xff0c;中文6625&#xff0c;英文37说的是最简单的英文文字识别任务&#xff0c;不区分大小写&#xff0c;就是26个字母…

数据库(选择题)

基本概念 数据库&#xff08;DB&#xff09;&#xff1a;长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a;它是数据库的机构&#xff0c;是一个系统软件&#xff0c;负责数据库中的数据组织、数据操纵、数据维护…