车载测试系列:UDS诊断服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了车载测试系列:UDS诊断服务相关的知识,希望对你有一定的参考价值。
诊断请求格式
UDS的服务包含6大类,共26种。每种服务都有自己独立SID。 SID:Service Identifier,诊断服务ID。
- 按不同服务类型,诊断请求格式有三种:
格式1:[SID] + [Sub-Function]
格式2:[SID] + [DID]
格式3:[SID] + [Sub-Function] + [DID]
- 对应的肯定响应(Positive Response)类型:
格式1:[SID + 40] + [Sub-Function]
格式2:[SID + 40] + [DID]
格式3:[SID + 40] + [Sub-Function] + [DID]
- 否定响应(Negative Response):[0x7F] + [SID] +[NRC]
否定响应类型有一种,NRC(Negative Response Code)为否定响应码。
举例:诊断仪Tester给ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。如果是肯定的响应,首字节回复[SID+0x40],举例子就是请求0x10,响应0x50;请求0x22,响应0x62。如果是否定的响应,首字节回复0x7F,第二字节回复刚才询问的SID。比如Tester请求0x10服务,我想进入编程模式,ECU给出否定响应,首字节0x7F,第二字节回复0x10,代表我否定你的0x10服务请求,第三字节是NRC(否定响应码),代表我否定你的依据。
UDS的寻址模式
CAN总线中Addressing information寻址信息会在CAN的帧ID中体现,例外是远程寻址,但不常使用。
所谓的寻址信息包含了源地址和目标地址,即这条信息是由谁发给谁的,类似于收件人和发件人。当ECU回信给Tester时,ECU就变成源地址了。源地址和目标地址在UDS中并不是一成不变的。
UDS的寻址模式分两种,一种是物理寻址(点对点、一对一),根据物理地址的不同进行访问,但只能访问单个ECU节点,Tester为源地址,ECU作为目标地址;对应的,另一种是功能寻址(广播、一对多),根据功能的不同进行访问,它能访问多个ECU节点,对于标准帧来说,通常是0x7DF。
每一个ECU都有2个CAN的诊断帧ID,分别对应物理寻址的收与发。通常由主机厂确定不同的ECU这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息。
UDS的26种服务
UDS的服务分为6大类,常用的服务是绿色背景色的15种。
10服务分析
- 10服务实现了不同诊断会话之间的切换,不同的诊断会话包含不同的诊断功能。
- 会话类型分六种
- 操作步骤
1、请求:该服务SID是0x10,发送帧固定为2个byte,第一个byte是SID,第二个byte的低7bit是sub-function,用于指示ECU将进入的session。例如:发送帧10 03,ECU响应之后从默认会话进入外部扩展会话。
2、响应:ECU响应中将请求的SID+0x40作为回复的第一个字节。这个诊断服务的response分为三部分,第一部分是0x50,作为SID的回复;第二部分是进入的session,作为sub-function的回复;第三部分是4个字节,前两个字节代表P2Server_max, 即ECU在应用层上对诊断命令的响应时间,后两个字节代表P2*Server_max,(这两个时间参数是ISO 15765-2定义,在软件代码里写死的,只是请求服务时体现出来的数据)。
例如:ECU正常响应,即请求成功。如下图
请求帧:02 代表请求的数据字节数10 01,两个字节;
回复帧:06代表ECU响应的数据字节数 ;00 32 01 F4代表上述两个时间参数。
请求失败-没有10 05会话,ECU响应如下:
NRC12: Sub-Function 没有05子服务
作者: 千里和他的软件测试
以上是关于车载测试系列:UDS诊断服务的主要内容,如果未能解决你的问题,请参考以下文章
UDS(ISO14229-2006) 汉译(No.3术语与定义)
根据hex文件制作UDS统一诊断服务CAN多帧报文-python