【AutoSar】汽车诊断标准协议UDS详解

目录

  • 一、基本概念
  • 二、UDS诊断协议
    • 2.1 诊断服务的概念
    • 2.2常用的诊断服务
      • 2.2.1 诊断会话控制服务(10服务)
      • 2.2.2 会话访问0x27服务
      • 2.2.3 用于读写的DID的0x22/0x2E服务

一、基本概念

车辆的诊断需要有Tester端和ECU段通过应答的方式进行通信,他们使用同一协议进行诊断通信,比如ISO 14229协议就是UDS协议。在协议里定义了诊断需求、诊断响应的报文格式等等。下图描述了UDS在OSI七层模型中的应用。我们可以看到UDS可以建立在CAN网络上,也可以建立在FlexRay或者以太网上。

在这里插入图片描述

二、UDS诊断协议

2.1 诊断服务的概念

诊断服务的基本概念是:请求是由Tester发给ECU的,其中请求报文中带有SID(Services Identifier),根据具体的服务内容和含义后增加具体的数据。Tester会发送SID给到ECU,而ECU的响应报文也很有意思:肯定报文会在SID的基础上加40后返回;而否定报文则固定式7F,然后加上SID后加上NRC(Negative Response Code)。常用的NRC有:

  • 11表示服务不支持;
  • 12 subfunction不支持;
  • 13 请求的长度不正确,或者格式不正确
  • 31 是请求超出范围;
  • 7E 是在当前会话下subfunction不支持
  • 7F 是在当前会话下服务不支持
    在这里插入图片描述
    在请求报文的SID后面,紧跟的有两种情况,第一种是紧跟一个Subfunction,此时一个请求报文的格式就是SID+Subfunction+具体内容,而对应的肯定响应报文就是(SID+40)+Subfunction+具体内容。而部分UDS是不支持Subfunction的,则会使用DID(Diagnosis ID),其请求报文的格式是SID+DID+内容,肯定响应报文则睡觉哦(SID+40)+DID+具体内容

在这里插入图片描述
在支持Subfunction的UDS中,规定Subfunction的最高位为响应抑制位,当这个位为1的我时候,就会抑制肯定响应,也就是ECU将不会发送肯定报文,当然,否定报文还是会发送的。

ECU是很繁忙的,有时候ECU在忙更高优先级的事情,来不及响应UDS请求怎么办。答案就是使用Pending报文。当ECU收到请求但是无暇响应的时候,将会在规定的P2Server时间内给出一个NRC为78的Pending报文,表示正忙,如果ECU还是没时间回复,则会在规定的P2Server/*时间内继续发送Pending报文,直到可以回复响应报文。
在这里插入图片描述

2.2常用的诊断服务

诊断服务通过SID区分,常用的诊断服务包括:10会话控制、14清除诊断信息、22通过DID读取数据、27安全界所服务、2E通过DID写入数据

2.2.1 诊断会话控制服务(10服务)

ECU会有不同的会话控制,比如说ECU在开发、生产、售后阶段会使用不同的会话,每个会话能够使用的服务类型也不尽相同,因此10服务主要是用于会话控制。比如说刷写相关的34,36,37服务,在默认会话下是不支持的,这也很好理解:当车辆完成生产之后我们不能随便对ECU进行刷写
在这里插入图片描述
肯定响应不再赘述,主要是否定响应,10服务下的否定响应有3中NRC:7F, 7E, 31

当ECU发现发来的UDS报文的SID是当前会话下不支持的服务,则会发送7F这个NRC,比如在Default Session下尝试使用34、36、37服务进行刷包。

此外还有一个7E NRC,表示的是当前会话下Subfunction不支持。比如说10 02服务表示跳转到编程会话(SID:10, Subfunction: 02),但是ECU只支持从扩展会话跳转到编程会话,如果此时位于默认会话下执行10 02服务则会返回7E NRC,表示虽然我支持10服务,但是02子服务在当前会话下不支持。

还有NRC 31,NRC 31常用的用法是请求超出范围,比如说22服务,发送的DID,是ECU不支持的,比如说发送的请求22 01 01 ,因为ECU不支持01 01这个DID,会发送NRC 31的否定响应

刚才顺带也介绍了ECU的三个会话,其实ECU还有不少其他会话,具体和厂家标定有关,但是答题可以分为默认会话和非默认会话。刚上电的时候处于默认会话,然后此时我们可以通过10服务来切换会话,比如10 03切换为编程会话。当ECU处于非默认会话的时候,会有一个计时器S3 time,当这个计时器超时后,会自动从非默认会话切换到默认会话。为了保持非默认会话状态,Tester端需要周期发送3E服务(Tester Present),让ECU一直保持在非默认会话。

2.2.2 会话访问0x27服务

常用的一些服务,比如说22/2E之类的需要和ECU交换数据的,都会影响一些内存里的数据,所以这些服务是一个被保护的服务。这些服务只有在ECU处于解锁状态下才能执行,而ECU上电默认是锁定状态的,Tester端和ECU端进行27解锁服务之后,ECU才能够处于解锁状态。

首先由Tester端给ECU发送请求报文来请求种子,ECU收到这个报文后,回复肯定响应,肯定响应里带有种子数;Tester端收到这个种子数,根据自己安全算法算出来一个K1发送给ECU,ECU也有自己对应的安全算法,他由这个Seed算出来一个密钥K2,当ECU收到这个K1后和自身计算的K2进行比较,如果两者是一致的,那么ECU发送肯定响应给Tester端,告诉Tester端ECU已经解锁。
在这里插入图片描述
一个ECU可以同时拥有多个安全等级,多个安全等级之间可以是相互独立的,也可以是有依赖关系的,比如说要求先解锁安全等级1才能解锁安全等级2。当ECU处于解锁状态的时候Tester端再去请求种子的时候,回复的种子全为0。
在这里插入图片描述
请求种子的响应报文是27+01,肯定响应则是67+01+四字节种子。当Tester端计算得到密钥之后,则会使用27+02+4字节密钥发送给ECU,ECU对比自己的密钥和收到的密钥之后,会给Tester发送67+02,表示认证通过,ECU处于解锁状态。

2.2.3 用于读写的DID的0x22/0x2E服务

22服务用于根据DID读内容,请其格式是”22+两个字节的DID“,肯定格式是"62+DID+所读取的数据"。比如说DID为F1 86的时候代表读取当前诊断会话状态
在这里插入图片描述
具体在22中会使用到的DID以及对应功能在14229-1 2013的附录C中有写,可以去看看这个附录C
在这里插入图片描述
此外22服务的否定报文中带有NRC,其中13是格式不正确,14是读取的数据超过了传输最大值,31是请求的DID不支持,33则表示ECU未解锁。

2E是根据DID写入内容,基本流程都一样

在这里插入图片描述

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

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

相关文章

wx043基于springboot+vue+uniapp的智慧物流小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

实践网络安全:常见威胁与应对策略详解

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在数字化转型的浪潮中,网络安全的重要性已达到前所未有的高度。无论是个人用户、企业,还是政府机构…

深入 Rollup:从入门到精通(三)Rollup CLI命令行实战

准备阶段:初始化项目 初始化项目,这里使用的是pnpm,也可以使用yarn或者npm # npm npm init -y # yarn yarn init -y # pnpm pnpm init安装rollup # npm npm install rollup -D # yarn yarn add rollup -D # pnpm pnpm install rollup -D在…

快速分析LabVIEW主要特征进行判断

在LabVIEW中,快速分析程序特征进行判断是提升开发效率和减少调试时间的重要技巧。本文将介绍如何高效地识别和分析程序的关键特征,从而帮助开发者在编写和优化程序时做出及时的判断,避免不必要的错误。 ​ 数据流和并行性分析 LabVIEW的图形…

【AI】【本地部署】OpenWebUI的升级并移植旧有用户信息

【背景】 OpenWebUI的版本升级频率很高,并会修改旧版本的Bug,不过对于已经在使用的系统,升级后现有用户信息都会丢失,于是研究如何在升级后将现有的用户信息移植到升级后版本。 【准备工作】 OpenWebUI的升级步骤在Docker中有现…

【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续

一、概述 由Li等提出的新的边缘指导插值(New Edge—Di-ected Interpolation,NEDI)算法是一种具有良好边缘保持效果的新算法,它利用低分辨率图像与高分辨率图像的局部协方差问的几何对偶性来对高分辨率图像进行自适应插值。 2001年Xin Li和M.T. Orchard…

DeepSeek-R1:开源Top推理模型的实现细节、使用与复现

核心观点 ● 直接用强化学习就可以让模型获得显著的推理能力,说明并不一定需要SFT才行。 ● 强化学习并不一定需要复杂的奖励模型,使用简单的规则反而取得意想不到的效果。 ● 通过知识蒸馏让小模型一定程度上也有推理能力,甚至在某些场景下…

Unity游戏(Assault空对地打击)开发(1) 创建项目和选择插件

目录 前言 创建项目 插件导入 地形插件 前言 这是游戏开发第一篇,进行开发准备。 创作不易,欢迎支持。 我的编辑器布局是【Tall】,建议调整为该布局,如下。 创建项目 首先创建一个项目,过程略,名字请勿…

汽车网络信息安全-ISO/SAE 21434解析(中)

目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…

K8S极简教程(4小时快速学会)

1. K8S 概览 1.1 K8S 是什么 K8S官网文档:https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。存储编排:自动挂载所选存储系统,包括本地存储。Secret和…

C基础寒假练习(4)

输入带空格的字符串&#xff0c;求单词个数、 #include <stdio.h> // 计算字符串长度的函数 size_t my_strlen(const char *str) {size_t len 0;while (str[len] ! \0) {len;}return len; }int main() {char str[100];printf("请输入一个字符串: ");fgets(…

FaceFusion

文章目录 一、关于 FaceFusion预览 二、安装三、用法 一、关于 FaceFusion FaceFusion 是行业领先的人脸操作平台 github : https://github.com/facefusion/facefusion官方文档&#xff1a;https://docs.facefusion.io/Discord : https://discord.com/invite/facefusion-1141…

AI杂谈(一)

名词解释 LLM 大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一种基于深度学习的自然语言处理模型&#xff0c;旨在理解和生成自然语言文本。这类模型通常由数亿到数千亿个参数构成&#xff0c;能够处理复杂的语言任务&#xff0c;如文本生成、翻…

fps一些内容添加

1 增强输入要点记录 输入 &#xff1a;输入值的类型 布尔 1d&#xff0c;2d&#xff0c;3d 映射&#xff1a;就是确定按键输入键位&#xff0c;输入类型&#xff0c;和一些触发器&#xff08;按键方式&#xff09;修改器&#xff08;对输出值进行修改&#xff09; 基本的&am…

为什么应用程序是特定于操作系统的?[计算机原理]

你把WINDOWS程序复制到MAC上使用&#xff0c;会发现无法运行。你可能会说&#xff0c;MAC是arm处理器&#xff0c;而WINDWOS是X86 处理器。但是在2019年&#xff0c;那时候MAC电脑还全是Intel处理器&#xff0c;在同样的X86芯片上&#xff0c;运行MAC和WINDOWS 程序还是无法互相…

2025苹果CMS v10短剧模板源码

文件不到70kb&#xff0c;加载非常快 无配置&#xff0c;没有详情页&#xff0c;上传就可以直接使用 使用教程&#xff1a;上传到网站template目录并解压、进入网站后台选择模板 注意&#xff1a;默认调用ID为1的数据和扩展分类&#xff0c;建议新建站使用 源码下载&#xf…

​ONES 春节假期服务通知

ONES 春节假期服务通知 灵蛇贺岁&#xff0c;瑞气盈门。感谢大家一直以来对 ONES 的认可与支持&#xff0c;祝您春节快乐&#xff01; 「2025年1月28日 &#xff5e; 2025年2月4日」春节假期期间&#xff0c;我们的值班人员将为您提供如下服务 &#xff1a; 紧急问题 若有紧急问…

python:洛伦兹变换

洛伦兹变换&#xff08;Lorentz transformations&#xff09;是相对论中的一个重要概念&#xff0c;特别是在讨论时空的变换时非常重要。在四维时空的背景下&#xff0c;洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中&#xff0c;洛伦兹变换通常…

LangChain:使用表达式语言优化提示词链

在 LangChain 里&#xff0c;LCEL 即 LangChain Expression Language&#xff08;LangChain 表达式语言&#xff09;&#xff0c;本文为你详细介绍它的定义、作用、优势并举例说明&#xff0c;从简单示例到复杂组合示例&#xff0c;让你快速掌握LCEL表达式语言使用技巧。 定义 …

unity学习20:time相关基础 Time.time 和 Time.deltaTime

目录 1 unity里的几种基本时间 1.1 time 相关测试脚本 1.2 游戏开始到现在所用的时间 Time.time 1.3 时间缩放值 Time.timeScale 1.4 固定时间间隔 Time.fixedDeltaTime 1.5 两次响应时间之间的间隔&#xff1a;Time.deltaTime 1.6 对应测试代码 1.7 需要关注的2个基本…