Loading

前言:本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$10 DiagnosticSessionControl,其为Tester提供了控制目标ECU进入不同诊断会话状态的能力。

1 服务介绍

$10 DiagnosticSessionControl诊断服务即诊断会话控制服务,Tester可利用该服务控制目标ECU进入不同的诊断会话。不同的诊断会话规定了ECU不同的功能权限,当ECU处于某个诊断会话时,其可以启用属于该诊断会话的特定诊断服务和功能。

关键点:

  1. ECU应始终有且只有一个激活的诊断会话,当ECU上电时,其应处于默认会话(defaultSession)
  2. 当Tester请求ECU进入当前的诊断会话时,ECU应该发送一条肯定响应消息
  3. 当Tester请求ECU进入其他的诊断会话时,若ECU可以进入,那么其应该发送一条肯定响应消息,在进入新的诊断会话之前或之后
  4. 当Tester请求ECU进入其他的诊断会话时,若ECU不能进入,那么其应该发送一条否定响应消息,并继续保持当前的诊断会话
  5. 当ECU进入了非默认会话(non-defaultSession)后,若其在一段时间内没有进行任何诊断操作,那么其应退回到默认会话(这种行为称之为ECU会话超时,通常利用$3E TesterPresent诊断服务保持ECU处于非默认会话)
  6. 非默认会话(不包括编程会话,ProgrammingSession)所提供的诊断服务功能是默认会话的超集,这意味着当ECU进入任何非默认会话时,默认会话的诊断功能也可以使用

1.1 诊断会话跳转图

ISO 14229-1-2020版标准文件给出了一幅ECU诊断会话状态跳转图,如下所示,用于说明当ECU的诊断会话状态发生不同情况的跳转时,其需要遵循的一些必要规范:

  1. 当ECU处于defaultSession且Tester请求ECU再次进入defaultSession时,其应:
    • 完全重新初始化,即重置在上一个defaultSession的所有激活、启动、更改设置或控制,但这不包括写入到NVM中的数据修改
  2. 当ECU从defaultSession进入到non-defaultSession时,其应:
    • 停止在defaultSession期间通过$86 ResponseOnEvent诊断服务在ECU中设置的所有特定事件机制
  3. 当ECU从non-defaultSession进入到另一个non-defaultSession(包括当前的诊断会话)时,其应:
    • 停止在上一个non-defaultSession期间通过$86 ResponseOnEvent诊断服务在ECU中设置的所有特定事件机制
    • 恢复安全访问策略
    • 继续维持新会话中支持的且不依赖于安全访问的所有已激活的诊断功能, 例如,当ECU从一个non-defaultSession进入到另一个或同一个non-defaultSession时,若其在会话切换之前,已通过$28 CommunicationControl诊断服务禁用了正常通信,则其在会话切换之后,也应保持禁用正常通信。
  4. 当ECU从non-defaultSession进入到defaultSession时,其应:
    • 停止在上一个non-defaultSession期间通过$86 ResponseOnEvent诊断服务在ECU中设置的所有特定事件机制
    • 恢复安全访问策略
    • 重置在上一个non-defaultSession的所有激活、启动、更改设置或控制,但这不包括写入到NVM中的数据修改
    • 终止在defaultSession中不支持的任何诊断功能, 例如,当ECU从一个non-defaultSession进入到defaultSession时,若其在会话切换之前,已通过$28 CommunicationControl诊断服务禁用了正常通信,则其在会话切换之后,正常通信应该被重新启用。

1.2 诊断会话支持表

不同的诊断会话模式支持的诊断服务范围不同,很多诊断服务都不支持在defaultSession下使用,下表罗列了不同诊断服务对defaultSession和non-defaultSession的支持情况:

诊断服务defaultSessionnon-defaultSession
$10 DiagnosticSessionControlXX
$11 ECUResetXX
$27 SecurityAccessnot applicableX
$28 CommunicationControlnot applicableX
$3E TesterPresentXX
$29 AuthenticationXX
$84 SecuredDataTransmissionnot applicableX
$85 ControlDTCSettingnot applicableX
$86 ResponseOnEventXaX
$87 LinkControlnot applicableX
$22 ReadDataByIdentifierXbX
$23 ReadMemoryByAddressXcX
$24 ReadScalingDataByIdentifierXbX
$2A ReadDataByPeriodicIdentifiernot applicableX
$2C DynamicallyDefineDataIdentifierXdX
$2E WriteDataByIdentifierXbX
$3D WriteMemoryByAddressXcX
$14 ClearDiagnosticInformationXX
$19 ReadDTCInformationXX
$2F InputOutputControlByIdentifiernot applicableX
$31 RoutineControlXeX
$34 RequestDownloadnot applicableX
$35 RequestUploadnot applicableX
$36 TransferDatanot applicableX
$37 RequestTransferExitnot applicableX
$38 RequestFileTransfernot applicableX
  • Xa:在defaultSession中是否支持$86 ResponseOnEvent诊断服务取决于具体实现
  • Xb:读取或写入与安全相关的DID需要通过$27 SecurityAccess诊断服务过安全访问,因此在这种情况下,需要进入non-defaultSession
  • Xc:读取或写入与安全相关的内存区域需要通过$27 SecurityAccess诊断服务过安全访问,因此在这种情况下,需要进入non-defaultSession
  • Xd:可以在defaultSession和non-defaultSession中动态定义DID
  • Xe:执行与安全相关的RID需要通过$27 SecurityAccess诊断服务过安全访问,因此在这种情况下,需要进入non-defaultSession;需要Tester主动请求停止的RID也需要进入non-defaultSession

2 服务数据格式

2.1 请求数据格式

以下是$10服务的请求数据格式:

字节序参数字节值说明
#Byte1DiagnosticSessionControl SID0x10必选
#Byte2sub-function = [diagnosticSessionType]0x00 – 0xFF必选

2.1.1 diagnosticSessionType

diagnosticSessionType是$10服务的sub-function参数,用于指示ECU进入对应的诊断会话,其具体定义如下表所示:

diagnosticSessionType描述
0x00ISO保留
0x01默认会话(defaultSession)
用于指示ECU进入默认会话,该诊断会话状态不需要$3E TesterPresent服务保持。
0x02编程会话(ProgrammingSession)
用于指示ECU进入编程会话,该诊断会话支持与ECU刷写有关的诊断服务。 若ECU处于编程会话,其可以通过$10 DiagnosticSessionControl、$11 ECUReset和ECU会话超时离开。
0x03拓展诊断会话(extendedDiagnosticSession)
用于指示ECU进入拓展诊断会话,该诊断会话可以支持更多的诊断服务。
0x04安全系统诊断会话(safetySystemDiagnosticSession)
用于指示ECU进入安全系统诊断会话,该诊断会话支持与安全系统相关(如安全气囊展开)的诊断服务。
0x05 – 0x3FISO保留
0x40 – 0x5F车辆制造商自定义
0x60 – 0x7E系统供应商自定义
0x7FISO保留

2.2 肯定响应数据格式

以下是$10服务的肯定响应数据格式:

字节序参数字节值说明
#Byte1DiagnosticSessionControl SID + 0x400x50必选
#Byte2sub-function = [diagnosticSessionType]0x00 – 0xFF必选
#Byte3 – #Byte6sessionParameterRecord[] = [data#1 : data#4]0x00 – 0xFF必选

2.2.1 diagnosticSessionType

diagnosticSessionType是对应$10服务请求报文中的diagnosticSessionType参数回显

2.2.2 sessionParameterRecord

sessionParameterRecord包含了ECU报告的会话时间参数值。当ECU收到诊断服务请求后,若其在指定的时间参数内未给出响应,则Tester可将本次通信视作ECU响应超时。

  • 其数据结构定义如下所示:
字节序参数字节值说明
#Byte1P2Server_max (high byte)0x00 – 0xFF必选
#Byte2P2Server_max (low byte)0x00 – 0xFF必选
#Byte3P2*Server_max (high byte)0x00 – 0xFF必选
#Byte4P2*Server_max (low byte)0x00 – 0xFF必选
  • 其数据内容定义如下所示:
参数描述精度最小值最大值
P2Server_max激活的诊断会话的默认时间参数1ms0ms65535ms
P2*Server_max激活的诊断会话的增强型(NRC 0x78) 时间参数10ms0ms655350ms

2.3 否定响应数据格式

以下是$10服务的否定响应数据格式:

字节序参数字节值说明
#Byte1Negative Response SID0x7F必选
#Byte2DiagnosticSessionControl SID0x10必选
#Byte3NRCsupportedNRC必选

supportedNRC的可选值如下表所示:

supportedNRCNRC define描述
0x12sub-functionNotSupportedECU不支持该诊断请求服务的子功能
0x13incorrectMessageLengthOrInvalidFormat诊断请求指令的长度或格式不对
0x22conditionsNotCorrect执行诊断的条件不满足

3 服务通信示例

3.1 进入编程会话

本例展示了Tester通过$10服务控制ECU进入编程会话的流程,其中,存在以下条件:

  • sub-function bit7: SPR = 0
  • P2Server_max = 50ms(0x0032)
  • P2*Server_max = 5000ms(0x01F4)

3.1.1 请求报文

字节序参数字节值
#Byte1DiagnosticSessionControl SID0x10
#Byte2sub-function = [diagnosticSessionType = ProgrammingSession]0x02

3.1.2 肯定响应报文

字节序参数字节值
#Byte1DiagnosticSessionControl SID + 0x400x50
#Byte2sub-function = [diagnosticSessionType = ProgrammingSession]0x02
#Byte3sessionParameterRecord[P2Server_max (high byte)]0x00
#Byte4sessionParameterRecord[P2Server_max (low byte)]0x32
#Byte5sessionParameterRecord[P2*Server_max (high byte)]0x01
#Byte6sessionParameterRecord[P2*Server_max (low byte)]0xF4

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

👤本站访客数: 👁️本站访问量: