一、服务说明
DiagnosticSessionControl(诊断会话控制)服务用于启用服务器中的不同诊断会话。
服务其中应始终只有一个有效诊断会话。服务器上电时应始终启动默认诊断会话。如果未启动其他诊断会话,则只要服务器上电,就应始终进行默认诊断会话。
如果客户端已请求正在进行的诊断会话,则服务器应发送一条肯定响应消息,并按下图所示执行相关活动(该图说明了会话转换时的服务器内部行为)。
无论何时客户端请求一个新的诊断会话,服务器均应在新会话中激活之前发送 0x10 肯定响应消息。如果服务器无法启动请求的新诊断会话,则其应通过 0x10 否定响应消息进行响应,且当前会话应继续进行。非默认诊断会话(programmingSession(编程会话)除外)中的诊断服务和诊断功能集是 defaultSession(默认会话)中提供的功能超集,这意味着切换到任何非默认诊断会话时还可以使用 defaultSession 的诊断功能。
欲启动一个新的诊断会话,服务器可以请求满足特定条件。所有这些条件均为用户自定义条件。这些条件示例如下:
—— 服务器可以仅允许一个带特定客户端标识符(客户端诊断地址)的客户段启动一个新的具体诊断会话(例如,服务器可以要求仅带有客户端标识符 0xF4 的客户端启动 extendedDiagnosticSession(扩展诊断会话))。
—— 可能需要满足特定安全条件(例如,车辆不得移动,或发动机不得运行)
图例
- 默认会话:服务器处于 defaultSession 状态时,若客户端要求启动 defaultSession,则服务器应完全重新初始化 defaultSession。激活的会话期间,服务器应重置所有已激活的 / 初始化的 / 更改过的设置 / 控制。这不包括已编程入非易失性存储器中的长期更改。
- 其他会话:服务器从 defaultSession 转换为 defaultSession 外的其他会话时,服务器应仅停止已在 defaultSession 期间通过 ResponseOnEvent(基于事件响应)(0x86)服务在服务器中进行配置的事件(类似于 stopResponseOnEvent(停止基于事件响应))。
- 相同会话或其他会话:服务器从 defaultSession 外的诊断会话转换为非 defaulSession 的其他会话(包括当前有效诊断会话时),则服务器应(重新)初始化诊断会话,这意味着:
i)应停止通过 0x86 服务在服务器中进行配置的所有事件。
ii)应重新锁定安全性。注意,锁定安全访问应重置依存于待解锁的安全访问的任何有效诊断功能(例如,DID 的有效 iputOutputControl(输入输出控制))。
iii)应维护好新绘画中支持的且不依存于安全访问的所有其他有效诊断功能。例如,从一个 non-defaultSesson 转换为另一个或相同的 non-defaultSession 时,任何已配置的周期性调度器应保持活动状态,且不得影响 CommunicationControl(通信控制)和ControlDTCSetting(控制 DTC 设置)的状态,这意味着,切换会话是若正常通信为禁用,则应保持禁用状态。- 默认会话:服务器从非默认会话的任何诊断会话转换为 defaultSession 时,服务器应停止通过 0x86 服务在服务器中已配置的所有事件,且应启用安全性。应终止 defaultSession 中不支持的任何其他活动的诊断功能。例如,应禁用任何已配置的周期性调度器或输出控制,且应重置 CommunicationControl(通信控制)和 ControlDTCSetting(控制 DTC 设置)服务的状态,这意味着,会话切换为 defaultSession 时,若正常通信为禁用,则应重新启用正常通信。激活的会话期间,服务器应重置所有已激活的 / 初始化的 / 更改过的设置 / 控制。这不包括已编程入非易失性存储器中的长期更改。
下表定义了 defaultSession 和 non-defaultSession 期间允许的服务(定时服务)。任何 non-defaultSession 都需与诊断会话计时器关联,须通过客户端将此计时器保持在活动状态。
服务 | defaultSession(默认会话) | non-defaultSession(非默认会话) |
---|---|---|
DiagnosticSessionControl(诊断会话控制)- 0x10 | x | x |
ECUReset(ECU重置)- 0x11 | x | x |
SecurityAccess(安全访问)- 0x27 | 不适用 | x |
CommunicationControl(通信控制)- 0x28 | 不适用 | x |
TesterPresent(测试仪保活)- 0x3E | x | x |
AccessTimingParameter(访问计时参数)- 0x83 | 不适用 | x |
SecuredDataTransmission(受保护的数据传输)- 0x84 | 不适用 | x |
ControlDTCSetting(控制 DTC 设置)- 0x85 | 不适用 | x |
ResponseOnEvent(基于事件响应)- 0x86 | xa | x |
LinkControl(链路控制)- 0x87 | 不适用 | x |
ReadDataByIdentifier(按标识符读取数据)- 0x22 | xb | x |
ReadMemoryByAddress(按地址读取内存)- 0x23 | xc | x |
readScalingDataByIdentifier(按标识符读取换算数据)- 0x24 | xb | x |
readDataByPeriodicIdentifier(按周期性标识符读取数据)- 0x2A | 不适用 | x |
DynamicallyDefineDataIdentifier(动态定义数据标识符)- 0x2C | xd | x |
WriteDataByIdentifier(按标识符写入数据)- 0x2E | xb | x |
WriteMemoryByAddress(按地址写入内存)- 0x3D | xc | x |
ClearDiagnosticInformation(清除诊断信息)- 0x14 | x | x |
ReadDTCInformation(读取 DTC 信息)- 0x19 | x | x |
InputOutputControlByIdentifier(按标识符输入输出控制)- 0x2F | 不适用 | x |
RoutineControl(例程控制)- 0x31 | xe | x |
RequestDownload(请求下载)- 0x34 | 不适用 | x |
RequestUpload(请求上传)- 0x35 | 不适用 | x |
TransferData(传输数据)- 0x36 | 不适用 | x |
RequestTransferExit(请求传输退出)- 0x37 | 不适用 | X |
RequestFileTransfer(请求文件传输)- 0x38 | 不适用 | X |
实施需视具体情况而定,无论 defaultSesson 期间是否也允许 ResponseOnEvent(基于事件响应)服务。
受保护的数据标识符需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。
受保护的存储区需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。
可在默认和非默认会话中动态定义数据标识符
受保护的例程需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。要求由客户端主动停止的例程也需要非默认会话。
二、请求消息
1. 请求消息定义
字节 | 参数名称 | 字节值 |
---|---|---|
#1 | DiagnosticSessionControl(诊断会话控制)请求SID | 0x10 |
#2 | sub-function = [diagnosticSessionType] | 0x00 - 0xFF |
2. 请求消息子功能参数定义
规定了以下子功能值(未显示 suppressPosRspMsgIndicationBit(抑制肯定响应消息指示位)(第 7 位))。
第 6 至 0 位 | 说明 |
---|---|
0x00 | 保留 |
0x01 | defaultSession(默认会话) 该诊断会话启用服务器中的默认诊断会话,但不支持任何诊断应用程序超市处理规定(例如,保持有效会话时无需 0x3E 服务)。 如果服务器内 non-defaultSession 的任何其他会话已处于活动状态,并再次启动 defaultSession,则应遵循一下实施规则(还需要参考上述服务器诊断会话状态图): 1. 服务器已发送 0x10 肯定响应消息后应停止当前诊断会话,且之后应启动新请求的诊断会话。 2. 如果服务器已发送 0x10 肯定响应,则其应已重新锁定服务器(如果诊断会话期间客户端将其解锁)。 3. 如果服务器发送带 0x10 请求服务标识符的否定响应消息,则应继续进行中会话。 注 如果所使用的数据链路要求进行初始化步骤,则已初始化的服务器应默认启动默认诊断会话,初始化步骤后不要求进行 0x10 服务,其中诊断会话已设置为 defaultSession。 |
0x02 | programmingSession(编程会话) 该诊断会话启用支持服务器内存编程所需的所有诊断服务。 如果服务器在启动软件中运行 ProgrammingSession,则应仅通过由客户端发起的 ECUReset(0x11)服务、会话类型等于 defaultSession 的 0x10 服务或服务器中的会话层超时来保留 ProgrammingSession。 服务器接收会话类型等于 defaultSession 的 0x10 服务时,或会话层超时时(两种情况下都存在有效应用程序软件),如果服务器在启动软件中运行,则服务器应重启应用程序软件。 |
0x03 | extendDiagnosticSession(扩展会话) 该诊断会话可用于启用支持服务器内存中功能(如,“怠速、CO值等”)调整所需的所有诊断服务。该会话还可用于启用与功能调整无特别相关性的诊断服务。 |
0x04 | safetySystemDiagnosticSession(安全系统诊断会话) 该诊断会话可用于启用支持安全系统相关功能所需的所有诊断服务(例如,气囊布置)。 |
0x05 - 0x3F | 保留 |
0x40 - 0x5F | VehicleManufacturerSpecific(由车辆制造商规定) |
0x60 - 0x7E | SystemSupplierSpecific(由系统供应商规定) |
0x7F | 保留 |
三、肯定响应消息
1. 肯定响应消息定义
字节 | 参数名称 | 字节值 |
---|---|---|
#1 | DiagnosticSessionControl(诊断会话控制)请求SID | 0x50 |
#2 | sub-function = [diagnosticSessionType] | 0x00 - 0xFF |
#3 . . #6 | sessionParameterRecord[]#1 = [ data#1 . . data#4 ] | 0x00 - 0xFF . . 0x00 - 0xFF |
2. 肯定响应消息数据参数定义
下表为响应消息数据参数定义
定义 |
---|
diagnosticSessionType(诊断会话类型) 该参数是对来自请求消息的子功能参数第 6 至 0 位的回显。 |
sessionParameterRecord(会话参数记录) 该参数记录包含服务器报告的会话参数值。 |
下表定义了在受支持的数据链路上实施本服务所适用的响应消息数据参数SessionParameterRecord(会话记录参数)的结构
记录中的字节位置 | 参数名称 | 字节值 |
---|---|---|
#1 #2 #3 #4 | sessionParameterRecord[] = [ P2Server_max(high byte) P2Server_max(low byte) P2*Server_max(high byte) P2*Server_max(low byte) ] | 0x00 - 0xFF 0x00 - 0xFF 0x00 - 0xFF 0x00 - 0xFF |
参数 | 说明 | 字节数 | 分辨率 | 最小值 | 最大值 |
---|---|---|---|---|---|
P2Server_max | 已激活的诊断会话期间,服务器支持的默认P2Server_max计时 | 2 | 1ms | 0ms | 65 535ms |
P2*Server_max | 已激活的诊断会话期间,服务器支持的强化(NRC 0x78)P2Server_max | 2 | 10ms | 0ms | 655 350ms |
四、支持的NRC
NRC | 说明 |
---|---|
0x12 | 不受支持的子功能 |
0x13 | 消息长度不正确或格式无效 |
0x22 | 条件不正确 |
五、示例
1. 进入编程会话
抑制肯定响应消息指示位为 “0”。
此示例默认:
P2~Server_max~ = 50ms(0x32)
P2*~Server_max~ = 5000ms(0x01F4 * 10ms(分辨率))
req 10 02
resp 50 02 00 32 01 F4