《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多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、