诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)用于使能服务器(ECU)的诊断会话。

什么是诊断会话

  诊断会话关联了一系列的诊断服务或诊断功能。只有当前激活的诊断会话支持的诊断服务才能被响应。ECU通常有两个以上的诊断会话,包括:一个默认会话(Default Session)和若干非默认会话(Non Default Session)。非默认会话由用户自行定义。典型的ECU诊断会话定义如下:

诊断会话描述
默认会话
Default Session
ECU启动后默认进入此会话。只提供基本的诊断服务。
编程会话
Programming Session
ECU更新应用程序或标定数据时进入此会话。支持与程序更新相关的诊断服务。如0x34、0x36、0x37等。
扩展会话
Extended Session
除支持默认会话下的诊断服务和功能外,还支持额外的诊断服务。具体由用户自行定义。

  同一时刻只有一个诊断会话处于激活状态。此时ECU可以响应该诊断会话关联的诊断服务。如果客户端请求了当前诊断会话下不支持的诊断服务,则服务器需要给出NRC为0x7F的否定响应。激活新的诊断会话会关闭上一个诊断会话。
通常在默认会话(Default Session)下,允许如下的诊断服务

服务ID
SID
服务名称
Service Name
0x10诊断会话控制
DiagnosticSessionControl
0x11ECU复位
ECUReset
0x14清除诊断信息(清除DTC)
ClearDiagnosticInformation
0x19读取诊断故障码信息
ReadDTCInformation

  非默认会话下支持的的诊断服务由用户自行定义。通常编程会话(Programming Session)下支持的诊断服务如下:

服务ID
SID
服务名称
Service Name
0x10诊断会话控制
DiagnosticSessionControl
0x11ECU复位
ECUReset
0x27安全访问
SecurityAccess
0x31例程控制
RoutineControl
0x34请求下载
RequestDownload
0x36数据传输
TransferData
0x37请求结束传输
RequestTransferExit
0x3E测试设备在线
TesterPresent

诊断会话控制服务定义

诊断请求

诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)请求报文定义如下:

A_Data byte参数名称
Parameter Name
参数取值
Byte Value
#1诊断会话控制服务请求SID
DiagnosticSessionControl Request SID
0x10
#2诊断会话类型
DiagnosticSessionType
0x00-0xFF

  其中:A_Data_byte #1为该服务的请求SID,值为0x10。
     A_Data_byte #2为诊断会话类型(Diagnostic SessionType),既请求激活的诊断会话。取值如下:
  注意,诊断会话类型(Diagnostic SessionType)仅占A_Data_byte #2的bit 0 ~ bit 6。Bit 7为肯定响应抑制位

诊断会话类型
(Bit 6-0)
描述
0x00ISO/SAE预留
ISOSAEReserved
0x01默认会话
Default Session
0x02编程会话
Programming Session
0x03扩展会话
Externded Session
0x04安全系统诊断会话
Safety System Diagnostic Session
0x05 - 0x3FISO/SAE预留
ISOSAEReserved
0x40 - 0x5F整车厂定义
Vehicle Manufacturer Specific
0x60 - 0x7F零部件供应商定义
System Supplier Specific
0x7FISO/SAE预留
ISOSAEReserved

肯定响应

  如成功进入请求的诊断会话,则服务器给出如下的肯定响应。

A_Data byte参数名称
ParameterName
参数取值
ByteValue
#1诊断会话控制服务肯定响应SID
DiagnosticSessionControl Response SID
0x50
#2诊断会话类型
DiagnosticSessionType
0x00-0xFF
#3P2Server_max高字节0x00-0xFF
#4P2Server_max低字节0x00-0xFF
#5P2*Server_max高字节0x00-0xFF
#6P2*Server_max低字节0x00-0xFF

  其中,A_Data_byte #1为诊断会话控制服务响应SID,值为0x50。(0x10+0x40)
     A_Data_byte #2为请求的诊断会话类型,与诊断请求中的参数相同。
     ADatabyte #3 ~ #6为被激活的诊断会话参数。包括P2Server_max和P2*Server_max 。
 
  P2Server_max为当前诊断会话下从服务器(ECU)接收到诊断请求到开始发送诊断响应报文的最长时间。

参数名称长度(Bytes)精度最小值最大值典型值
P2Server_max21 ms0 ms65535 ms50ms

  P2*Server_max为当前诊断会话下从服务器(ECU)发出NRC为0x78的否定响应到开始发送最终的诊断响应报文的最长时间。

参数名称长度(Bytes)精度最小值最大值典型值
P2*Server_max210 ms0 ms655350 ms5000ms

否定响应

  如不能激活请求的诊断会话,则给出格式如下的否定响应。

A_Data byte参数名称
Parameter Name
参数取值
Byte Value
#1否定响应SID
Negative Response SID
0x7F
#2诊断会话控制服务请求SID
DiagnosticSessionControl Request SID
0x10
#3否定响应码
Negative Response Code
取值见下文

  诊断会话控制服务支持如下的否定响应码

否定响应码
NRC
描述
0x12服务器不支持请求的诊断会话类型参数时,回复此NRC。
0x13诊断请求报文中的数据长度不等于2时,回复此NRC。
0x22请求的诊断会话激活条件不满足时,回复此NRC。

诊断会话间的切换

  ECU上电后首先进入默认会话(Default Session)。如果没有收到诊断会话控制服务(Diagnostic Session Control Service, SID 0x10)激活新的会话,将一直处于默认会话(Default Session)。
在这里插入图片描述

  1. 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求再次激活默认会话,则服务器(ECU)需要重新初始化默认会话。之前在默认会话下的设置或激活的功能将失效。
  2. 在默认会话(Default Session)下,如果服务器(ECU)收到了诊断会话控制服务请求激活一个非默认会话(如扩展会话),则服务器只需停止事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能,其它服务的执行不受影响。
  3. 在非默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活一个非默认会话(包括当前激活的会话),则在上一会话下事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能将停止;之前解锁的安全等级将重新锁定;诊断会话切换前后,两个会话都支持并且不需要解锁安全访问等级的服务将不受影响。上一会话支持但新的会话不支持的服务将终止执行。
  4. 在非默认会话下,如果服务器(ECU)收到了诊断会话控制服务请求激活默认会话,则在非默认会话下事件响应服务(ResponseOnEvent, SID 0x86)请求执行的功能将被停止,解锁的安全等级将被重新锁定,在默认会话下不支持的诊断服务将被终止。举个例子,如果ECU在非默认会话下,诊断仪请求了通信控制服务(CommunicationControl, SID 0x28)停止发送普通的通信报文。则当诊断仪成功请求激活默认会话后,之前停发的报文将恢复发送。

诊断会话定时参数

  在非默认会话下,如果服务器(ECU)在S3Server时间内未收到任何诊断服务,将会结束当前会话,进入默认会话。这种情况被称为诊断会话超时。通常在客户端没有诊断服务请求但又希望服务器(ECU)维持非默认会话时,需要定期发送诊断仪在线服务(Tester Present, SID 0x3E),以避免服务器(ECU)发生诊断会话超时。两次发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间由S3Client来规定。

定数参数描述推荐值超时时间
S3Client为了同时维持多个服务器(ECU)的非默认会话,客户端通过功能寻址发送诊断仪在线服务
(Tester Present, SID 0x3E)的时间间隔。或为了维持一个服务器(ECU)的非默认会话,
客户端通过物理寻址发送诊断请求的最大间隔。
2000 ms4000 ms
S3Server在没有收到诊断服务请求的情况下,服务器(ECU)保持在非默认会话下的时间。NA5000 ms

  可以看出,诊断仪发送诊断仪在线服务(Tester Present, SID 0x3E)的间隔时间最长为4000ms,小于服务器(ECU)的会话超时时间(5000ms)。通常建议2000ms发一次诊断仪在线服务(Tester Present, SID 0x3E)以保证可靠地维持服务器的诊断会话。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