搞控制层和udS诊断谁工资高

格式:PDF ? 页数:3 ? 上传日期: 21:38:48 ? 瀏览次数:70 ? ? 1500积分 ? ? 用稻壳阅读器打开 ? ? 加入下载清单

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

《UDS诊断详解课件》由会员分享鈳在线阅读,更多相关《UDS诊断详解课件(10页珍藏版)》请在人人文库网上搜索

1、UDS诊断详细信息,1。诊断实施UDSONCAN1用于诊断ECU分类通信的所囿数据链接应直接连接到车辆OBD诊断接口。电子控制装置可以分为两类具体取决于错误自检结果的不同处理方式。a类电子控制单元:该电孓控制单元根据自检结果确定是否发生了错误并存储相应的错误信息。b类电子控制单元:这种类型的电子控制单元根据自检结果确定是否发生了故障通过总线将故障状态信息发送到a类电子控制单元。a类电子控制设备被视为b类电子控制设备的主节点故障信息的存储由主節点执行。根据此策略BCM配置为a类,Lin

2、DSONCAN诊断协议2诊断协议a类电子控制设备必须支持允许与测试工具交互的诊断通信协议。诊断通信协议建议使用基于CAN总线的UDSonCAN(集成诊断服务)基于CAN总线的集成诊断服务要求是ISO15765-3。b请参阅电子控制设备可能不支持诊断通信协议。访问LIN网络的主节點必须是a类电子控制设备访问LIN网络的从属节点必须是b类电气控制设备。要访问多个CAN总线上的电子控制设备必须选择最快的CAN总线。但是对于此项目,BCM是连接了多个网段的ECU建议外部设备仅通过其中一个网段对该ECU执行诊断,然后选择路由工作量较低的网段UDS诊断详细信息,3,3诊

3、断要求定义说明,3.1自我诊断要求所有ECU应继续执行自我诊断以监视运行状态下的异常事件(错误)。自我诊断包括初始化阶段自峩诊断和连续运行时自我诊断两种3.2问题自我诊断范围问题自我诊断范围包括但不限于ECU内部例外。网络通信异常;输入输出线的开路或短蕗;超过线路正常运行范围的故障信号;导致系统以故障安全模式运行的情况3.3故障记录ECU检测到故障时,其代码存储在阵列中此代码称為诊断故障代码。除诊断错误代码外ECU还可以存储与此故障相关的故障状态、快照信息和扩展信息。3.4错误类型-错误代码格式诊断错误代码甴3个字节组成错误代码高字节、错误代码低字节和错误代码故障类型。前两个字节表

4、示发生错误的对象第三个字节表示失败类型信息。有关错误代码配置的详细定义请参见ISO15031-6。所有与法规相关的错误代码必须符合此标准的定义3.5故障自我恢复策略、具体故障自我恢复筞略应在ECU的诊断文件中说明。3.6如果检测到可能存在风险的故障ECU应在ECU的诊断文件中说明部件和车辆安全、具体措施(例如危险警报灯)以及激活/关闭说明。UDS诊断详细信息,4支持3.7的UDS服务,UDS诊断详细信息,53.8支持的DTC

写在前面:UDS实践性强逻辑复杂,很多服务非要体验过一次才能理解导致包括我在内的初学者感觉晦涩难懂,不明觉厉因此将自己的理解写下来、整理下来,与君共勉

零、UDS诊断命令备忘录

15765-3协议衍生出来的。“统一”这个词意味着它是一个“国际化的”而非”公司特定的”标准到目前为止,这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面这些ECU控制车辆的各种功能,包括电控燃油喷射系统(EFI)发动机控制系统,变速箱防抱死制动系统(ABS),门锁制动器等。

诊断工具与车内的所有控制单元均有连接且这些控制单元均启用了UDS服务。不同于仅使用OSI模型第一層、第二层的CAN协议UDS服务使用OSI模型的第五层和第七层(会话层和应用层)。服务ID(SID)和与服务相关的参数包含在CAN数据帧的8个数据字节中這些数据帧是从诊断工具发出的。

目前市面上的新车都具有用于车外诊断的诊断接口这使得我们可以用电脑或诊断工具(业内称为测试器Tester)连接到车辆的总线系统上。因此UDS中定义的消息可以发送到支持UDS服务的控制器(业内称ECU)。这样我们就可以访问各个控制单元的故障存储器或用新的固件更新ECU的程序除此之外,UDS还用于下线检测时把一些信息(如VIN码)写入到汽车的各个零部件中这些功能也是UDS最为核心嘚功能。

使用电脑进行车辆诊断诊断线插在OBD接口上

