CAN诊断学习
汽车CAN总线有动力总成PCAN,底盘控制CCAN,整车控制BCAN,娱乐ECAN,诊断DCAN五种。
CAN诊断,即是对CAN网络中各节点,各CAN总线,网关的故障进行检查与修复。
统一诊断服务(UDS),即ISO-14229标准,是绝大多数汽车厂商使用的诊断服务。
10:诊断会话请求服务
一般的诊断请求的输入格式为:710 02 10 01
帧ID为710,帧数据长度为8,数据长度为02,数据内容为10 01,其中10代表诊断会话发起服务,01表示默认会话(其中10服务可以切换三种模式,01为默认模式,02为编程模式,03为扩展模式)
必须先发起诊断会话,类似于先建立握手。
2E:写入配置请求服务
对某个ECU写入配置项数据,也就是重新标定
常用帧格式:710 07 2E C0 01 01 03 22 FF
数据长度07,C0 01是一个DID数据标识符,代表某ECU节点的多个参数,01 03 22 FF代表ECU里的多个参数应该设定的值
11: 网关复位刷新请求服务
一般如果用2E写入ECU配置值值后, 必须对网关刷新复位, 不然这个值可能不会立马生效.(其中01为硬件复位,02为KeyOfOn复位,03为软件复位)
常用如: 710 02 11 01 (代表向所有的ECU发起硬复位请求)
27: 安全访问认证请求服务
一般如果需要涉及2E写入ECU配置项等服务时, 必须通过网关的安全认证, 不然无权限修改, 你可以理解成, 没成功申请到27安全访问的话, 你的CAN网络权限是只读的, 不可写.
常用如:710 02 27 03 (代表向网关发起安全认证的请求)
这个服务就是用来权限管理的,他的权限进入方式是:
诊断仪 电机控制器ECU
1. 请求种子 --> 计算种子
2. 接收种子 <-- 答复种子
3. 发送密钥 --> 计算密钥 对比密钥
4. 获取权限 <-- 返回权限切换状态
比如你要向ECU写入数据,一般人当然不能随便写,只有专门懂的人才能写入,因此需要权限来保证。
22: 读取配置请求服务
简单点说: 读取某个ECU配置项信息
常用如:710 03 22 C0 01 (代表读取C0 01 这个数据标识符里的多项参数值)
19: 读取故障码请求服务
读取正常CAN网络的故障信息, 一般有ECU节点丢失(比如ECU节点松动脱落或者烧坏了等), 电压过高过低, CAN总线异常(即Bus Off)等...这些故障会记录在一串超长故障码(DTC)列表里.
常用如:710 03 19 02 0C (代表读取整个CAN网络的当前已生效的故障码)
01子服务:通过状态掩码的形式去,查找该状态掩码匹配的故障个数,其实意思就是查找故障个数。这里稍微解释一下状态掩码,在UDS规定里面,每个故障都对应8个状态,每个状态对应一个bit,比如状态0对应bit0,表示当前发生的故障,状态3对应bit3,表示已经确认的故障等等,那么状态掩码的意思就是用一个8bit的数去按位与,如果与的结果非0表示匹配到了,然后故障数就++。
02子服务:通过状态掩码的形式去,查找匹配的故障,以及故障的状态。
04子服务:请求指定故障码(DTC)的快照信息,意思就是说为了找到故障的原因,查找故障发生时刻的一些数据,来分析故障原因。
06子服务:请求指定故障码(DTC)的扩展信息,就是想了解一些该故障的一些其他信息,比如发生的次数、自恢复的次数等,具体数据可自定义。
0A子服务:通过该服务可获取所有支持的故障码和故障状态信息,注意是所有的故障及故障码。
14: 清除故障码请求服务
清除所有ECU的诊断故障码, 包括故障码相关的快照等,
如果CAN网络有故障, 其会源源不断的反馈以上故障,
即使清除后也会立马再发出.
常用如:710 04 14 FF FF FF (代表清除所有ECU上的诊断故障码(包括故障码相关的快照等.))
23/3D:
23是通过地址读数据
3D是通过地址写入数据,一般用的较少。
28服务:
通信控制,包括对发送和接收消息的开关控制。
31服务:
例程控制,比如一些复杂的操作需要用他来实现,目前比较通用的包括烧录时的数据完整性检查、擦除内存等等。
2F服务:
IO控制,主要用于对一些输入输出口的调试控制,目前这一块接触较少,比如一些传感器的开关控制。
34/35/36/37服务:
和数据传输有关的服务,包括请求传输、请求下载、数据传输、数据上传、退出传输等,这些服务和BootLoader相关。
85服务:
用于控制故障的更新,包括开启和关闭故障更新,比如关闭之后不允许故障、故障状态、故障记录等信息的更新。开启则反之。
诊断回应
肯定回应:718 06 50 01 00 32 01 F4 00
在ISO-14229中规定,ECU的诊断响应ID=ECU诊断请求ID+0x008;响应服务的ID=请求服务的ID+0x40
否定服务:718 03 7F 10 22 00 00 00 00
其中7F为否定码 22表示为否定原因条件不符合
其他原因:11服务不支持,12子功能不支持,13报文长度错误,31请求超出范围
例子:
诊断读取故障码:
7E1 03 19 02 FF 00 00 00 00
回应:
7E9 07 59 02 FF C1 21 20 DB
读取故障码19服务有01,02,04,06,0A等子服务,在01子服务中,第四个数据字节代表需要读取哪种状态的DTC,其中FF表示读取所有Bit置1位的DTC
响应服务59中,C1 21 20为DTC的内容,分为高位字节C1,中位字节21,低位字节20,DB表示这个DTC的状态。
在高位字节的8Bit中,又分为三个编码集合,first编码集合:Bit7-Bit6;second:Bit5-Bit4;third:Bit3-Bit0
first编码集合有00动力系统P,01底盘系统C,10车身系统B,11网络系统U
分析DTC信息C1 21 20 DB:
分解为二进制:1100 0001 0010 0001 0010 0000 1101 1011
可知是网络出了问题,即通信故障,与ABS通信丢失。
DB表示的DTC状态可根据状态位描述得到:DTC出现错误,且在当前驾驶循环下被确认
Bit 0 Test Failed DTC最近的一次诊断结果为失败
Bit 1 Test Failed This Operation Cycle 在当前驾驶循环中处于故障状态
Bit 2 pending DTC 在当前或者前一个驾驶循环DTC处于故障状态
Bit 3 Confirmed DTC DTC已经被确认
Bit 4 Test Not Completed Since Last Clear 自上一次清除故障码后测试没有完成
Bit 5 Test Failed Since Last Clear 自上一次清除故障码后测试结果为失败
Bit 6 Test Not Completed This Operation Cycle 在当前驾驶循环中测试没有完成
Bit 7 Warning Indicator requested 与DTC相关的报警指示请求
CAN诊断学习的更多相关文章
- UDS诊断学习笔记
定义介绍: UDS(Unified Diagnostic Service)诊断的诊断服务.诊断协议是面向整车所有ECU(电控单元)的一种诊断通信协议,是诊断服务的规范化标准. UDS本质上是一系列服务 ...
- Oracle DBA面试突击题
一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答: Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以 ...
- oracle Dba之路
如何快速的成为一个合格的 DBA? 2010年11月03日 11:25:00 阅读数:584 原文来自:http://topic.csdn.net/u/20101031/21/A78B2EA1-6F2 ...
- STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
STL笔记(5)条款49:学习破解有关STL的编译器诊断信息 条款49:学习破解有关STL的编译器诊断信息 用一个特定的大小定义一个vector是完全合法的, vector<int> v( ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- (数据科学学习手札146)geopandas中拓扑非法问题的发现、诊断与修复
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,geopandas作为在Pyt ...
- Java 诊断工具 Arthas 教程学习笔记
Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...
- 2018/09/17《涂抹MySQL》【性能优化及诊断】学习笔记(七)
读 第十三章<MySQL的性能优化与诊断> 总结 一说性能优化,整个人都像被打了鸡血一样
- 自动诊断档案库(ADR)学习
(1)ADR概述 Oracle 11g的FDI(Fault Diagnosability Infrastructure)是自动化诊断方面的一个增强,其核心组件为自动诊断库(Automatic Diag ...
随机推荐
- luogu P2093 [国家集训队]JZPFAR
传送门 要维护平面上点的信息,所以可以用KD-tree来维护,然后维护一个大小为\(k\)的堆,每次从根开始遍历,遇到一个点就看能不能作为前\(k\)远的点,也就是看能不能把堆中最近的点给替换掉.如果 ...
- 集群中Session共享解决方案分析
一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...
- Malloc与Free不调用构造函数与析构函数
例子: #include "stdafx.h" #include <new> #include <iostream> using namespace std ...
- Qt Creator 4.9 发布
Qt Creator 4.8中引入了语言服务器协议支持,允许Qt Creator通过利用此标准轻松支持更多编程语言,使IDE和其他编程工具可以轻松地获得通用编程语言支持的交换格式.使用Qt Creat ...
- 如何检测指定的Windows服务是否启动
在项目中,特别是安装项目中我们经常要判断一些服务是否启动(判断SQL Server是否启动最常见),在.net中我们如何判断指定的Windows服务是否启动呢?首先要知道Windows服务的显示名称, ...
- 【LeetCode】堆 heap(共31题)
链接:https://leetcode.com/tag/heap/ [23] Merge k Sorted Lists [215] Kth Largest Element in an Array (无 ...
- Lock的await/singal 和 Object的wait/notify 的区别(转载)
在使用Lock之前,我们都使用Object 的wait和notify实现同步的.举例来说,一个producer和consumer,consumer发现没有东西了,等待,producer生成东西了,唤醒 ...
- Python修炼之路-装饰器、生成器、迭代器
装饰器 本质:是函数,用来装饰其他函数,也就是为其他函数添加附加功能. 使用情景 1.不能修改被装饰的函数的源代码: 2.不能修改被装饰的函数的调用方式. 在这两种条件下,为函数添加附加 ...
- scikit-plot
安装说明 安装Scikit-plot非常简单,直接用命令: pip install scikit-plot 即可完成安装. 仓库地址: https://github.com/reiinakano/sc ...
- Node.js的url模块简介
什么是URL URL是Uniform Location Resource的缩写,翻译为“统一资源定位符”,也就是描述资源位置的固定表示方法.被URL描述的资源可以位于互联网上,也可以位于本地. URL ...