《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

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

用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.