汽车UDS诊断之通信控制服务(0x28)深度剖析

CommunicationControl就是通信控制服务,因为ISO14229协议是基于CAN的,所以此服务主要是涉及到CAN通信接收和发送相关的控制。

通信控制
服务描述
CommunicationControl客户端向服务端请求打开或关闭某类报文信息的发送和接收功能。(这里的类指的通信类型

目录

1.英文术语

2.缩写表

3.服务描述

3.1.通信控制

3.2.CAN节点的概念

3.3.主节点与它的子总线、子总线节点的概念

4.请求消息定义

4.1.请求消息子功能定义

4.2.请求消息通信类型定义

4.3. 请求消息节点识别号参数定义 

4.4.请求消息数据参数定义

5.肯定响应消息定义

5.1.肯定响应消息数据参数定义 

6.否定响应消息定义

6.1. 否定响应码

7.服务使用示例

7.1.示例#1-禁用网络管理报文的传输

7.1.1.步骤1:请求禁用网络管理报文的传输

7.1.2.操作汇总

7.2.示例#2-主节点控制从节点报文转发 

7.2.1.步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式

7.2.2.步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式 

7.2.3.操作汇总



1.英文术语

英文术语解释
CommunicationControl  通信控制
CommunicationControl Request SID 

通信控制请求SID

ISO14229定义此值为0x28

sub-function子功能
controlType控制类型
communicationType通信类型
nodeIdentificationNumber(high byte)节点识别号(高字节)
nodeIdentificationNumber(low byte)节点识别号(低字节)
CommunicationControl Response SID 通信控制响应SID
ISO14229定义此值为(0x28+0x40)

Sub-bus segment

子总线段(指在主节点在子总线上,与某子总线节点进行的通信

2.缩写表

缩写解释
SID服务标识符
Cvt

约定值

M 强制的

C 有条件的

U 用户选项

NRC否定响应码

3.服务描述

3.1.通信控制

通信控制服务就是客户端向服务端请求打开或关闭某类或多类报文信息的发送和接收功能,该诊断服务对诊断报文没有控制作用,此服务起作用的是应用程序报文网络管理报文

通信控制服务主要出现的场合:

  • 在进行程序刷写的时候,为了降低总线负载,就需要将某些控制器的通信报文关闭。
  • 我们测试的时候会用电脑去发模拟状态信号去代替某个控制器的发送信号,这时就需要将此控制器通信切断。

通信控制服务是改变ECU功能的服务,要设置在非默认会话模式下执行,当ECU重新回到默认会话模式时,该服务功能就会恢复到默认,即各通信报文都恢复正常。 

3.2.CAN节点的概念

CAN节点指能够挂接在CAN总线上的单元,此单元也可以说就是该总线上挂着的ECU,并能通过CAN总线实现各个节点间的通信,以实现复杂的控制过程。

如下图:
这张图有两条CAN总线,一条CAN总线是500kbps的通信速率,另一条CAN总线是250kbps的通信速率。在这两条CAN总线上接着很多的控制单元,也就是挂着的ECU,这些ECU可能只连接了一路CAN,也有些接了两路CAN。

而我们所说的CAN节点是对于某一路CAN总线而言的,譬如:
下面第一个连接两路CAN的ECU,此ECU对于500kbps的CAN总线被CAN网络工程师命名)叫节点1,而此ECU对于250kbps的CAN总线被CAN网络工程师命名)又被叫节点2

以上就是CAN节点的概念,应该挺好理解的 。

3.3.主节点与它的子总线、子总线节点的概念

        如果某控制器涉及到CAN信号转发,那么这个控制器就可以看作一个主节点,而这个主节点涉及到的CAN信号转发,这些CAN信号转发的来源是另一路CAN总线,这一路CAN总线就被称为这个主节点的子总线,而涉及到这一路中某些电控单元的CAN信号转发,这些电控单元被称为这个主节点的子总线节点子节点

4.请求消息定义

请求消息定义
A_Data字节参数名称Cvt字节值助记符
#1通信控制请求SIDM0x28CC
#2子功能 = [控制类型]M0x00 - 0xFFLEV_CTRLTP
#3通信类型M0x00 - 0xFFCTP
#4节点识别号(高字节){\color{Red} C^{a}}0x00 - 0xFFNIN
#5节点识别号(低字节){\color{Red} C^{a}}0x00 - 0xFFNIN
条件a:当子功能 =[控制类型]0x040x05,此参数才存在。

4.1.请求消息子功能定义

该服务使用子功能参数选择,也就是控制类型此字节的bit7表示抑制肯定响应位,下表并没有介绍此位)。

下面标黄的有控制类型比较常用

请求消息子功能定义
位6-0描述Cvt助记符
0x00

启用Rx和Tx

此值表示对于指定的通信类型启用消息的接收和传输

(在下面有通信类型的介绍,也就是我们提到的某类报文信息)

UERXTX
0x01

启用Rx和禁用Tx

此值表示对于指定的通信类型,应启用消息的接收并禁用其传输

UERXDTX
0x02

禁用Rx并启用Tx

此值表示对于指定的通信类型,应启用消息的传输并禁用其接收

UDRXETX
0x03

禁用Rx和Tx

此值表示对于指定的通信类型,应禁用消息的接收和传输

UDRXTX
0x04

启用Rx并使用增强的地址信息禁用Tx
此参数值定义了总线的主节点(为什么称为主节点?是因为他对于总线来说这个节点自己又带了一路子总线,而这个子总线上又挂了不少的ECU,这些ECU就被我们称为子总线节点或从节点)应将其相关的子总线节点所对应的子总线的通信(被称为Sub-bus segment,即子总线段)切换到仅支持诊断的调度模式(这一部分的对象还是对主节点而言,就是主节点控制从节点信号转发功能的控制)

1、仅支持诊断的调度模式可以理解为就是只激活诊断功能,对我们来说诊断功能是默认开启的,而其他跟诊断无关的功能的都可以禁止,说白了就是直接禁用除诊断报文以外的其他通信,对于主节点来说,也可以直接理解为诊断报文可以到达子总线节点,其他的报文都转不过去。

2、增强的地址信息其实就是为子总线节点编的代号,就是上面说的节点识别号(两个字节)

子功能过程:通过向主节点请求此子功能服务(带有节点识别号)后,这个请求会被主节点响应,这时候主节点就可以将与对应通信切换到仅支持诊断的模式,主节点可以接收子总线节点的报文和总线节点发来的通信,但是不用去转发相关子节点的报文,即从总线通过主节点转发给子总线节点的报文和子总线节点通过主节点向总线发送的报文。

注意:在此子功能下,请求即使带了通信类型,并不对这个指定的通信类型进行控制,上面仅支持诊断的调度模式就已经指定了只有诊断报文才可正常转发。

以上属于个人理解,如果大家有其他不同看法,欢迎一起讨论!

UERXDTXWEAI
0x05

使用增强的寻址信息启用Rx和Tx

此参数值定义了总线的主节点应将其相关的子总线段切换到应用程序调度模式

注:这就是0x04子功能的恢复过程,将关闭的其他功能开启,重新回到功能齐全的状态下,只要看懂上面0x04就可以知道我们这个子功能需要怎么做。

UERXTXWEAI
0x06 - 0x3F

ISOSAEReserved

此值范围为本文件为未来定义预留。

MISOSAERESRVD
0x40 - 0x5F

车辆制造商特定

此值范围保留以供车辆制造商特定使用。

UVMS
0x60 - 0x7E

系统供应商特定

此值范围保留以供系统供应商特定使用。

USSS
0x7F

ISOSAEReserved

此值为本文件为未来定义预留。

MISOSAERESRVD

4.2.请求消息通信类型定义

下面是该服务通信类型参数选择,也就是选择哪些类的报文。

请求消息通信类型定义
通信类型位编码值范围描述约定值助记符
0-10x0

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESERVD
0x1所有与应用程序相关通信
该值指的是所有与应用程序相关的通信(多个车内控制器之间的应用程序间信号交换)。
UNCM
0x2

所有与网络管理相关通信

该值指的是所有与网络管理相关的通信。

UNWMCM
0x3

所有与网络管理和应用程序相关通信

该值指的是所有与网络管理和应用程序相关的通信。

UNWMCM,NCM
2-30x0-0x3

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESERVD
4-70x0

禁用/启用指定的通信类型

当4-7bit位为0x0时,这里接收节点也就是服务端仅禁用此服务端到总线上的通信。如果此接收节点是一个主节点,此接收节点不负责去控制它的子节点的通信。

这里其实都是对此服务端到总线上的通信禁用功能开启,当我们选择4-7bit位为0x0时,我们服务端如果是主节点是无法控制它连接的子节点的通信。

UDISENSCT
0x1-0xE禁用/启用由子网编号标识的特定子网UDISENSSIVSN
0xF禁用/启用接收请求的网络(接收节点(服务器))UDENWRIRO

根据以上的对通信类型(一个字节)的位编码可知,其实这个字节中0-3bit位表示通信类型

此字节0bit位置为1,表示指定的通信类型包含所有与应用程序相关通信
此字节1bit位置为1,表示指定的通信类型包含所有与网络管理相关通信
所以此字节的0-1bit都置为1,表示指定的通信类型是所有与应用程序相关通信所有与网络管理相关通信

而此字节的2-3bit在ISO14229中还没有用到,也就是此字节的低半个字节(0-3bit)只有0-1bit使用到了,所以我们直接可以理解此字节的0-1bit位表示通信类型。

注意:通信类型字节的4-7bit位我们一般会置为0x0,直接限定服务端只能去控制自己涉及的通信,其他节点的发送和接收我们是无法控制的;而4-7bit位设置的其他值基本不用,ISO14229也没有明确说明,所以我们也不用去做过多了解。

4.3. 请求消息节点识别号参数定义 

字节值描述Cvt助记符
0x0000

ISOSAEReserved

该值为本文件为未来定义预留。

MISOSAERESRVD
0x0001-0xFFFF

节点识别号

节点识别号指的是主节点对应的子节点进行编号

UNIN

4.4.请求消息数据参数定义

请求消息数据参数定义

节点识别号

如果服务器涉及到CAN信号转发,那么这个服务器就可以看作一个主节点,而这个主节点涉及到的CAN信号转发,这些CAN信号转发的来源是另一路CAN总线,这一路CAN总线就被称为这个主节点的子总线,而涉及到这一路中某些电控单元的CAN信号转发,这些电控单元被称为这个主节点的子总线节点或子节点。

节点识别号就是对某个主节点中的多个子总线节点的编码

比较典型的例子就是:汽车上的TBOX,连接TBOX中的几路CAN总线,这几路CAN总线都可以视为TBOX的子总线,TBOX就是可以算一个主节点。

经验总结:我之前接触的商用车电控五合一中的总成板也可以看成一个主节点,总成板的功能:转发辅控报文和控制接触器吸合或断开。

5.肯定响应消息定义

肯定响应消息定义
A_Data字节参数名称Cvt字节值助记符
#1通信控制响应SIDM0x68CCPR
#2子功能 = [控制类型]M0x00 - 0x7FLEV_CTRLTP

5.1.肯定响应消息数据参数定义 

肯定响应消息数据参数定义
定义

控制类型

此参数与请求消息的子功能参数的位6~0相同。

6.否定响应消息定义

否定响应消息定义
A_Data字节参数名称字节值Cvt助记符
#1否定响应SID0x7FMSIDNR
#2通信控制请求SID0x28MSIDRQ
#3否定响应码0xXXMNRC_

6.1. 否定响应码

此服务支持的否定响应码
否定响应码描述助记符
0x12

子功能不支持

如果不支持子功能参数,则应发送此否定响应码。

SFNS
0x13

消息长度错误或格式无效

如果消息的长度错误,则应发送此否定响应码。

IMLOIF
0x22

条件错误

如果未满足通信控制请求的条件,因此无法禁用/启用请求的通信类型,则应返回此否定响应码。

CNC
0x31

请求超出范围

如果服务端检测到通信类型节点识别号参数中有错误,则服务端应使用此响应码。

ROOR

7.服务使用示例

7.1.示例#1-禁用网络管理报文的传输

7.1.1.步骤1:请求禁用网络管理报文的传输

禁用网络管理报文传输请求

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1通信控制请求SID0x28CC
#2

子功能 = [控制类型]=启用Rx和禁用Tx

               抑制肯定响应位 = 假

0x01ERXTX
#3通信类型=所有与网络管理相关通信0x02NW

此过程通过向服务端请求控制对于所有与网络管理相关通信报文的接收(开启)和发送(禁用)。

通信控制肯定响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通信控制响应SID

0x68

CCPR

#2

子功能 = [控制类型]=启用Rx和禁用Tx

0x01

CTRLTP

服务端响应客户端请求。

7.1.2.操作汇总

步骤1:请求禁用网络管理报文的传输

图解:

操作CAN报文实体
01234567
请求禁用网络管理报文传输0x030x280x010x02客户端
肯定响应0x020x680x01服务端

7.2.示例#2-主节点控制从节点报文转发 

7.2.1.步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式

通信控制请求消息

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1通信控制请求SID0x28CC
#2

子功能 = [控制类型]=使用增强的地址信息启用Rx并禁用Tx

               抑制肯定响应位 = 假

0x04ERXTX
#3通信类型=所有与应用程序相关通信0x01NMCP
#4节点识别号(高字节)0x00NIN
#5节点识别号(低字节)0x0ANIN

主节点将节点识别号0x000A对应的通信转为仅诊断调度模式,这时候此部分通信,仅可以用来接收往主节点发送的报文,而主节点只能转发给节点识别号0x000A的节点诊断报文。

通信控制肯定响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通信控制响应SID

0x68

CCPR

#2

子功能 = [控制类型]=使用增强的地址信息启用Rx并禁用Tx

0x04

CTRLTP

7.2.2.步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式 

通信控制请求消息

消息方向

客户端→服务端

消息类型

请求

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1通信控制请求SID0x28CC
#2

子功能 = [控制类型]=使用增强的地址信息启用Rx和Tx

               抑制肯定响应位 = 假

0x05ERXTX
#3通信类型=所有与应用程序相关通信0x01NMCP
#4节点识别号(高字节)0x00NIN
#5节点识别号(低字节)0x0ANIN

主节点将节点识别号0x000A对应的通信转为应用程序调度模式,就时恢复前面的通信。

通信控制肯定响应消息

消息方向

服务端→客户端

消息类型

响应

A_Data字节

描述(所以值为16进制)

字节值

助记符

#1

通信控制响应SID

0x68

CCPR

#2

子功能 = [控制类型]=使用增强的地址信息启用Rx和Tx

0x05

CTRLTP

7.2.3.操作汇总

步骤1:将主节点对应此识别号的总线通信转为仅支持诊断的调度模式

步骤2:将主节点对应此识别号的总线通信转为应用程序调度模式 

图解:

操作CAN报文实体
01234567
将主节点对应此识别号的总线通信转为仅支持诊断的调度模式0x050x280x040x010x000x0A客户端
肯定响应0x020x680x04服务端
将主节点对应此识别号的总线通信转为应用程序调度模式0x050x280x050x010x000x0A客户端
肯定响应0x020x680x05服务端

到这里我们的0x28服务基本学完了。

以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!

有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务

  • 45
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心骗小白话

和我一起成长吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值