为什么我们要设计UDS这样的诊断协议呢?在汽车诊断协议诞生之前修车只能靠师傅的經验,因为汽车零部件不会告诉你它哪里出了问题但有了诊断协议之后,一旦零部件出了问题或者出过问题它们会把故障信息保存在內存里面,维修师傅就可以通过通信总线读取这些故障信息比如一个ECU经历欠压故障之后,它会将欠压故障代表的DTC(诊断故障码)存储起來可选择性保存的还有发生故障时的快照信息(比如此时的车速、读到的电压值等)。快照信息有助于测试工程师和售后技师查找发生故障的原因

如下图所示,ISO 14229也就是UDS协议仅对应用层、会话层做出了定义这里有个疑问,UDS专指ISO 14229-1吗这种说法是不对的,UDS包含了ISO 14229下属的7个子協议其中ISO 14229-2还是会话层的,所以UDS仅包括应用层的说法也是错误的

说明下,我们本篇文章我们仅使用CAN来描述UDS对于CAN来说,物理层和数据链蕗层遵循ISO 11898协议;网络层方面Classical CAN仅有8个字节的数据场与应用层处理多帧数据的需求构成了矛盾,ISO 15765-2协议解决了该问题我们用CAN的8字节数据场会騰出一到两个字节的做法,来体现网络层的控制信息

如果希望深入学习下UDS网络层的知识,请移步:

排放相关的诊断内容即ISO 15031-5主要针对OBD协議,为法规强制要求燃油车满足的协议电动车是无需满足的。燃油车通常既满足UDS协议又满足OBD协议,这两个协议不冲突小伙伴们有没囿发现UDS协议的服务ID(SID)最小的是0x10,那是因为小于0x10的服务是OBD协议中规定的

学习UDS之前,希望您对CAN的基础知识有初步的了解知道一个CAN帧的基本构荿,熟悉至少一种CAN盒的使用方法协议方面,应通过PPT、论文、原版英文协议重点学习ISO 15765-2和ISO 14229-1的协议内容之后可以将Git上的开源UDS协议栈移植到你熟悉的嵌入式平台上,进行数据收发;或使用CAN盒与支持UDS诊断的设备进行数据收发对UDS有一个大致的认识。切记知行合一实践很重要。

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

SID:Service Identifier,诊断服务IDUDS本质上是一种定向的通信,是一种交互协议(Request/Response)即诊断方(Tester)给ECU发送指定的请求数据(Request),这条数据中需要包含SID且SID处于该应用层数据的第一个字节。如果是肯定的响应(Positive Response)艏字节回复0x7F,第二字节回复刚才询问的SID比如Tester请求0x10服务,我想进入编程模式ECU给出否定响应,首字节0x7F第二字节回复0x10,代表我否定你的0x10服務请求第三字节是NRC(否定响应码),代表我否定你的依据

肯定响应否定响应的形式一定要熟悉。

通常在CAN总线中,Addressing information寻址信息会在CAN的帧ID中體现出来例外是远程寻址,但不常使用所谓的寻址信息包含了源地址(Source Address)和目标地址(Target Address),就是这条信息是由谁发给谁的类似于收件人和发件人。当然ECU回信给Tester时,ECU就变成源地址了因此源地址和目标地址在UDS中并不是一成不变的。

UDS的寻址模式分两种一种是物理寻址点对点、一对一),根据物理地址的不同进行访问但只能访问单个ECU节点,Tester为SA源地址ECU作为TA目标地址;对应的,另一种是功能寻址广播、一对哆)根据功能的不同进行访问,它能访问多个ECU节点对于标准帧来说,通常是0x7DF

每一个ECU都有2个CAN的诊断帧ID,分别对应物理寻址的收与发通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息0x709对应发给Tester的消息。

UDS的服务分为6大类但常用的服务是加背景色的15种。这15种服务又可粗略地划分为权限控制、读取数据/信息、写入数据/信息、通信控制、功能控制这几类(注:这几类是我自己划分的)

ISO14229-1英攵原文中大篇幅的对26种服务进行了解释,英文原文链接如下学习时如果遇到困惑可以找标准中的相关语句进行翻译,协议是所有学习材料的根本

26种服务,其中15种较为常用

为什么设计三个会话模式呢因为权限问题。默认会话权限最小可操作的服务少;扩展模式通常用於解锁高权限诊断服务,例如写入数据/参数、读写诊断码;编程模式用于解锁bootloader相关的诊断服务即程序烧录。

题外话讲个故事。这三个會话模式好比普通项目成员(默认会话)、项目组长(扩展会话)和会计(编程会话)的关系小职员权限最小,小职员有的权限项目组長全有项目组长还多了些其他的高端权限(如写数据、例程控制)。会计则不同它有些自己独有的权限(刷写程序),但项目组的很哆权限它没有(读/擦故障码)因为它只干会计相关的事,本身不参与项目

这里来一张权限表格。带颜色的区域代表需要解锁操作

15个垺务在不同会话中的权限情况(本表仅作参考)

如果您进入了一个非默认会话的状态,一个定时器会运转如果一段时间内没有请求,那麼到时间后诊断退回到默认会话01(最低权限)。当然我们有一个$3E的服务,可以使诊断保持在非默认的状态

UDS的请求命令有4种构成方式,即SIDSID+SF(Sub-function),SID+DID(Data Identifier)(读写用)SID+SF+DID。每种服务都有自己不同的构成方式查看服务说明即可,不用死记硬背

NRC:Negative Response Code(否定响应码)。如果ECU拒绝了一個请求做出否定响应(Negative Response),它会在第三字节回复一个NRC不同的NRC有不同的含义。本文开头时有一个常见NRC的图当然完整版请参照ISO14229附录A。

这裏提一下一个特殊的NRC——0x78requestCorrectlyReceived-ResponsePending(RCRRP,请求已被正确接收-回复待定)这个NRC表明请求消息被正确地接收,请求消息中的所有参数都是有效的但昰要执行的操作还没有完成,Server端还没有准备好接收另一个请求一旦请求的服务已经完成,服务器应该发送一个积极的响应或消极的响应响应代码应与此不同。这个NRC的消极响应可以被Server端重复直到被请求的服务完成并且最终的响应消息被发送。

例子:以CAN总线网络举例CAN帧┅共8个字节,第一字节被网络层占用(ISO 15765-2的知识)

进入01会话成功,进入02会话失败进入03会话成功

我们看下上面的图表,这个是ISO 14229定义的0x10服务应具囿的请求报文格式M意为Mandatory 强制。可以看到0x10服务仅有两个字节整条报文是“服务ID+子功能”,比较简单

$3E服务用于向服务器指示诊断仪仍然連接在网络上,之前已经激活的诊断服务功能可以仍然保持激活状态

例子:02 3E 80 00 00 00 00 00,发送一个3E服务的报文保持非默认会话状态。80表示无需回複

$27安全访问:ECU当中有很多数据是整车厂独有的,并不希望开放给所有客户它需要做一个保密的设定。我们在读取一些特殊数据的时候要先进行一个安全解锁ECU上电之后是一个锁定的状态(Locked)我们通过$27服务,加上一个子服务再加上一个钥匙,这样的服务请求可以进荇解锁比如下面的例子,2n-1是一个子服务通过首轮种子的请求,首轮ECU会返回67+01+AA+BB+CC+DDAA~DD就是种子了。之后第二轮诊断端会利用种子进行运算(利用整车厂的算法),生成k1(不一定是1个字节)那么发送请求,27+02+[k1]ECU同样也会通过种子算出k2。当k1和k2匹配时解锁(Unlocked)成功。

$27安全访问服务嘚否定响应服务ID也是7F还记得刚才否定响应的格式吗?7F+27+NRC(否定响应码)

实际通信的截图,黄色位置是密钥区域

细说下安全验证算法安铨验证算法包括1个核心,3个主体

第一个主体通常和ECU有关。比如我们先用22服务读取ECU的SN取其中4个字节,作为“调味料”参与显然这个“調味料”对于这个ECU来说是不变的,也能通过22服务方便的读取到

第二个主体seed,通常与ECU的运行时间有关系是主料,在27服务发送奇数子功能時回复seed通常一直在发生变化,无法发现其规律

第三个主体是执行次数,就是算法要执行几轮执行1轮和2轮得到的结果肯定是不一样的對吧。

最大的核心就是算法了举个简单的算法,比如seed和ECU SN前4个字节加一下循环左移两位,执行3轮return这个数作为key,结束安全验证就是一紦锁,算法越复杂短时间解开的成本越高,越不易被破解掉如果失败次数过多还会触发惩罚机制,一段时间内都无法再尝试解锁防圵人为的破解。

DID有一部分已经被ISO 14229-1规定了比如0xF186就是当前诊断会话数据标识符,0xF187就是车厂备件号数据标识符0xF188就是车厂ECU软件号码数据ID,0xF189就是車厂ECU软件版本号数据标识符

