【UDS】ISO14229之0x10服务

文章目录

  • 前言
  • 一、理论描述
    • 1.分类
    • 2.工作模式
  • 二、操作步骤
    • 1.请求
    • 2.回复
  • 总结


->返回总目录<-

前言

`
简称: “Diagnostic Session Control”,诊断会话控制。
功能: 诊断会话控制启用服务器中一组特定的诊断服务/功能,通俗解释就是请求不同的诊断服务需要在不同的会话模式下进行。


一、理论描述

1.分类

UDS定义的session包括:
0x00 ISOSAEReserved(保留)
0x01 defaultSession(默认会话)
0x02 ProgrammingSession(编程会话)
0x03 extendedDiagnosticSession(外部扩展会话)

0x04 safetySystemDiagnosticSession
0x05 – 0x3F ISOSAEReserved(保留)
0x40 – 0x5F vehicleManufacturerSpecific(由整车厂自定义使用)
0x60 – 0x7E systemSupplierSpecific(由ECU供应商自定义使用)
0x7F ISOSAEReserved(保留)

一般常用到的就是上述加粗字体,大家刚开始只需关注这三个会话模式即可。

2.工作模式

那么问题来了?请求诊断服务时如何进行会话间的切换呢?难不成直接选择需要的会话模式?

当然UDS也做了定义,如果未请求其他诊断会话,只要服务器上电,就应该始终处于默认会话。请求会话的切换逻辑如下图:
例如:如果要进入编程会话(Programming),则需要经过默认会话->扩展会话->编程会话【UDS】ISO14229之0x10服务_第1张图片
一般诊断仪启动之后,会给ECU发送10 03,让ECU进extendedDiagnosticSession中,在这个session中可执行的诊断服务就很多。当进入该会话时(非defaultSession),经过一段时间会退出并进入defaultSession,这个时间一般为5000毫秒,即ISO 15765-2定义的S3server定时器
而如果要让ECU一直保持在非defaultSession中,则需要诊断仪每隔固定的时间发送0x3E服务(见该服务篇),ECU才会知道诊断仪有和自己通信的需求,从而保持在非defaultSession中。另一个常用的session是ProgrammingSession,在这个session中可以进行软件升级的一系列诊断服务。

二、操作步骤

1.请求

该服务的SID是0x10,发送帧固定为2个byte,第一个byte是SID,第二个byte的低7bit是sub-function,用于指示ECU将进入的session。例如:发送帧10 03,ECU正响应之后从默认会话进入外部扩展会话。
【UDS】ISO14229之0x10服务_第2张图片

2.回复

ECU回复会在请求的SID+0x40作为回复的第一个字节。这个诊断服务的response分为三部分,第一部分是0x50,作为SID的回复;第二部分是进入的session,作为sub-function的回复;第三部分是4个字节,前两个字节代表P2Server_max, 即ECU在应用层上对诊断命令的响应时间,后两个字节代表P2*Server_max,(这两个时间参数是ISO 15765-2定义,当然这个是在软件代码里写死的,只是请求服务时体现出来的数据)。
【UDS】ISO14229之0x10服务_第3张图片

博主举个例子,如下图:
【UDS】ISO14229之0x10服务_第4张图片
请求帧:02 代表请求的数据字节数10 01,两个字节;
回复帧:06代表ECU回复的数据字节数 ;00 32 01 F4代表上述两个时间参数。

上述只是ECU正常响应,即请求成功。那如果请求失败的,ECU怎么回复呢?
【UDS】ISO14229之0x10服务_第5张图片
根本没有10 05会话服务啦:
在这里插入图片描述
瞎搞,请求诊断会话服务需要发三个字节数据嘛…
在这里插入图片描述
另外一个NRC22表示,请求条件不满足,例如:车速大于5km/h。车辆在行驶过程中你进行诊断服务,闹啥呢!不要命啦…

总结

好啦!关于诊断会话控制服务0x10就叙述到这里啦,欢迎大佬指点哦,与君共勉!

->返回总目录<-

你可能感兴趣的:(UDS诊断从入门到熟练,can,汽车)