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

智能推荐

[word技巧]把标题、图表题注编号由“一.1”改为"1.1"_word 图一.1-程序员宅基地

文章浏览阅读4.1w次,点赞6次,收藏31次。[word技巧]把标题、图表题注编号由“一.1”改为"1.1"_word 图一.1

python编程语言的缺点-常见的AI编程语言优缺点比较,程序员千万不要入错行!...-程序员宅基地

文章浏览阅读228次。原标题:常见的AI编程语言优缺点比较,程序员千万不要入错行!人工智能编程是一种技术的提升,为不同公司的运营和人们的生活带来了极高的效率和最佳效益。 人工智能为不同的行业带来了另一种智能技术,其潜力的前景仍在增长,期望它能够达到人类的智慧。 这是因为开发人员愿意探索,试验和实施其能力,以满足更多的人力和组织需求。 毕竟,需求是发明之母。 就像在大多数软件应用程序的开发中一样,开发人员可以使用各种语言..._ai python 跟语言无关

产品经理功法修炼(2)之专业技能-程序员宅基地

文章浏览阅读1.2k次,点赞23次,收藏30次。产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负责人,我们必须进行系统性的学习,以深化对产品管理的理解和认知。作为产品管理的组织者、策划者和实施者,产品经理需紧密围绕目标市场,深入开展市场调研、市场定位和市场细分工作。同时,还需全面考虑产品策略、价格策略、渠道策略、促销策略、公关策略以及服务策略等多个方面,以确保营销工作的全面性和有效性。

立创EDA软件专业版 图示入门操作(全)_立创eda专业版-程序员宅基地

文章浏览阅读7.1k次,点赞17次,收藏178次。电子产品设计的基本流程包括项目启动,市场调研,项目规划,项目详细设计,原理图设计,PCB布局、布线,PCB制板、焊接,功能、性能测试等环节,我们在教学过程中,一般按下面的步骤进行电子产品设计:第一步:获取产品需要实现的功能;第二步:确定设计方案,列出需要的元件清单;第三步:根据元件清单,绘制元件符号库;第四步:根据需要设计的功能,调用元件符号库,绘制原理图,用仿真软件进行仿真;第五步:根据实际的元件外形,绘制元件封装库;第六步:根据原理图,调用元件封装库,绘制PCB图;第七步:PCB打样制作。_立创eda专业版

Jsp版本的计算器(九大对象)-程序员宅基地

文章浏览阅读126次。只在本页面生效<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3...._jsp九宫格计算器

什么是JIT即使编译器,有什么作用_jit编译器和编译器-程序员宅基地

文章浏览阅读179次。但在这个过程中可能会存在一些重复代码,而每次执行都要解释器翻译一次,这样就比较消耗资源了,所以就有了JIT即时编译器,它相当于会把字节码再编译一次,而之后再执行该热点代码时,就不需要解释器翻译了,而是能够直接执行机器指令。在Java中,相当于解释器和JIT即时编译器在同时使用,一开始使用解释器,这样程序能够更快地启动,不需要等全部编译成机器指令后再启动,随着程序运行过程中,发现热点代码后,再利用JIT进行即时编译,这样又能够提高执行效率,这样就既考虑到了启动速度,也考虑到了执行速度。_jit编译器和编译器

随便推点

最新版两款不同版SEO超级外链工具PHP源码-程序员宅基地

文章浏览阅读674次。外链工具只是网站推广的辅助工具,一般适用于短时间内无法建设大量外链的新站,新站应坚持每天做一到两次为宜,大约一周左右能看到效果。老站不建议使用此类工具,老站应以优质内容建设为主,辅以交换优质的友情链接和高权重站点发布软文来建立外链方为上策。#已更新增加大量高质量外链(若需要增加修改其他外链请打开txt文件)可根据个人感觉喜好自行任意选择不同版本使用(版V1或版V2)请将zip文件全部解压缩即可访问!源码全部开源,支持上传二级目录访问。源码为自适应端,手机和电脑端都适配。抄笔记 (chaobiji.cn)

2014找工作总结-机会往往留给有准备的人_nginx 机会给有准备的人-程序员宅基地

文章浏览阅读1.8w次。好基友的文章必须转,大神一枚:出处:http://blog.csdn.net/xiajun07061225/article/details/12844801 其实我的求职过程在十一之前就已经结束了,总体讲比较顺利。参加面试的几家公司基本都拿到了offer,分别是阿里巴巴、美团网、创新工场涂鸦移动以及华为。当时也参加了其他公司的面试,比如人人,一面过后收到了二面通知,_nginx 机会给有准备的人

python引用大数据_在Python中妥善使用进度条-程序员宅基地

文章浏览阅读239次。❝本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes❞1 简介在日常运行程序的过程中常常涉及到「循环迭代」过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及「循环迭代」的程序,为其加上「进度条」(progress bar),是帮助我们监测代码执行进度以及处理中间异常错误非常实用的技巧。 ..._python 读取大型数据的运行进度条

分布式与一致性协议之CAP(一)

在开发分布式系统的时候,会遇到一个非常棘手的问题,那就是如何根据业务特点,为系统设计合适的分区容错一致性模型,以实现集群能力。这个问题棘手在当发生分区错误时,应该如何保障系统稳定运行而不影响业务。CAP理论对分布式系统的特性做了高度抽象,比如抽象成一致性、可用性、分区容错性,并对特性间的冲突(也就是CAP不可能三角)做了总结。问题来了:什么是一致性、可用性和分区容错性?它们之间有什么关系?我们又该如何使用CAP理论来思考和设计分区容错一致性模型呢?

【超详解】Python中getattr和getattribute是如何调用的?_python getattribute-程序员宅基地

文章浏览阅读660次。在Python中,getattr和getattribute是两个用于属性访问的重要函数。它们可以在运行时动态地获取对象的属性或自定义属性访问行为。这对于元编程、框架开发和动态编程非常有用。getattr函数可以根据属性名称获取对象的属性或方法。这个函数是Python内置的,通常用于获取对象的属性,但也可以用于方法的调用。方法是一个特殊的魔术方法,可以自定义对象的属性访问行为。通过重写这个方法,您可以拦截属性访问、修改或添加属性,从而实现高度定制的行为。方法还可以用于自定义属性的获取和修改行为。_python getattribute

修复所有 bug 并不能解决所有问题

即使修复软件中所有的 bug,也并不能解决系统设计与实现的问题,系统问题需要同样的热情。