1、0x10服务

  诊断会话控制服务(0x10服务)可用于启动ECU内部不同的诊断会话。
  在服务端不同诊断会话下,都对应着特定的诊断服务及功能组合。0x10服务启用哪种诊断会话,服务端在该会话下就可以通过数据链路层获取具体的参数值(如时序参数),而在国际标准中也定义了在各诊断会话下对应的服务及功能集合。
  服务器中只允许某一种诊断会话处于运行状态,而且要求在ECU上电时,总是从默认诊断会话开始。在整车制造厂商规定的常规工况及其他工况(如车辆上电状态等),要求ECU能够提供一些诊断功能。
  当客户对ECU发送了一种正处于运行状态的诊断会话,那么要求ECU能够回复肯定应答。ECU内部诊断会话发生跳转时,发生的一些行为状态示意图如下图所示。
图1 诊断会话跳转状态
关键点:
  1)默认会话:当ECU处于默认会话下,客户端发送了请求默认会话指令,要求ECU能够完全重新初始化默认会话。在激活会话期间,ECU能够复位所有的激活/启动/更改的设置及控件,不包括已经编程写入到NVM(非易失性存储器)中的数据。
  2)其它会话:当从默认会话切换到除了默认会话的其它会话时,在默认会话中通过0x86服务(事件响应服务)配置的一些事件都应该被停止。
  3)相同或者其他会话:当ECU从其它会话跳转到另一个其它会话时,ECU能够重新初始化对应的诊断会话,即:
    i) ECU中通过0x86服务(事件响应服务)配置的一些事件都应该被停止;
    ii) 安全等级应被重新设置,这就意味着对于那些先通过安全验证再才能使用的服务(如读取DID服务),则此时被重新上锁;
    iii) 在新的会话下,对于那些不需要通过安全验证的诊断服务功能则维持当前状态即可。例如,在非默认会话下跳转到另外一个非默认会话或者与当前一样的非默认会话时,任何配置的周期性的调度器都应该激活,不会影响到0x28服务(通讯控制服务)及0x85(故障码控制服务)的使用,也就是说在会话处于切换点时正常的通讯模式会被禁用掉;
  4) 默认会话:当ECU从其它非默认会话跳转到默认会话时,通过0x86服务(事件响应服务)配置的一些事件都应该被停止并且安全等级应该被重新设置,在默认会话下不支持的一些诊断服务功能都应该被终止。例如,任意配置周期性调度器或者输出控制都应被禁止,并且0x28服务(通讯控制服务)及0x85(故障码控制服务)应该被重置,会话处于切换点时正常的通讯模式会被禁用掉,切换到默认会话时,正常的通讯会被重新启用。在激活会话期间,ECU能够复位所有的激活/启动/更改的设置及控件,不包括已经编程写入到NVM(非易失性存储器)中的数据。

默认和非默认会话下被允许的服务:

服务 默认会话 非默认会话
0x10 x x
0x11 x x
0x27 not applicable x
0x28 not applicable x
0x3E x x
0x83 not applicable x
0x84 not applicable x
0x85 not applicable x
0x86 x x
0x87 not applicable x
0x22 x x
0x23 x x
0x24 x x
0x2A not applicable x
0x2C x x
0x2E x x
0x3D x x
0x14 x x
0x19 x x
0x2F not applicable x
0x31 x x
0x34 not applicable x
0x35 not applicable x
0x36 not applicable x
0x37 not applicable x
0x38 not applicable x

2、请求消息格式

2.1 请求消息格式定义:

序号 参数名称 约定 字节值
#1 DiagnosticSessionControl Request SID (SID_服务标识符) M (强制) 0x10
#2 sub_function = [diagnosticSessionType] M (强制) 0x00 - 0xFF

2.2 请求消息子函数参数定义:
  诊断会话控制服务通过配置子函数参数即 sub_function = [diagnosticSessionType],以此能够使用一些具体的诊断功能,可能会用到的诊断会话的详细解释见下表:

Bit 6 - 0
描述
约定  
0x00 ISOSAE 保留未使用 M
0x01 默认会话:
  默认诊断会话不支持任何诊断应用超时处理请求 (无需0x3E服务保持会话激活);
  当从其它会话跳转到默认会话下,需要遵循如下规则:
    1) 在服务端发送了诊断会话控制正响应消息时,服务端需要停止当前诊断会话并且启动新的诊断会话;
    2) 如果客户在诊断会话期间上锁了服务端,在服务端发送诊断会话控制正响应消息后,应该可以解锁服务端;
    3) NOTE: 假如使用的数据链路需要初始化,服务应该默认启动默认会话。
M
0x02 刷新会话:
   刷新会话允许启动所有的诊断服务来支持服务端的内存刷新;
  在boot软件中进入刷新会话下,客户可通过0x11服务重启ECU、0x10 01命令或者是通过会话层的超时服务,来重新回到默认会话;
U
0x03 扩展会话:
   扩展会话可以启动所有诊断服务,用来支持对内存中值改写的功能 (如修改怠速值,发动机CO值);
U
0x04 系统安全会话:
   系统安全会话可以启动所有支持与系统安全的功能 (如安全气囊部署);
U
0x05-0x3F ISOSAE 文档定义预留 M
0x40-0x5F OEM预留 U
0x60 -0x7E 供应商预留 U
0x7F ISOSAE 文档定义预留 M

3、肯定应答消息

3.1 肯定应答消息格式定义:

序号
参数名称
约定 字节值
#1 DiagnosticSessionControl Request SID (SID_服务标识符) M (强制) 0x50
#2 sub_function = [diagnosticSessionType] M (强制) 0x00 - 0xFF
#3
.
.
#6
sessionParameterRecord[]# = [
              data#1
              .  
              .
              data#4]
M
.
.
M
0x00 - 0xFF
.
.
0x00 - 0xFF

3.2 肯定应答消息数据参数定义:

Definition
[diagnosticSessionType]
该参数是对请求消息中子函数的0-6位的回显;
sessionParameterRecord
该参数包含了服务端会话的具体参数,此参数的具体内容详见下表;

肯定应答消息中的sessionParameterRecord的数据结构如下表:

Byte pos in record
描述
约定 Byte Value
sessionParameterRecord[] = [
#1
P2 Server_max (high byte)
M 0x00 - 0xFF
#2
P2 Server_max (low byte)
M 0x00 - 0xFF
#3
P2* Server_max (high byte)
M 0x00 - 0xFF
#4
P2* Server_max (low byte)]
M 0x00 - 0xFF

肯定应答消息中的sessionParameterRecord的内容定义如下表:

Parameter
描述
字节数 精度 最小值 最大值
P2Server_max 激活的诊断会话的默认时序参数 2 1ms 0ms 65535 ms
P2*Server_max 增强型(NRC 0x78) 时序参数 2 10ms 0ms 655350 ms

4、否定应答码(NRC_)

本服务实施以下否定应答码(NRC-Negative response code),在各工况下每个应答码的具体含义详见下表:

NRC
描述
0x12 子函数不支持:
当不支持子函数参数时,应发送该否定应答码;
0x13 消息长度不正确或格式错误:
当消息长度发生错误时,应发送该否定应答码;
0x22 条件不正确
诊断会话控制服务请求不满足使用条件时,该否定应答码被返回;

5、0x10服务使用案例说明

  以刷新会话为案例,当0x10服务中的子函数参数最高位 = FALSE 时,表示抑制正响应 (suppressPosRspMsgIndicationBit) 功能未激活),需要服务端有答复消息,在该案例中P2Server_max = 50 ms,P2*Server_max = 5000 ms。
  Client -> Server: 10 02
  Server -> Client: 50 02 00 32 01 F4
在这里插入图片描述
返回UDS诊断服务功能单元介绍目录

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