《UDS协议从入门到精通》系列——图解0x87:链路控制

2024-02-20 13:20

本文主要是介绍《UDS协议从入门到精通》系列——图解0x87:链路控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《UDS协议从入门到精通》系列——图解0x87:链路控制

  • 一、简介
    • 1.1 该服务的功能及用法
    • 1.2 该服务的应用场景
  • 二、数据包格式
    • 2.1 服务请求格式
    • 2.2 服务响应格式
      • 2.2.1 肯定响应
      • 2.2.2 否定响应
  • 三、通信示例

Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)

>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

一、简介

1.1 该服务的功能及用法

  该服务主要用于改变诊断仪(客户端)和目标ECU(服务器)之间的通信速率(数据传输波特率),准确地说是客户端应该在非默认会话状态下发送请求控制通信的波特率,当发生会话转换切回默认会话状态或ECU复位时,通信速率要恢复默认状态。但从当前非默认会话过渡到另一个非默认会话不会影响波特率。

  协议标准将这个通信速率转换流程分成两步,主要目的是为了解决功能寻址下的通信存在的问题(因为功能寻址通信状态下请求以广播的方式发送出去,将同时在多个服务器中进行波特率转换):

  • 第一步:客户端先发送请求询问目标ECU能否支持指定的波特率的转换,如果是功能寻址发送的请求,则在客户端执行第二步之前,要求每个目标ECU都应作出肯定响应(不会抑制肯定响应,spr=0),但此步骤实际上不执行波特率转换。
  • 第二步:客户端发送请求请求目标ECU进行通信速率转换(在第一步得到支持转换的前提下,才会执行这一步)。如果是功能寻址的模式下,建议在执行转换过程中任何目标ECU都不要发送肯定响应(因为假设某个目标ECU完成了波特率转换,其他的才发送肯定响应,那么将导致双方波特率不匹配使得总线上出现错误帧)。

  简单来说,该服务的执行过程就是:在改变传输速率前,先询问目标ECU是否支持某种通信方式,得到支持的响应后,再发请求执行通信速率的变更(总共发送两次请求)

1.2 该服务的应用场景

  最常见的应用场景就是在ECU刷写程序时临时提高传输速率,刷写完毕后再恢复正常,以提高刷写速度。这个服务在之前车上CAN总线通信速率较低的时候有应用场景,现在应用比较少是因为车上的CAN总线速率普遍比较高了,能到500K,刷写程序也够用,所以就不需要改变通信速率了。而且运行过程中改变通信速率很容易出现错误帧。

Tip📌:该服务只适用于部分底层传输协议,例如CAN、Flexray等速率可变的通信方式。

二、数据包格式

2.1 服务请求格式

在这里插入图片描述
  linkControlType(1Byte):表示链路控制的类型,具体有以下几种:

取值含义
0x00ISO保留;
0x01verifyModeTransitionWithFixedParameter:
验证是否可以执行带有指定参数的转换,指定的参数在linkControlModeIdentifier中,
这时这个参数的值是一些预定义的波特率,详情见下个参数中的解释
0x02verifyModeTransitionWithSpecificParameter:
验证是否可以执行带有指定参数的转换,指定的参数在linkControlModeIdentifier中,
这时这个参数的值是一些特定定义的波特率(可简单理解为自定义),详情见下个参数中的解释
0x03transitionMode:表示将波特率转换为前面的验证消息中指定的波特率,即简介中该服务流程第二步时候的请求值
0x04 - 0x3FISO保留
0x40 - 0x5F整车厂商自定义
0x60 - 0x7E系统供应商自定义
0x7FISO保留

  linkControlModeIdentifier(1Byte):在linkControlType为0x01或者0x02时,会携带这个参数,当linkControlType为0x01时,该参数为baudrateIdentifier,是一些预定义的波特率,如下表所示:

取值含义
0x00ISO保留;
0x01PC9600Baud:指定标准PC的波特率为9.6 KBaud
0x02PC19200Baud:指定标准PC的波特率为19.2 KBaud
0x03PC38400Baud:指定标准PC的波特率为38.4 KBaud
0x04PC57600Baud:指定标准PC的波特率为57.6 KBaud
0x05PC115200Baud:指定标准PC的波特率为115.2 KBaud
0x06 - 0x0FISO保留
0x10CAN125000Baud:指定标准CAN的波特率为125 KBaud
0x11CAN250000Baud:指定标准CAN的波特率为250 KBaud
0x12CAN500000Baud:指定标准CAN的波特率为500 KBaud
0x13CAN1000000Baud:指定标准CAN的波特率为1000 KBaud
0x14 - 0xFFISO保留

Tip📌:当linkControlType为0x02时,该参数为linkBaudrateRecord,是特定定义的波特率。

2.2 服务响应格式

2.2.1 肯定响应

在这里插入图片描述
  linkControlType的取值与请求中的linkControlType值保持一致即可;

2.2.2 否定响应

在这里插入图片描述
  可能出现的NRC及其含义如下:

NRC含义
0x12子功能参数不受支持
0x13消息长度错误
0x22请求顺序错误,比如没有询问是否支持请求的通信速率转换就直接发送通信速率转换请求
0x24不满足请求标准/条件(比如请求复位操作时,ECU判断当前车速不满足复位条件)
0x31请求中携带的数据是无效的,这里特指设定的波特率是无效值

三、通信示例

  举两个例子,一是诊断仪请求将通信速率设置为预定义的标准波特率PC115200Baud,二是诊断仪请求将通信速率设置为自定义的波特率150k Bits/s,通信数据传输情况如下所示:

诊断仪 目标ECU 87 01 05 1 诊断仪发送请求: 将通信速率设置为预定义的标准波特率 01表示使用预定义的波特率 05指示了使用上表中的PC115200Baud C7 01 2 目标ECU给出正响应 87 83 3 诊断仪发送请求: 执行转换,83说明spr位为1,抑制正响应 诊断仪发送请求: 将通信速率设置为自定义的波特率 0x0249F0(十六进制) = 150k(十进制) 87 02 02 49 F0 4 C7 02 5 目标ECU给出正响应 87 83 6 诊断仪发送请求: 执行转换,83说明spr位为1,抑制正响应 诊断仪 目标ECU

>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<

这篇关于《UDS协议从入门到精通》系列——图解0x87:链路控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A