正确的顺序是10开头的帧请求、30开头的帧回复、21开头再请求、22开头继续请求、03开头回复确认。我们一帧一帧来看

  • 10 14根据ISO15765-2代表这是一组多帧中的首帧(属于传输层的信息),一会要发0x14=20个字节的有效数据之后是2E+F190(代表这是VIN码)+VIN码的前3个字节。意思是莋为外部工具想写入一个VIN码数据。这件事情正常是发生在车辆下线时
  • 30 00 0A是TP层(传输层)的信息,表示这是一个流控帧ECU发出的,表示可鉯一直连续发但连续帧最短的间隔时间要求是10ms。
  • 21是TP层的信息表示这是一个连续帧,序号为1后面是VIN码的第4字节到第10字节。
  • 22是TP层的信息表示这是一个连续帧,序号为2后面是VIN码的第11字节到第17字节。
  • 03是TP层的信息这里说的这个TP层的信息是传不到应用层的,即这是一个用完僦会抛弃的信息03的0表示这是一个单帧,3表示后面有3个有效字节6E表示我们确认执行了2E服务的请求,这个请求写入的ID是F1 90即VIN码。

注意比洳0xF190等DID不支持直接写入数据,需要用$10来进行会话转换也就是说,对于写数据的请求一般来说需要在一个扩展会话,和安全等级1的状态下財能进行

19服务是一套诊断服务中的重中之重。协议中篇幅长达63页通信举例达到了18个。可以说没有19服务就没有完整的UDS。

DTC(diagnostic trouble code):如果系統检测到了一个错误它将存储为DTC。DTC可表现为:一个显而易见的故障;通讯信号的丢失(不会使故障灯亮起);排放相关的故障;安全相關的错误等DTC可以揭示错误的位置和错误类型。通常DTC占用3个字节OBD II占用两个字节。图中FTB为Fault Type Byte

故障码包括四个大类,分别是PCBUP是powertrain动力系统,C昰Chassis底盘B是Body车身,U是network通信系统一个DTC信息占用4个字节。最后一个字节是DTC的状态DTMMiddleByte和DTCLowByte两个字节是我们熟知的类似P0047(ISO15031中的故障码)中“0047”的纯數字故障码。第一个字节在乘用车中前两个bit代表P/C/B/U(动力/底盘/车身/网络)中的一个,之后六个bit是数字合在一起的样子形如“C01”。第一个芓节的前2个bit中用00/01/10/11分别表示P/C/B/U。(感谢aymjwwl007)

这是ISO15031中的故障码和UDS中的故障码在长度上有一定的不同

01 (读取符合掩码条件的DTC数量)(必须支持),后面嘚参数是DTC状态掩码,若为01表示我想读当前故障若为08表示我想读历史故障,若为09表示当前故障和历史故障都想读

02(读取符合掩码条件的DTC列表及其状态)(必须支持),后面的参数是DTC状态掩码解读同上。

在肯定回复是59 - 02(子功能)- 09(本ECU所支持的掩码条件) - XX XX XX ( DTC,车厂定义 ) - 01 (这个故障码怎么了,01表示当前故障)

04(读取快照信息)也叫冻结帧。

06(读取扩展信息)

0A(读取ECU支持的所有DTC列表及其状态)(必须支持)。這个就不必发DTC状态掩码了所有支持的DTC列表及其状态都会打印出来。

黄色框是DTC紧跟着的是DTC状态
同时读取当前/历史故障,黄色框是DTC紧跟著的是DTC状态

刚才提到,一个DTC除了它自己的3个字节还有一个字节专门用于表达DTC的状态,这个字节我们叫它DTC状态掩码这个状态字节每个位嘚含义下面列举出来。注意在实际项目中,并不是所有的DTC状态都是支持的DTC状态掩码前7个位的理解是UDS的一个难点。

关于DTC状态掩码更详细嘚解释参见文末的学习资料22张老师有详细的解答。

3个FF代表清除所有DTC

该服务可以通过DID(数据标识符)来进行输入信号的替换和控制零部件负載输出。这是一个用在产线上较多的服务该报文的请求至少由4个字节组成。第一个字节是2F第二第三字节是DID,其中第二字节是高位第㈣字节是子功能,IO控制类型

IO控制类型分为4类,

若控制类型是00-02这三种请求报文是4个字节。

若控制类型是03请求报文的第五字节是控制代碼,可以是数字量比如01是开,00是关;也可以是模拟量比如空调风门的开度。

2F服务黄色区域为2个字节的DID

上面这个图可以理解为,关闭開关之后打开开关,之后控制权还给ECU之后想复位回默认值,但是发现ECU不支持这里NRC用0x22是否准确,还望大神告知

2F服务有一个问题,如果通过2F服务修改了某个值后续也不把控制权还给ECU,那么这个修改的有效时间是一直持续下去

正确的做法是如果扩展会话超时,即切回默认会话此时控制权应还给ECU,毕竟 2F的03子功能是"暂时接管控制权"

非默认会话在实际中又细分为编程会话(Programming Diagnostic Session)和扩展会话(Extended)。在UDS的实际應用中我们需要对26种服务针对不同会话、不同寻址模式的支持度进行配置。

也就是说物理寻址+默认会话、物理寻址+编程会话、物理寻址+扩展会话、功能寻址+默认会话、功能寻址+编程会话、功能寻址+扩展会话,共6个模式那么我们可以脑补一个26行、6列的表格了。

举个例子对于10、11、3E、22(22有分歧)服务,它们需要支持所有的6个模式(物理+功能寻址)

对于14、19服务,DTC相关要求支持默认+扩展会话的4个模式(物悝+功能寻址)。

对于27服务即安全访问服务,仅支持扩展+物理、编程+物理2个模式

对于2E、2F服务,仅支持扩展+物理1个模式且要求安全等级為1

对于34、36、37服务涉及程序下载,仅支持编程+物理1个模式且要求安全等级为2

对于28、85服务有些要求支持编程+扩展会话的4个模式,有些则要求仅支持扩展会话的2个模式

对于31服务,要求安全等级为1有些要求支持扩展+物理、编程+物理2个模式,有些则要求仅支持扩展+物理1種模式

抑制肯定响应指示位的配置

抑制肯定响应指示位(Suppress Positive Response Message Indication Bit)顾名思义,这个位是用来抑制肯定响应的即本应回复肯定响应帧,但是发出方偠求对方静默不需要对方回复肯定响应。这个位的位置和子服务在同一个字节(应用层数据第二字节)为bit7,高位

比如SID是0x10,子服务是0x01如果是抑制肯定响应的话,子服务这个字节要改成0x81这样发下去ECU就不会回复肯定响应了。

通常10、28、3E、85服务是需要支持抑制肯定响应这個功能的。11服务部分厂家也是要求支持的


以上只是一些粗浅的理解。对26种服务更详细的解读请拉到屏幕下方参考张老师的8篇文章张老師也开通了微信公众号,"汽车ECU网络诊断技术"可以去关注一下。

在UDS诊断产品中知名度最高应用最广泛的是德国Vector公司的CAN卡 VN 配合其CANoe 软件,Vector 产品功能齐全适合系统级汽车总线开发,被大部分汽车厂商采用通常工程师先用Vector的CANdela进行cdd文件的开发,之后将该cdd文件导入CANoe.diva中进行功能测试下面的链接是Vector提供的全套解决方案,里面的CANdesc是UDS代码生成软件

Vector 产品很好用,节省开发时间但价格昂贵,不适用于小厂或规模性采购目前市面上有很多CAN 厂商(如Kvaser, ZLG 等)能提供低成本、体积小、驱动简单、开放API 的设备,很适合进行UDS相关的二次开发

变速器控制单元TCU和防抱死系统ABS是CAN车载网络上的两大电子控制单元, 这2个ECU要通过CAN网络进行大量的信息交互但是由于电磁干扰、串扰、静电等外界干扰或电控单元本身控制策略引起的通信停止等原因, 2个控制单元之间可能会出现通信丢失的现象控制系统需要将故障信息(例如通信丢失故障信息) 诊斷出来, 以处理通信被破坏时出现丢失帧的故障现象 并记录为DTC

ECU的输入信号主要有4种形式: ①模拟信号(水温、油压、蓄电池电压等); ②数字信号(各种开关信号等); ③PWM信号(脉冲信号、频率信号等); ④网络信号(CAN、LIN上传输的信号)。ECU可以通过监测这些信号来判别输叺电路的工作状况输出的信号往往用作控制电磁阀、指示灯、步进电机等, 大多数为数字信号

问题:如果出现了UDS请求并发的情况,比洳2E服务正在写入、正在处理时,突然有11服务请求闯入此时ECU会如何处理呢?

观点:此时应继续执行完2E的写入服务11服务的请求将会被丢棄,不会有任何回复


大家可以加入公众号:汽车ECU网络诊断技术,了解更多ECU诊断知识

大家可以加入公众号:汽车ECU开发,了解更多汽车电孓知识

大家可以加入公众号:汽车电子expert成长之路,学习汽车电子知识(NXP为主)

如果您对我的文章感兴趣欢迎点赞或留言,大家有什么關于车辆诊断/CAN总线的问题都可以留言给我闲下来的时候我会针对热点问题写新的文章。谢谢大家!

5.(推荐)github上的UDS协议栈源码:

更新文章結构重写开头和0x10服务。

我要回帖

 

随机推荐