《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

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题: