【ISO14229_UDS_0x10服务详解】

2024-02-25 04:59
文章标签 服务 详解 uds 0x10 iso14229

本文主要是介绍【ISO14229_UDS_0x10服务详解】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1、0x10服务
  • 2、请求消息格式
  • 3、肯定应答消息
  • 4、否定应答码(NRC_)
  • 5、0x10服务使用案例说明

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(非易失性存储器)中的数据。

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

服务默认会话非默认会话
0x10xx
0x11xx
0x27not applicablex
0x28not applicablex
0x3Exx
0x83not applicablex
0x84not applicablex
0x85not applicablex
0x86xx
0x87not applicablex
0x22xx
0x23xx
0x24xx
0x2Anot applicablex
0x2Cxx
0x2Exx
0x3Dxx
0x14xx
0x19xx
0x2Fnot applicablex
0x31xx
0x34not applicablex
0x35not applicablex
0x36not applicablex
0x37not applicablex
0x38not applicablex

2、请求消息格式

2.1 请求消息格式定义:

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

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

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

3、肯定应答消息

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

序号
参数名称
约定字节值
#1DiagnosticSessionControl Request SID (SID_服务标识符)M (强制)0x50
#2sub_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)
M0x00 - 0xFF
#2
P2 Server_max (low byte)
M0x00 - 0xFF
#3
P2* Server_max (high byte)
M0x00 - 0xFF
#4
P2* Server_max (low byte)]
M0x00 - 0xFF

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

Parameter
描述
字节数精度最小值最大值
P2Server_max 激活的诊断会话的默认时序参数21ms0ms65535 ms
P2*Server_max 增强型(NRC 0x78) 时序参数210ms0ms655350 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诊断服务功能单元介绍目录

这篇关于【ISO14229_UDS_0x10服务详解】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744464

相关文章

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab