UDS简述_uds中功能寻址-程序员宅基地

技术标签: CAN总线  

作者:autogeek

原文链接:http://www.cnblogs.com/autogeek/p/4458658.html

1. 简单的通信机制

其实诊断通信的机制很简单,可以类比client-server通信方式,即客户端发送request,服务器收到request之后进行处理,然后向客户端发送response。但是,诊断协议有自己的特色,它规定了在request和response的格式,在收到request的时候要做格式的检查。同时由于寻址方式的不同,有无sub-function的支持等,也会影响request和response的处理方式和结果。下面将我就具体情况分析,尽量做到简介明了。

2. Request

2.1 基本格式

归纳起来,诊断的request格式无非以下2种:

<SID> + <Sub-function> + <Parameter>

<SID> + <Parameter>

即有无sub-function的区别。其中,我把DID也归为Parameter

2.2 有sub-function

在介绍有sub-function情况的request之前,首先要了解一下sub-function的定义方法。下图是从ISO14229中截来的,它是对sub-function的定义。

clip_image002

值得注意的是Bit 7,从字面上来看它用来指示是否要抑制Positive Response。的确,它的目的就是这个意思,当Bit 7为1(1 = ‘true’)时,对该request的Positive Response要被抑制,即不发送Positive Response;当Bit7为0(0 = ‘false’)时,对该request的Positive Response不被抑制,正常发送。除了Bit 7,Sub-function有不同的值,具体的值和含义在协议中对每个服务的解释时都会有介绍。

2.3 不带sub-function

根据2.2的说明,不带sub-function的服务,就带parameter。Parameter可以是DID,可以是输入参数,可以是自定义的值,字节数目也是视具体要求而定。一般在协议内都会有表格,当遇到具体问题时,可查表确定。

3. Response

一般来讲,response会在一个服务被request且执行之后发送,成功的话就发positive response,失败的话要发negative response,但是也有例外的时候,比如ECUreset,他要求先发送response,然后再去执行具体的reset,因为如果先reset,那么ECU的通信模块shut down,是无法发送出去response的。一般像这种特殊情况,协议会在描述具体服务时标注出来。

3.1 Positive Response

基本格式:

<SID+0x40> + <Sub-function> + <Parameter>

<SID+0x40> + <Parameter>

其中要注意第一个字节是由SID和0x40的和构成,至于为什么要这样做,只能说协议就是这么规定的,只要是Positive的response,其第一个字节就是要由相应SID的值再加上0x40构成。这里的Parameter项是optional的,具体要看协议规定。

比如session control的service:

Send:10 01(byte1的10是SID,byte2的01是sub-function,且可知Bit 7是false)

Receive:50 01 (byte1是SID+0x40,byte2是sub-funtion)

再举个不带sub-function的例子,比如ReadDataById这个service:

Send:22 F1 86(byte1是SID,byte2和byte3是DID,可视为parameter的一种)

Receive:62 F1 86 01(byte1的62是SID+0x40,byte2和byte3是DID,byte4是读到的数据)

不论是物理寻址还是功能寻址,对于Positive Response来说都没有影响,只需要关注sub-function中的Bit 7 suppressPosRspMsgIndicationBit是0还是1,如果为0即false,那么正常发送即可,如果是1即true,那么就不发送response。如果根本没有subfunction呢,那么什么都不要考虑,肯定是要发送positive response的。

3.2 Negative Response

基本格式:

<0x7F> + <SID> + <NRC>

看起来比较简单,格式比较固定,只要是Negative Response,第一字节就一定是0x7F,第二字节照抄原来的SID,第三个字节是错误响应码,指示具体错误响应的原因,这个NRC可以在协议中查到,并且不同的服务所支持的NRC也有规定。

还是拿session control 这个service来举例:

Send:10 05(现在sun-function变为05了,假定系统不支持这个sub-function)

Receive:7F 10 12(7F即指代错误响应,10为SID,12是NRC,查协议可知其指代sub-function not supported 这个错误)

格式讲完了,来看看在物理寻址和功能寻址情况下,Negative Response分别有什么区别。

首先在物理寻址情况下,只要是Negative Response就应该按照规定格式发送。而在功能寻址情况下,有一点特殊,对于NRC为0x11(service not supported)、0x12(subfunction not supported)、0x31(request out of range)这三种情况,功能寻址是不会发送response的。

4. Request的检查策略

下面用一张流程图来展示收到request之后ECU如何检查他的合法性,并确定是正响应还是负响应,发送还是不发送。这里只是展示最基本的步骤,还有具体的和每个服务相关的条件判断,需要结合具体需求来讨论。

check process

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dongganxiao_maidou/article/details/73863163

智能推荐

Java实现 蓝桥杯VIP 基础练习 字符串对比_蓝桥给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的-程序员宅基地

文章浏览阅读1.1w次。问题描述  给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:  1:两个字符串长度不等。比如 Beijing 和 Hebei  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它..._蓝桥给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的

MySQL存储过程详解(正文)_mysql 存储正文-程序员宅基地

文章浏览阅读963次。我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的_mysql 存储正文

大数据分析工具作业task01:np.random总结及几种常见概率分布图形的绘制_np.random.random产生随机数的概率分布-程序员宅基地

文章浏览阅读1.7k次。numpy.random在生成大型样本时比纯python方式快乐一个数量级写这篇文章的原因是小米菲一直对于numpy中的伪随机数们傻傻分不清楚,再加上我的大数据分析工具老师让我们画出六种分布的图形(包括正态、指数、均匀;0-1、二项、泊松。)所以趁着这个机会恶补一下,顺便学学常用的统计图形怎么画。一个目录1.函数总结2.均匀分布2.1均匀分布np.random.rand()2.2 均匀分布的图像绘制2.3 补充——直方图hist()参数bins变量类型3. 正态分布(高斯分布)3.1 np.rand._np.random.random产生随机数的概率分布

【论文笔记】GeDi:Generative Discriminator Guided Sequence Generation_gedi: generative discriminator guided sequence gen-程序员宅基地

文章浏览阅读1.2k次。GeDi:生成式判别器引导的序列生成;可控文本生成_gedi: generative discriminator guided sequence generation

《Visual Studio Installer》C#上位机程序设计出一个计算器_visual studio做一个计算器-程序员宅基地

文章浏览阅读811次,点赞2次,收藏7次。《Visual Studio Installer》C#上位机程序设计出一个计算器_visual studio做一个计算器

网络入侵检测--Snort软件安装-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏15次。介绍了snort在centos下的安装部署及简单使用_snort软件

随便推点

KubeVirt备份与还原方案【翻译】_kubevirt snapshot-程序员宅基地

文章浏览阅读870次。kubevirt官方给出的的备份还原方案(思路)_kubevirt snapshot

如何自己打印计算机准考证,如何打印计算机准考证-程序员宅基地

文章浏览阅读3.1k次。打印计算机准考证的方法:首先在电脑的百度上输入全国计算机等级考试,找到其官方网站,并点击进入;然后点击在线报名,并输入自己的账号和密码点击登录按钮;最后查看报名信息界面,并点击打印准考证即可。本文操作环境:windows7系统,DELL G3电脑。可以在电脑上打开全国计算机等级考试的官方网站,选择自己所在区域登陆进入以后进行打印。登录进入所属区域的全国计算机等级考试后台以后在页面底部点击打印准考证..._pc端打印准考证

Anatomie âcre les sacs lancel des analystes de validation particulier-程序员宅基地

文章浏览阅读154次。Anatomie âcre les sacs lancel des analystes de validation particulier est l'endroit pourrait contester à copier. Si reconnaissant tous souvent le développement très, Organisation et en plus l'imp..._les sacs en plastique peuvent

[附源码]java毕业设计归元种子销售管理系统_归元java-程序员宅基地

文章浏览阅读203次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。_归元java

Vmware workstation与Hyper-v不兼容解决方法-程序员宅基地

文章浏览阅读2.8k次。在windows server 2012/2012R2 服务器上准备安装和使用Vmware workstation,却提示:“Vmware workstation与hyper-v不兼容”。如下图: 如果想使用workstation,可以删掉hyper-v。但是为了能够同时使用两者,下面就介绍在不删除hyper-v的情况下安装vmware workstation的..._vmware hyper-v不兼容 2012

RAID阵列-程序员宅基地

文章浏览阅读595次,点赞6次,收藏16次。廉价磁盘冗余阵列 (Redundant Arrays of Inexpensive Disks) 或独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。项目RAID 0RAID 1RAID 10RAID 5最少磁盘数2243最大容错磁盘数0n-1n/21理论写入性能n1n/2

推荐文章

热门文章

相关标签