【ISO14229_UDS_0x87服务详解】

目录

  • 1、0x87服务(链接控制服务)
  • 2、请求报文格式
    • 2.1 请求报文定义
    • 2.2 请求报文中子函数参数定义
    • 2.3 请求消息中数据参数定义
  • 3、肯定应答报文
    • 3.1 肯定应答报文格式定义
    • 3.2 肯定应答报文数据参数定义
  • 4、支持的否定应答码(NRC_)
  • 5、0x87服务(链接控制服务)案例说明

1、0x87服务(链接控制服务)

  Service description:
  0x87服务(LinkControl,链接控制服务)用于控制客户端与服务端之间的通讯,以获得用于诊断 目的(如刷新)的总线带宽。此服务可选地应用于那些数据链路层,它提供了在非默认诊断会话模式重新配置其通信参数的能力(例如更改CAN的波特率或重新配置FlexRay周期设计)。
注意:  有关此服务在某个数据链路层上的应用和使用的详细信息,可以在各个数据链路层特定诊断服务实现UDSonXYZ“数据链路”规范中找到。
  此服务用于将数据链路层转换到一种允许最大可能用于编程目的的较高诊断带宽的状态。为了克服功能通信的限制(例如,波特率必须同时在多个服务器中转换),转换过程分为两个步骤:
—— Step #1:客户端验证转换是否可行,并通知服务端使用的模式转换机制。在客户端执行Step #2之前,每个服务端都应该肯定应答(suppressPosRspMsgIndicationBit = FALSE)。

—— Step #2: 客户端请求切换模式(例如,更高的波特率)。只有在成功执行 Step #1时才会执行此步骤。在功能通信的情况下,建议在执行模式转换时不应该有任何来自服务端的响应(suppressPosRspMsgIndicationBit = TRUE),因为一个服务端可能已经转换到新模式,而其他服务器仍在进行中。
  请求报文中的linkControlType参数与条件linkControlModeIdentifier/linkRecord参数一起提供了一种转换机制,可以使用预定义的模式转换参数,也可以使用特定定义的模式转换参数。
注意:  此服务绑定到非默认会话下。会话层计时器超时将把服务端转换回其正常的操作模式。这同样适用于执行ECUReset服务(0x11)的情况。一旦发生数据链接模式转换,任何附加的非默认会话的请求都不会导致重新转换到默认操作模式(例如,在编程会话期间)。

2、请求报文格式

2.1 请求报文定义

  请求报文(linkControlType = verifyModeTransitionWithFixedParameter)的定义:

字节序号 参数值 约定 字节值
#1 LinkControl Request SID M 0x87
#2 sub-function = [ linkControlType] M 0x01
#3 linkControlModeIdentifier ] M 0x00 - 0xFF

  请求报文(linkControlType = verifyModeTransitionWithSpecificParameter)的定义:

字节序号 参数值 约定 字节值
#1 LinkControl Request SID M 0x87
#2 sub-function = [ linkControlType] M 0x02

#3
#4
#5
linkControlModeIdentifier = [
            modeParameterHighByte
            modeParameterMiddleByte
            modeParameterLowByte ]
M 0x00 - 0xFF

  请求报文(linkControlType = transitionMode)的定义:

字节序号 参数值 约定 字节值
#1 LinkControl Request SID M 0x87
#2 sub-function = [ linkControlType] M 0x03

2.2 请求报文中子函数参数定义

  请求报文中子函数参数(linkControlType)用于描述执行的行为(suppressPosRspMsgIndicationBit (bit 7) 在下表中未出现):

Bit 6-0 描述 约定
0x00 ISOSAEReserved
该值由ISO文档保留
M
0x01 verifyModeTransitionWithFixedParameter
此参数用于验证是否可以执行带有预定义参数的转换,该参数由linkControlModeIdentifier数据参数指定。
M
0x02 verifyModeTransitionWithSpecificParameter
此参数用于验证是否可以转换到由linkRecord数据参数指定的特定参数(例如,特定的波特率)。
M
0x03 transitionMode
这个子功能参数要求服务端将数据链路转换到前面验证消息中所要求的模式。
M
0x04 - 0x3F ISOSAEReserved
该值由ISO文档保留
M
0x40 - 0x5F vehicleManufacturerSpecific
车辆制造商保留
M
0x60 - 0x7E systemSupplierSpecific
供应商保留
M
0x7F ISOSAEReserved
该值由ISO文档保留
M
            

2.3 请求消息中数据参数定义

  该服务在请求报文中的数据参数定义如下表所示:

定义
linkControlModeIdentifier
此条件参数参考了要转换到固定的模式参数,详见下表。
linkRecord
该条件参数记录包含了一个指定的模式参数,以便子功能参数表明使用了一个特定的参数。链路记录的格式在单个数据链路特定诊断规范(UDSonXYZ)中指定了。

  linkControlModeIdentifier值的定义,见下表:

字节值 描述 约定
0x00 ISOSAEReserved
该值由ISO文档保留
M
0x01 PC9600Baud
该值指定标准PC的波特率为9.6 KBaud。
U
0x02 PC19200Baud
该值指定标准PC的波特率为19.2 KBaud。
U
0x03 PC38400Baud
该值指定标准PC的波特率为38.4 KBaud。
U
0x04 PC57600Baud
该值指定标准PC的波特率为57.6 KBaud。
U
0x05 PC115200Baud
该值指定标准PC的波特率为115.2 KBaud。
U
0x06 - 0x0F ISOSAEReserved
该值由ISO文档保留
M
0x10 CAN125000Baud
该值指定CAN的波特率为125 KBaud。
U
0x11 CAN250000Baud
该值指定CAN的波特率为250 KBaud。
U
0x12 CAN500000Baud
该值指定CAN的波特率为500 KBaud。
U
0x13 CAN1000000Baud
该值指定CAN的波特率为1000 KBaud。
U
0x14 - 0x1F ISOSAEReserved
该值由ISO文档保留
M
0x20 ProgrammingSetup
该值指定网络的编程设置,可以根据车辆网络的要求进行参数化。
U
0x21 - 0xFF ISOSAEReserved
该值由ISO文档保留
M

3、肯定应答报文

3.1 肯定应答报文格式定义

字节序号 参数名称 约定 字节值
#1 LinkControl Response SID M 0xC7
#2 linkControlType M 0x00 - 0x7F

3.2 肯定应答报文数据参数定义

Definition
linkControlType
请求报文中子函数参数(linkControlType)值中的bit 6 - 0。

4、支持的否定应答码(NRC_)

  本服务应执行以下否定响应代码。下表记录了每个应答代码发生的情况,如果服务器在错误场景使用了该服务,则应使用如下列出的否定响应。

NRC 描述
0x12 sub-functionNotSupported
子函数参数不支持时,会发送该NRC
0x13 incorrectMessageLengthOrInvalidFormat
请求报文长度不正确时,会发送该NRC
0x22 conditionsNotCorrect
如果不符合要求的链路控制标准,会发送该NRC
0x24 conditionsNotCorrect
当客户端请求转换操作模式,而不需要预先的验证步骤,该步骤指定要转换到的模式,会发送该NRC
0x31 requestOutOfRange
如果linkControlModeIdentifier无效时,指定的modeParameter (linkRecord)无效时,会发送该NRC

5、0x87服务(链接控制服务)案例说明

例1:Transition baudrate to fixed baudrate (PC baudrate 115200 kBit/s)

  Step#1: 验证是否满足波特率切换的所有条件:
  案例1步骤1的链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#2 linkControlType = verifyModeTransitionWithFixedParameter,
suppressPosRspMsgIndicationBit = FALSE
0x01
#3 linkControlModeIdentifier = PC115200Baud 0x05

  案例1步骤1中的链接控制服务的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 LinkControl Request SID 0xC7
#2 linkControlType = verifyModeTransitionWithFixedParameter 0x01

  Step#2: 转换波特率:
  案例1步骤2中链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#3 linkControlType = transitionMode,
              suppressPosRspMsgIndicationBit = TRUE
0x83

  服务端没有响应。客户端和服务端必须转换通信链路的波特率。

例2:Transition baudrate to specific baudrate (150kBit/s)

  Step#1: 验证是否满足波特率切换的所有条件:
  案例2步骤1的链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#2 linkControlType = verifyModeTransitionWithSpecificParameter,
suppressPosRspMsgIndicationBit = FALSE
0x02
#3 linkRecord [ modeParameterHighByte ] (150kBit/s) 0x02
#4 linkRecord [modeParameterMiddleByte ] 0x49
#5 linkRecord [modeParameterLowByte ] 0xF0

  案例2步骤1中的链接控制服务的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 LinkControl Request SID 0xC7
#2 linkControlType = verifyModeTransitionWithSpecificParameter 0x02

  Step#2: 转换波特率:
  案例2步骤2中链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#3 linkControlType = transitionMode,
              suppressPosRspMsgIndicationBit = TRUE
0x83

  服务端没有响应。客户端和服务端必须转换通信链路的波特率。

例3:Transition FlexRay cycle design to ‘Programming’

  下面的示例反映了一个场景,其中FlexRay网络周期设计转换为优化的“编程”模式(例如,利用增强的动态段进行编程)。
  Step#1: 验证调度程序切换是否满足所有条件:
  案例3步骤1的链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#2 linkControlType = verifyModeTransitionWithFixedParameter,
suppressPosRspMsgIndicationBit = FALSE
0x01
#3 linkControlModeIdentifier = ProgrammingSetup 0x20

  案例3步骤1中的链接控制服务的肯定应答报文见下表,由服务端(ECU)发往客户端:

字节顺序 Description 字节值
#1 LinkControl Request SID 0xC7
#2 linkControlType = verifyModeTransitionWithFixedParameter 0x01

  Step#2: 转换编程调度器:
  案例3步骤2中链接控制服务的请求报文使用如下,由客户端发向服务端(ECU):

字节顺序 Description 字节值
#1 LinkControl Request SID 0x87
#3 linkControlType = transitionMode,
              suppressPosRspMsgIndicationBit = TRUE
0x83

  服务端没有响应。客户端和服务端必须转换FlexRay通信链路的周期设计。

返回UDS诊断服务功能单元介绍目录

你可能感兴趣的:(mcu)