记:从零开始讲解UDS(一)——协议概述
0x00 UDS概述
UDS(University Diagnostics System通用诊断系统)是一个在整车系统上经常使用的设备维护协议。其主要遵循的法规为:ISO-15765、ISO-14229
,其主要协议模式脱胎于OBD(On-board diagnostics)诊断协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发经常使用的也是较为复杂的协议层之一。
本篇文章主要介绍了UDS协议相关的协议的宏观介绍。阅读本文之前,您需要了解的一些前置技能有:
技能名称 | 技能熟练度 | 技能教程链接 |
---|---|---|
CAN总线 | 熟悉 | 暂无 |
数据类型 | 熟悉 | 暂无 |
OBD | 了解 | 暂无 |
整车缩写 | 了解 | 暂无 |
0x10 层次类型
UDS主要分为五大协议层次:物理层、链路层、协议基层、协议网络层、协议应用层。此外,还有较为完善的协议时效管理与协议的错误、正确反馈码。
而整个协议的交互分为客户端和服务端,而客户端为诊断仪;服务端就是整车上的ECU。
需要注意的是:错误反馈值严格根据反馈的错误检测流程决定。这种错误检测流程会在后期简述。
为了方便讲解,我暂时将协议基层、协议网络层、协议应用层统称为协议层,具体的详情会在后期简述。
0x11 物理层
物理层主要的实现可以为任何协议的硬件决定,这个是由链路层的选择支持的。例如常用CAN协议进行载体,物理层就可以使用相应的CAN芯片进行构架。如果使用LAN进行载体则也可以使用相应的芯片进行构架。
0x12 链路层
链路层是整个协议的实现基石(从软件工程师的角度来讲),链路层定义了当前的系统基层数据定义与底层驱动的选择和编写。而整个链路层稳定性对于当前网络的实现都是非常重要的地方。其决定了数据接收的正确性与误码率,也决定的反馈码的传输正常,很多上层查询不到的问题都有可能出在这里。
0x13协议层
协议层主要进行以下几大操作:数据接收、数据处理、数据反馈、时间限制。
数据接收
UDS主要依托于硬件协议进行数据构架,本文主要以汽车行业常用的CAN总线协议进行数据构架。CAN帧数的数据是固定的,对于大数据的传输是比较难受的,基于此,UDS具有一定的数据定义:标准帧(Normal Frame)、首帧(First Frame)、流控帧(Constraints Frame)、数据帧(Data Frame)。对于各个数据的定义主要是靠CAN单帧数据中的第一位字节数据中的前四位Bit数据决定。
数据帧定义 | 数据帧标识 | 数据实体示例 |
---|---|---|
标准帧 | 00 | 00 XX XX XX XX XX XX XX |
首帧 | 01 | 1X XX XX XX XX XX XX XX |
流控帧 | 11 | 30 AA BB XX XX XX XX XX |
数据帧 | 10 | 20 XX XX XX XX XX XX XX |
而首帧中,AABB则是相关的时控参数,这个会在之后再讲。
数据处理
数据处理主要是根据当前的接收数据,将其根据应用层相应的指令进行数据处理。
数据反馈
数据反馈则是对于当前的指令数据处理完成之后,将其处理结果反馈给当前的数据接收端,这个数据反馈分为正反馈(正确反馈)和负反馈(错误反馈)。且严格根据时序限制进行数据传输。
时间限制
协议层主要的时间限制为两项,一项为流控帧对于数据帧发送时间的时控参数限制(网络层),另一项为应用系统在线时效和模式时控参数限制(应用层)。前者主要原因为避免当前数据重放错误,后者主要避免当前模式错误定义。
0x20 数据类型
数据主要分为单帧和多帧。而多帧则根据传输流程分为:首帧、多帧、流控帧。
0x21 单帧
单帧则很简单,主要给一些不怎么长的指令集进行传输,优点在于快准狠,一帧即可代表一个指令,对于软件测试模拟也比较方便。但是缺点在于很多场景下无法使用,例如大量数据的传输。其主要的数据格式定义为:
数据定义 | 长度bit | 备注 |
---|---|---|
帧格式定义 | 0~3 | 相应的协议数据定义 |
帧长度 | 4~7 | 后面的有效字节长度 |
数据实体 | 8~63 | 数据根据帧长度定义 |
对于单帧的反馈也是相似的,也就不在阐述了。
0x22 多帧
首帧
首帧的是整个多帧传输流程的起始,一般由客户端先发出,包括了当前指令请求的长度和先前的几个数据。其主要的数据格式定义为:
数据定义 | 长度bit | 备注 |
---|---|---|
帧格式定义 | 0~3 | 相应的协议数据定义 |
帧长度 | 4~15 | 整个多帧的有效数据长度 |
数据实体 | 16~63 | 一部分数据 |
流控帧
流控帧是当前的首帧接收端接收后,判断当前数据没有出错的情况下,发送的一种数据响应,主要包含了当前多帧的数据发送最短间隔时间与流控帧发送次数。其主要的数据格式定义为:
数据定义 | 长度bit | 备注 |
---|---|---|
帧格式定义 | 0~3 | 相应的协议数据定义 |
流控帧状态 | 4~7 | 一般为0,具体详见ISO14229 |
流控帧最短发送次数 | 8~15 | 块大小 |
数据发送最短间隔时间 | 16~24 | 流控帧的时控主要参数 |
填空 | 25~63 | 一般为协定值 |
块大小:当前发送的数据帧是有一定的次序的,而一旦发到一定次序,则数据接收端就会发送一次流控帧,否则发送端就会判断当前多帧发送失败。
数据发送最短间隔时间:当前两帧数据帧的发送间隔时间,单位为毫秒。
数据帧
数据帧是当前的服务端发出流控帧之后,在一定时间内由客户端进行发出。数据帧就是大量帧格式的主要组成部分,也是经常在编程上面会出错的地方。其主要的数据格式定义为:
数据定义 | 长度bit | 备注 |
---|---|---|
帧格式定义 | 0~3 | 相应的协议数据定义 |
数据帧长度 | 4~7 | 与流控帧[815]相关,00xF循环 |
数据实体 | 8~63 | 剩下的全部数据 |
0x30 模式类型
模式是UDS中的一个非常重要的软件抽象,UDS在应用层中抽象了3大模式:普通模式、扩展模式、编程模式。而扩展和编程模式中,又分为普通权限模式和特权模式。模式之间的主要区别如下:
模式名称 | 授权模式 | 具有权限 |
---|---|---|
普通模式 | 普通权限模式 | 无法读取内部数据,执行较为简单的指令(重启、模式切换、会话保持) |
普通模式 | 特权模式 | 无此模式 |
扩展模式 | 普通权限模式 | 可以读取内部的ECU状态值,ECU错误值,厂商SN号等 |
扩展模式 | 特权模式 | 可以读写内部的ECU错误值、厂商SN号等 |
编程模式 | 普通权限模式 | 可以读取一些厂商内部值 |
编程模式 | 特权模式 | 可以读写厂商内部值、可以刷新当前的固件版本 |
而在普通权限模式下,可以使用相应的应用层指令可以将其切换呈特权模式,但是会有自有的密钥算法进行交互,且有很严格的时序和错误次数的要求。这个我会在之后的应用层的详细讲解中进行介绍。
0x40 时效类型
时效类型主要为应用会话过期时效与帧交互过期时效。
0x41应用会话过期时效
应用会话是指当前客户端与服务端的交互中,应用层完成指令的间隔。单位一般为秒,例如五秒。一般主要使用在普通模式与扩展模式的切换和普通模式与编程模式的切换作为时间限制。
整个会话期间,要求客户端一直进行应用层的指令发送,就算仅仅使用CAN帧进行发送也无法算作会话成功。
0x42 帧交互过期时效
此与流控帧的时序控制相关,一般由服务端进行发送,单位为毫秒。主要是在数据帧的发送期间使用,但是需要注意的是,这个时序控制并不是限制最大时间,而是限制最小发送时间。也就是说,如果发送的是10ms的时序控制时间,则客户端的每一个数据帧的最小的发送时间就是10ms,如果在9ms的时候发送了数据帧,则很多时候会服务器端会将其丢弃。附多帧发送的时序图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRMnfXox-1574862939925)(https://www.abcde.engineer/wp-content/uploads/2019/05/2d46212699373f8ce6170de603e2731b.png)]
0x50 反馈类型
反馈类型主要分为:正反馈和负反馈,可能因为翻译或者是我自己的感受,总是觉得这两个称呼很难受。其实正反馈就是正确的指令的编码返回,而负反馈则是当指令的编码错误或者流程原因导致了无法执行指令的情况下,给客户端反馈的错误代码简短的错误记录。他们的格式基本上如下:
0x51 正反馈
反馈帧格式:
帧格式定义 | 位置bit | 备注 |
---|---|---|
正反馈位置 | 2 | 当其为1时就是正反馈,否则就可能不是正反馈 |
客户端指令 | 0~2、3~7 | 一般都是客户端传输过来的指令 |
相应的状态数据 | 8~63 | 根据相应的指令格式进行反馈 |
0x52 负反馈
反馈帧格式:
帧格式定义 | 位置bit | 备注 |
---|---|---|
负反馈位置 | 1~7 | 固定为全一 |
客户端指令 | 8~15 | 固定为客户端指令 |
相应的错误状态 | 16~63 | 根据ISO14229相关的错误状态定义反馈 |
0x60 总结与后记
0x61 总结
这篇文章只是作为UDS的一篇较为简浅的介绍,仅介绍了关于反馈、模式、命令层、数据帧格式相关的一些简单的数据定义。UDS是一个较为庞大完整的系统。所以后续还需要更新,将其填补完整。
0x62 后记
后面还会将其进行扩展,将一些反馈帧、各层的详细描述、模式的相关的切换方式、反馈相关的流程与错误记录。敬请期待~
更多
本文首发自 记:从零开始讲解UDS(一)——协议概述。-我的博客,更多文章可进入我的博客详查。
记:从零开始讲解UDS(一)——协议概述相关推荐
- 记:从零开始讲解UDS(四)——应用层概述(2)错误码(NRC)概述
最近工作繁忙,又在准备自考,博客的更新也就有些延误了.因为疫情原因,自考推迟了一些时间,所有我才能抽出来时间接着写文章-- 0x00 概述 UDS(University Diagnostics Sys ...
- RapidIO协议概述(一)
[SRIO]1.RapidIO协议概述 目录 一.RapidIO背景介绍 二.RapidIO协议概述 2.1 包与控制符号 2.2 包格式 2.3 事务格式与类型 2.4 消息传递 2.5 全局共享存 ...
- 华为1+X网络系统建设与运维(中级)——IPv6协议概述
华为1+X网络系统建设与运维(中级)--IPv6协议概述 该视频主要讲解以下内容: IPv6协议概述 IPv4与IPv6 IPv6的数据包封装 IPv6地址的表示方式 IPv6地址配置 6-i ...
- 【SRIO】1、RapidIO协议概述
目录 一.RapidIO背景介绍 二.RapidIO协议概述 2.1 包与控制符号 2.2 包格式 2.3 事务格式与类型 2.4 消息传递 2.5 全局共享存储器 2.6 流量控制 2.7 串行物理 ...
- 什么是UDS诊断协议
UDS (Unified Diagnostic Services) 是一种用于在汽车电子控制单元(ECU)之间进行诊断和通信的标准协议.它是一种底层协议,主要用于诊断和编程各种汽车系统,例如发动机.变 ...
- 【高速接口-RapidIO】1、RapidIO协议概述
一.RapidIO背景介绍 RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放 ...
- 《趣学CCNA——路由与交换》一2.3 网络层协议概述
本节书摘来自异步社区<趣学CCNA--路由与交换>一书中的第2章,第2.3节,作者 田果 , 彭定学,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.3 网络层 ...
- Jabber 协议 概述
Jabber 协议概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息和 ...
- UART协议概述与实现
UART协议概述(一) 协议描述 关键代码逻辑 写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议. 非常简单的协议,协议细节不需要多说,只说需要注意的点. 空闲位为高位,起始 ...
最新文章
- 第十五届全国大学生智能汽车竞赛创意组比赛进入全国总决赛队伍名单
- mapreduce编程实例(2)-求最大值和最小值
- Git / git clone 、git pull 和 git fetch
- No Architectures to Compile for (ONLY_ACTIVE_ARCH=
- Angular自学笔记(一)ngModule 元数据
- 中国水稻种子行业市场供需与战略研究报告
- python全栈脱产第20天------常用模块---re模块和subprocess模块
- Mxnet入门--第3篇
- windows10安装AWVS
- JUnit4教程+实践
- 万字精选长文,深入解读房地产土地投资测算路径(附下载)
- Hibernate 5 详解!
- grafana-reporter安装及配置
- 《东周列国志》第二十九回 晋惠公大诛群臣 管夷吾病榻论相
- openwrt web升级功能介绍
- ESP32设备驱动-SHT30温度湿度传感器驱动
- umi+@umijs/plugin-qiankun的应用
- 据我爱无人机网两家国外公司合作开展无人机货运服务
- 大数据导论第十三周、十四周课件以及课后作业
- convert函数用法小结---转载