CAN诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务


一、服务说明

DiagnosticSessionControl(诊断会话控制)服务用于启用服务器中的不同诊断会话。

服务其中应始终只有一个有效诊断会话。服务器上电时应始终启动默认诊断会话。如果未启动其他诊断会话,则只要服务器上电,就应始终进行默认诊断会话。

如果客户端已请求正在进行的诊断会话,则服务器应发送一条肯定响应消息,并按下图所示执行相关活动(该图说明了会话转换时的服务器内部行为)。

无论何时客户端请求一个新的诊断会话,服务器均应在新会话中激活之前发送 0x10 肯定响应消息。如果服务器无法启动请求的新诊断会话,则其应通过 0x10 否定响应消息进行响应,且当前会话应继续进行。非默认诊断会话(programmingSession(编程会话)除外)中的诊断服务和诊断功能集是 defaultSession(默认会话)中提供的功能超集,这意味着切换到任何非默认诊断会话时还可以使用 defaultSession 的诊断功能。

欲启动一个新的诊断会话,服务器可以请求满足特定条件。所有这些条件均为用户自定义条件。这些条件示例如下:
—— 服务器可以仅允许一个带特定客户端标识符(客户端诊断地址)的客户段启动一个新的具体诊断会话(例如,服务器可以要求仅带有客户端标识符 0xF4 的客户端启动 extendedDiagnosticSession(扩展诊断会话))。
—— 可能需要满足特定安全条件(例如,车辆不得移动,或发动机不得运行)

图1 服务诊断会话状态图

图例

  1. 默认会话:服务器处于 defaultSession 状态时,若客户端要求启动 defaultSession,则服务器应完全重新初始化 defaultSession。激活的会话期间,服务器应重置所有已激活的 / 初始化的 / 更改过的设置 / 控制。这不包括已编程入非易失性存储器中的长期更改。
  2. 其他会话:服务器从 defaultSession 转换为 defaultSession 外的其他会话时,服务器应仅停止已在 defaultSession 期间通过 ResponseOnEvent(基于事件响应)(0x86)服务在服务器中进行配置的事件(类似于 stopResponseOnEvent(停止基于事件响应))。
  3. 相同会话或其他会话:服务器从 defaultSession 外的诊断会话转换为非 defaulSession 的其他会话(包括当前有效诊断会话时),则服务器应(重新)初始化诊断会话,这意味着:
    i)应停止通过 0x86 服务在服务器中进行配置的所有事件。
    ii)应重新锁定安全性。注意,锁定安全访问应重置依存于待解锁的安全访问的任何有效诊断功能(例如,DID 的有效 iputOutputControl(输入输出控制))。
    iii)应维护好新绘画中支持的且不依存于安全访问的所有其他有效诊断功能。例如,从一个 non-defaultSesson 转换为另一个或相同的 non-defaultSession 时,任何已配置的周期性调度器应保持活动状态,且不得影响 CommunicationControl(通信控制)和ControlDTCSetting(控制 DTC 设置)的状态,这意味着,切换会话是若正常通信为禁用,则应保持禁用状态。
  4. 默认会话:服务器从非默认会话的任何诊断会话转换为 defaultSession 时,服务器应停止通过 0x86 服务在服务器中已配置的所有事件,且应启用安全性。应终止 defaultSession 中不支持的任何其他活动的诊断功能。例如,应禁用任何已配置的周期性调度器或输出控制,且应重置 CommunicationControl(通信控制)和 ControlDTCSetting(控制 DTC 设置)服务的状态,这意味着,会话切换为 defaultSession 时,若正常通信为禁用,则应重新启用正常通信。激活的会话期间,服务器应重置所有已激活的 / 初始化的 / 更改过的设置 / 控制。这不包括已编程入非易失性存储器中的长期更改。

下表定义了 defaultSession 和 non-defaultSession 期间允许的服务(定时服务)。任何 non-defaultSession 都需与诊断会话计时器关联,须通过客户端将此计时器保持在活动状态。

服务defaultSession(默认会话)non-defaultSession(非默认会话)
DiagnosticSessionControl(诊断会话控制)- 0x10xx
ECUReset(ECU重置)- 0x11xx
SecurityAccess(安全访问)- 0x27不适用x
CommunicationControl(通信控制)- 0x28不适用x
TesterPresent(测试仪保活)- 0x3Exx
AccessTimingParameter(访问计时参数)- 0x83不适用x
SecuredDataTransmission(受保护的数据传输)- 0x84不适用x
ControlDTCSetting(控制 DTC 设置)- 0x85不适用x
ResponseOnEvent(基于事件响应)- 0x86xax
LinkControl(链路控制)- 0x87不适用x
ReadDataByIdentifier(按标识符读取数据)- 0x22xbx
ReadMemoryByAddress(按地址读取内存)- 0x23xcx
readScalingDataByIdentifier(按标识符读取换算数据)- 0x24xbx
readDataByPeriodicIdentifier(按周期性标识符读取数据)- 0x2A不适用x
DynamicallyDefineDataIdentifier(动态定义数据标识符)- 0x2Cxdx
WriteDataByIdentifier(按标识符写入数据)- 0x2Exbx
WriteMemoryByAddress(按地址写入内存)- 0x3Dxcx
ClearDiagnosticInformation(清除诊断信息)- 0x14xx
ReadDTCInformation(读取 DTC 信息)- 0x19xx
InputOutputControlByIdentifier(按标识符输入输出控制)- 0x2F不适用x
RoutineControl(例程控制)- 0x31xex
RequestDownload(请求下载)- 0x34不适用x
RequestUpload(请求上传)- 0x35不适用x
TransferData(传输数据)- 0x36不适用x
RequestTransferExit(请求传输退出)- 0x37不适用X
RequestFileTransfer(请求文件传输)- 0x38不适用X

实施需视具体情况而定,无论 defaultSesson 期间是否也允许 ResponseOnEvent(基于事件响应)服务。
受保护的数据标识符需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。
受保护的存储区需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。
可在默认和非默认会话中动态定义数据标识符
受保护的例程需要 SecurityAccess(安全访问)服务,因此,也需要非默认诊断会话。要求由客户端主动停止的例程也需要非默认会话。

二、请求消息

1. 请求消息定义

字节参数名称字节值
#1DiagnosticSessionControl(诊断会话控制)请求SID0x10
#2sub-function = [diagnosticSessionType]0x00 - 0xFF

2. 请求消息子功能参数定义

规定了以下子功能值(未显示 suppressPosRspMsgIndicationBit(抑制肯定响应消息指示位)(第 7 位))。

第 6 至 0 位说明
0x00保留
0x01defaultSession(默认会话)
该诊断会话启用服务器中的默认诊断会话,但不支持任何诊断应用程序超市处理规定(例如,保持有效会话时无需 0x3E 服务)。

如果服务器内 non-defaultSession 的任何其他会话已处于活动状态,并再次启动 defaultSession,则应遵循一下实施规则(还需要参考上述服务器诊断会话状态图):
1. 服务器已发送 0x10 肯定响应消息后应停止当前诊断会话,且之后应启动新请求的诊断会话。
2. 如果服务器已发送 0x10 肯定响应,则其应已重新锁定服务器(如果诊断会话期间客户端将其解锁)。
3. 如果服务器发送带 0x10 请求服务标识符的否定响应消息,则应继续进行中会话。

如果所使用的数据链路要求进行初始化步骤,则已初始化的服务器应默认启动默认诊断会话,初始化步骤后不要求进行 0x10 服务,其中诊断会话已设置为 defaultSession。
0x02programmingSession(编程会话)
该诊断会话启用支持服务器内存编程所需的所有诊断服务。

如果服务器在启动软件中运行 ProgrammingSession,则应仅通过由客户端发起的 ECUReset(0x11)服务、会话类型等于 defaultSession 的 0x10 服务或服务器中的会话层超时来保留 ProgrammingSession。

服务器接收会话类型等于 defaultSession 的 0x10 服务时,或会话层超时时(两种情况下都存在有效应用程序软件),如果服务器在启动软件中运行,则服务器应重启应用程序软件。
0x03extendDiagnosticSession(扩展会话)
该诊断会话可用于启用支持服务器内存中功能(如,“怠速、CO值等”)调整所需的所有诊断服务。该会话还可用于启用与功能调整无特别相关性的诊断服务。
0x04safetySystemDiagnosticSession(安全系统诊断会话)
该诊断会话可用于启用支持安全系统相关功能所需的所有诊断服务(例如,气囊布置)。
0x05 - 0x3F保留
0x40 - 0x5FVehicleManufacturerSpecific(由车辆制造商规定)
0x60 - 0x7ESystemSupplierSpecific(由系统供应商规定)
0x7F保留

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值
#1DiagnosticSessionControl(诊断会话控制)请求SID0x50
#2sub-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计时21ms0ms65 535ms
P2*Server_max已激活的诊断会话期间,服务器支持的强化(NRC 0x78)P2Server_max210ms0ms655 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
  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值