UDS诊断协议

news2024/9/24 3:18:55

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

请求
  • SID(1Byte) + 参数

  • SID(1Byte) + Sub-function(1Byte) + 参数

  • SID + DID(2Bytes)

响应
  • 肯定响应
    • SID+0x40(1Byte) + Sub-function(根据请求是否存在) + 参数
    • SID+0x40(1Byte) + DID + Data
  • 否定响应
    • 0x7F + SID + NRC(1Byte)(否定响应码)
    • 0x7F + SID + DID + NRC(1Byte)(否定响应码)
  • 常见的NRC
    • 11表示服务不支持
    • 12表示Sub-function不支持
    • 13表示请求的长度不正确、格式不正确
    • 31表示请求超出范围
    • 78表示收到诊断请求,等待响应
    • 7E表示当前会话下Sub-function不支持
    • 7F表示当前会话下服务不支持
Sub-function分成了两部分(14229 P39
  • Bit7Suppress postive reponse message indication bit,抑制正响应位
    • 0时,不抑制正响应消息
    • 1时,抑制响应消息,正响应消息不应该被发送
    • 负响应消息不受抑制正响应位影响,会根据协议规定的限制发送
    • 注意NRC为78时,后续也会发送正响应
  • Bit0 - Bit6
    • Sub-function 的参数值
常用服务
  • 10诊断会话控制

    • 01默认会话:权限最小,可操作的服务少
    • 02编程会话:用于解锁bootloader相关的诊断服务
    • 03扩展会话:用于解锁高权限诊断服务,如:读写DTC、写入数据
    • 注:编程会话不能由默认会话转入(在默认会话情况下,不能执行 10 02),只能由扩展会话转入
    • 默认进入默认会话,当ECU处于非默认会话时,一段时间内没有请求会退回到默认会话。可以通过让Tester周期发送3E服务,使ECU保持在非默认会话
  • 11 重置ECUReset

    • 报文格式
      • 请求:11 + Sub-function
      • 响应:51 + Sub-function + powerDownTime
    • 常用子服务
      • 01 硬重启
      • 03 软重启
      • 04 enableRapidPowerShutDown 当使用此子服务时,powerDownTime才会存在
    11 01
    51 01
    
  • 27安全访问

    • ECU上电后是一个锁定的状态,可以通过27服务来解锁
    • 过程:
      • Tester端给ECU发送请求报文来请求种子
      • ECU收到报文后,回复肯定响应(包含种子数)
      • Tester端根据这个种子数,利用自身的安全算法算出一个密钥K1,并发送给ECU
      • ECU同样根据种子数和自身的安全算法计算出一个密钥K2,并将接收到的K1K2相比较。如果一致ECU发送肯定响应给Tester端,已经解锁。
    • 当执行复位、重新上下电或者会话切换后,会由解锁状态跳转到锁定状态
  • 22读数据

    • 报文格式
      • 请求:22 + DID(2Bytes)
      • 响应:62 + DID + Data
    • 支持的NRC
      • 13表示请求消息的长度无效或超过长度
      • 14表示读取的数据已经超过了传输最大值,如请求多个DID,响应的数据太多了
      • 22表示服务器的运行条件不满足执行的操作
      • 31表示当前会话下不支持请求的DID;请求的动态DID尚未分配
      • 33表示如果至少有一个DID是安全的,但是服务器没有解锁
  • 2E写数据

    • 报文格式
      • 请求:2E + DID + Data
      • 响应:6E + DID
    • 支持的NRC
      • 72表示写入失败
  • 19DTC

    • 当系统检测到错误或故障时,会将相应的数值故障码进行存储,数值故障码就是DTC

    • 一般由3个字节组成:

      在这里插入图片描述

      • 字节1

        • 左边两位对应DTC属于哪一个系统,P: 00动力系统、C: 01底盘、B: 10车身和U: 11通信系统
        • 左边3-4位用来区分DTC是标准组织所定义还是OEM自定义
        • 左边5-8位对应车辆系统的区域
      • DTC Status

        在这里插入图片描述

        • Bit4Bit6的初始值为1,其余位的初始值为0,所以默认值0x50
        • Bit01时表示当前结果为故障
        • Bit31时表示存在历史故障
    • 常用子服务(14229 P18814229 P206

      • 01:检索与客户端定义的状态掩码匹配的DTC数量
        • 19 + 01 + DTCStatusMask
        • 59 + 01 + DTCStatusAvailabilityMask + DTCFormatIdentifier + Number(2Byte)
      • 02:检索与客户端定义的状态掩码匹配的DTC列表
        • 19 + 02 + DTCStatusMask
        • 59 + 02 + DTCStatusAvailabilityMask + DTC + statusOfDTC
        • 注:当(DTCStatusMask & statusOfDTC) != 0时,匹配成功
    • 04:读取DTC的快照信息(冻结帧),即发生故障时的一些环境数据,能更好的判断DTC产生的原因以及发生故障的原因
      - 19 + 04 + DTC + DTCSnapshotRecordNumber
      - 59 + 04 + DTC + Status + DTCSnapshotRecordNumber + DTCSnapshotRecordNumberOfIdentifiers +DID + snapshotData +DID + snapshotData
      - 快照信息:例如故障发生时间、胎压、电压、行驶里程数和车速等。在故障发生时,ECU要记录发生故障时的快照信息,便于以后通过查找故障发生时刻的这些数据,分析故障原因
      - DTCSnapshotRecordNumber包含一组快照信息、一组快照信息中可以包含多个DID,每个DID则包含具体的信息,比如:胎压、里程数

      • 06:读取DTC存储时候的一些扩展信息
        • 19 + 06 + DTC + DTCExtDataRecordNumber
        • 59 + 06 + DTC + statusOfDTC + DTCExtDataRecordNumber + DTCExtDataRecord[]
        • 扩展信息:用于记录故障的一些其它信息,比如:故障发生的次数、老化次数、已老化次数等
      • 为什么有了快照数据还要有扩展信息呢?
        • 快照即故障发生时刻存下来的瞬间的环境数据
        • 扩展信息即在故障发生时其它的故障信息,如aging counteraged counterFault Counter以及event id
      • 0A:读取所有DTC列表及状态
        • 19 + 0A
        • 59 + 0A + DTCStatusAvailabilityMask + DTC + statusOfDTC
  • 14清除DTC

    • 报文格式

      • 请求:14 + DTC
      • 响应:54
      14 FF FF FF
      54
      
  • 31 例程控制RoutineControl

    • 客户端通过例程ID(2-Byte)请求启动、停止服务端的例程或者请求例程结果
    • 主要用于:Erasing memoryResetting
    • 报文格式
      • 请求:31 + Sub-function + routineIdentifier(2-Byte)
      • 响应:71 + routineControlType + routineIdentifier(2-Byte) +routineInfo
    • 常用子服务
      • 01 启动例程(startRoutine)
      • 02 停止例程(stopRoutine)
      • 03请求例程结果(requestRoutineResults)
  • 34 请求下载Request Download

    • 报文格式
      • 请求:34 + dataFormatIdentifier + addressAndLengthFormatIdentifier + memoryAddress + memorySize
      • dataFormatIdentifier
        • 00
        • 00以外的值由汽车制造商定义
      • addressAndLengthFormatIdentifier的含义
        • bit 7-4: Length (number of bytes) of the memorySize parameter,指定memorySize有几个字节
        • bit 3-0: Length (number of bytes) of the memoryAddress parameter,指定memoryAddress有几个字节
      • memoryAddress 要写入数据在内存的起始地址
      • memorySize 使用此参数与实际要传输的数据大小进行比较
      • 响应:74 + lengthFormatIdentifier + maxNumberOfBlockLength
      • lengthFormatIdentifier的含义
        • bit 7-4: Length (number of bytes) of the maxNumberOfBlockLength parameter
        • bit 3-0: reserved by document, to be set to 0
      • maxNumberOfBlockLength告知客户端后面的每个TransferData报文总共占多少字节
    34 11 33 60 20 00 00 FF FF
    74 20 00 81
    
  • 36 传输数据Transfer Data

    • 将数据从客户端传输到服务器
    • 报文格式
      • 请求:36 + blockSequenceCounter + Data(3-n)
        • blockSequenceCounter 序号0x01-0xFF,下一个循环0x00-0xFF
      • 响应:76 + blockSequenceCounter + transferResponseParameterRecord
    36 01 xx xx   # 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值
    76 01
    
  • 37 请求传输退出Request Transfer Exit

    • 用于终止客户端和服务端之间的数据传输
    • 报文格式
      • 请求:37
      • 响应:77
    37
    77
    
  • 实际传输过程

    • 依次343637,为一个循环,其中36数据传输可执行多次

    • 37执行结束后,如果还有其它数据传输,则再次执行343637服务

  • 28通信控制(CommunicationControl)

    • 用于开启或关闭服务端某些消息的接收/发送报文
    • 报文格式
      • 请求:28 + sub-function=[controlType] + communicationType
      • communicationType
        • 01: normalCommunicationMessages
        • 02: networkManagementCommunicationMessages
        • 03: networkManagementCommunicationMessages and normalCommunicationMessages
      • 响应:68 + sub-function=[controlType]
    28 03 02
    68 03
    
    • 常用子服务
      • 00enableRxAndTx 启用非诊断报文的接收和发送
      • 03disableRxAndTx 禁止非诊断报文的接收和发送
  • 85控制DTC(ControlDTCSetting)

    • 用于停止和恢复DTC状态位的更新
    • 报文格式
      • 请求:85 + sub-function=[DTCSettingType] + DTCSettingControlOptionRecord
      • 响应:C5 + DTCSettingType
    85 01
    C5 01
    
    • 常用子服务

      • 01 on 恢复更新
      • 02 off 停止更新
    • 报文格式

      • 请求:85 + sub-function=[DTCSettingType] + DTCSettingControlOptionRecord
      • 响应:C5 + DTCSettingType
    85 01
    C5 01
    
    • 常用子服务
      • 01 on 恢复更新
      • 02 off 停止更新

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

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

相关文章

【C++进阶】继承

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C进阶 ⭐代码仓库:C进阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

收集springboot2.6和2.7新功能新特性,以便后续项目中使用

更多功能看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 因为nbcio-boot已经升级到2.7,所以先收集SpringBoot2.6和2.7的新功能,…

数据结构:链表的一些经典的OJ题目

文章目录 写在前面链表OJ调试技巧移除链表元素反转链表链表的中间节点链表中倒数第K个节点链表分割问题 写在前面 本篇为本人学习链表的过程中遇到的典型OJ题,于是整理出来分享思路和便于后续重新学习,每个标题均可跳转至对应习题,大多为Lee…

Autosar通信实战系列02-CAN报文发送周期测试脚本开发及周期不准优化

本文框架 前言1. CAN发送报文的周期测试脚本开发2. 发送报文周期不准的可能原因及优化策略2.1 发送报文的控制逻辑2.2 送报文周期不准的可能原因及优化策略前言 在本系列笔者将结合工作中对通信实战部分的应用经验进一步介绍常用,包括但不限于通信各模块的开发教程,代码逻辑…

nvidia显卡设置 让显卡发挥最大的性能

1、打开官网https://www.nvidia.cn/geforce/drivers/ 查看电脑系统位数和显卡(GPU)的版本 产品系列:Notebooks表示笔记本 2、点击【搜索】-【下载】(game表示游戏驱动)-【下载】 3、双击运行exe文件 4、使用邮箱注册账号时注意要设置正常的年龄 PS设置 1、设置PS使用…

2023 7-29

题目1 删除排序链表重复元素 思路和代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *n…

某ERP系统信息泄露登录后台

漏洞描述 某ERP前台泄露了某api接口,恶意攻击者可通过调用该接口,对用户的账号和密码进行非授权访问,在获取到账号和密码后,恶意攻击者可接管后台。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事…

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 目录 Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 一、简单介绍 二、NuGetForUnity 的下载导入 Unity 三、NuGetForUnity 在 Unity 的…

文件夹加密软件哪个好?文件夹加密软件排行榜

想要加密文件夹,使用专业的文件夹加密软件可以安全有效地加密电脑文件夹。那么,文件夹加密软件哪个好?文件夹加密软件排行榜了解一下。 TOP 1:文件夹加密超级大师 软件亮点:极致安全,5种文件夹加密类型 文…

EMC学习笔记(二十)EMC常用元件简单介绍(二)

EMC常用元件简单介绍(二) 1.瞬态抑制二极管(TVS)2.气体放电管3.半导体放电管 电磁兼容性元件是解决电磁干扰发射和电磁敏感度问题的关键,正确选择和使用这些元件是做好电磁兼容性设计的前提。由于每一种电子元件都有它各自的特性,…

谈 Scratch 作品 —— “木筏生存”

资源下载链接: https://download.csdn.net/download/leyang0910/88090187 资源情况: 角色数量:3,素材数量:54,积木数量:6349,音频数量:9 游戏说明: 这是一款…

擎创技术流 | 深入浅出运维可观测工具(二):eBPF应用中常见问题

上期跟大家聊了下eBPF的发展历史还有特性,点击这里↓↓↓擎创技术流 | 深入浅出运维可观测工具(一):聊聊eBPF的前世今生,一键回看上期精彩内容。 这期主要跟大家分享下eBPF在应用过程中可能出现的问题,希望…

leetcode 122. 买卖股票的最佳时机 II

2023.7.29 把整体利润拆分成每天的利润&#xff0c;将股票值想象成一个折线图&#xff0c;将所有上升的值相加即可。 代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int ans 0;for(int i1; i<prices.size(); i){if(prices[i]-…

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络&#xff0c;它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息&#xff0c;再通过隐藏层进行特征信息的加工和提取&#xff0c;最后通过输出层输出结果。 根据需要神经网络可以…

树及其遍历

文章目录 树树定义专业术语树分类 二叉树分类存储连续存储&#xff08;完全二叉树&#xff09;链式存储一般树的存储森林的存储 线索二叉树哈夫曼树构造步骤 遍历先序遍历中序遍历后续遍历 链式二叉树遍历具体代码已知两种遍历序列求原始二叉树已知先序和中序求后序已知中序和后…

mtk桌面壁纸滚动

路径&#xff1a;packages\apps\Launcher3\src\com\android\launcher3 目前代码中是未打开的状态 packages\apps\Launcher3\src\com\android\launcher3\util\WallpaperOffsetInterpolator.java 涉及到的方法有&#xff1a;&#xff08;重要性从上往下&#xff09; updateOffs…

架构的分类

目录 一、 RUP41 架构 1.1 RUP41架构方法概述 1.2 RUP41架构总体 1.3 RUP41架构方法内容 1.3.1 逻辑视图 1.3.2 开发视图 1.3.3 物理视图 1.3.4 处理视图 1.3.5 场景视图 ​二、 TOGAF9 架构 2.1 TOGAF9 架构概述 2.2 TOGAF9 架构分类 2.2.1 业务架构 2.2.2 数据架…

Vue2 第四节 计算属性,监视属性

1.计算属性 2.监视属性 3.计算属性与监视属性之间的关系 一.计算属性 定义&#xff1a;要用的属性不存在&#xff0c;要通过已有属性计算得来原理&#xff1a;底层借助了Object.defineproperty方法提供的getter和setterget函数什么时候会执行&#xff1a;初次读取的时候会执…

银河麒麟安装solr及配置文件修改

下载并解压 将从官网下载的solr.tar.gz解压到目标文件夹 解压命令&#xff1a;tar -zxvf solr-xxx.tar.gz 修改配置文件 进入目录&#xff1a; /home/solr/solr-8.5.1/bin/init.d 修改solr文件里面部分配置 修改solr服务路径 SOLR_INSTALL_DIR"/opt/solr" 改为…

app稳定性测试-iOS篇

稳定性测试&#xff1a;测试应用程序在长时间运行过程中是否存在内存泄漏、崩溃等问题&#xff0c;以确保应用程序具有较高的稳定性和可靠性。 对于安卓端&#xff0c;官方提供了很好的稳定性测试工具&#xff1a;monkey。 相比较而言&#xff0c;iOS则没有&#xff0c;而且当前…