UDS 诊断服务系列文章目录
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
文章目录
一、服务说明
LinkControl(链路控制)服务用于控制客户端与服务器之间的通信,以便获取诊断(如编程)用的总线宽带。在非默认诊断会话期间能够重新配置通信参数(例如,更改 CAN 波特率或重新配置 FlexRay 周期设计)的数据链路层中可以选择此服务。
此服务用于将数据链路层转换至特定状态,以便利用最适合编程的更高诊断宽带。为解决功能通信约束(例如,须同时在多个服务器中转换波特率),将转换操作分成以下两步:
-
**第 1 步:**客户端验证是否可以进行转换,并告知服务器待使用的模型转换机制。在客户端执行第 2 步操作之前,各服务器均须做出肯定响应(suppressPosRspMsgIndicationBit = False)。此步骤的操作实际上不执行模型转换。
-
**第 2 步:**客户端实际上是请求模式转换(如更高的波特率)。只有在成功完成第 1 步的操作后才应请求执行此步骤的操作。进行功能通信时,建议在执行模式转换期间服务器应不作出任何响应(suppressPosRspMsgIndicationBit = True),这是因为,某个服务器可能已经转换至新模式,而其他服务器仍然处于模式转换中。
请求消息中的 linkControlType(链路控制类型)参数连同有条件的 linkControlModeIdentifier / linkRecord(链路控制模式标识符 / 链路记录)参数提供了一种使用预定义模式转换参数或专门定义的模式转换参数的转换机制。
注 此服务与非默认会话相连。会话层计时器超时将使服务器重新转换至其正常运行模式。这同样适用于执行 0x11 服务的情况。一旦进行数据链路模式转换,任何附加的非默认会话请求应不造成重新转换至默认运行模式(如编程会话期间)。
二、请求消息
1.请求消息定义
下表定义了请求消息 linkControlType = verifyModeTransitionWithFixedParameter
字节 | 参数名称 | 字节值 |
---|---|---|
#1 | LinkControl(链路控制)请求SID | 0x87 |
#2 | sub-function = [ linkControlType ] | 0x01 |
#3 | linkControlModeIdentifier(链路控制模式标识符) | 0x00 - 0xFF |
下表定义了请求消息 linkControlType = verifyModeTransitionWithSpecificParameter
字节 | 参数名称 | 字节值 |
---|---|---|
#1 | LinkControl(链路控制)请求SID | 0x87 |
#2 | sub-function = [ linkControlType ] | 0x02 |
#3 #4 #5 | linkRecord[] = [ modeParameterHighByte modeParameterMiddleByte modeParameterLowByte ] | 0x00 - 0xFF 0x00 - 0xFF 0x00 - 0xFF |
下表定义了请求消息 linkControlType = transitionMode
字节 | 参数名称 | 字节值 |
---|---|---|
#1 | LinkControl(链路控制)请求SID | 0x87 |
#2 | sub-function = [ linkControlType ] | 0x03 |
2.请求消息子功能参数定义
子功能参数 linkControlType(链路控制类型)用在 LinkControl(链路控制)请求消息中,用以描述服务器中待执行的操作。
第 6 位值 | 说明 |
---|---|
0x00 | 保留 |
0x01 | verifyModeTransitionWithFixedParameter(验证能否使用固定参数进行模式转换) 该参数用于验证能否使用 linkControlModeIdentifier(链路控制模式标识符)数据参数所指定的预定义参数进行模式转换。 |
0x02 | verifyModeTransitionWithSpecificParameter(验证能否使用特定参数进行模式转换) 该参数用于验证能否使用 LinkRecord(链路记录)数据参数所指定的并经过专门定义的参数(如特定波特率)进行模式转换。 |
0x03 | transitionMode(转换模式) 该子功能参数请求服务将数据链路转换至前述验证消息所请求的模式。 |
0x04 - 0x3F | 保留 |
0x40 - 0x5F | VehicleManufacturerSpecific(由车辆制造商规定) |
0x60- 0x7E | SystemSupplierSpecific(由系统供应商规定) |
0x7F | 保留 |
2. 请求消息数据参数定义
定义 |
---|
linkControlModeIdentifier(链路控制模式标识符) 此条件参数引用了一个待转换的已定义的固定模式参数。 |
LinkRecord(链路记录) 此条件参数记录包含一个特定的模式参数,用于子功能参数表明使用特定参数的情况。 |
下表定义了 linkControlModeIdentifier(链路控制模式标识符)的值。
字节值 | 说明 |
---|---|
0x00 | 保留 |
0x01 | PC9600Baud 该值指定了 9.6KB 时的标准 PC 波特率。 |
0x02 | PC19200Baud 该值指定了 19.2KB 时的标准 PC 波特率。 |
0x03 | PC38400Baud 该值指定了 38.4KB 时的标准 PC 波特率。 |
0x04 | PC5760000Baud 该值指定了 57.6KB 时的标准 PC 波特率。 |
0x05 | PC115200Baud 该值指定了 115.2KB 时的标准 PC 波特率。 |
0x06 - 0x0F | 保留 |
0x10 | CAN125000Baud 该值指定了 125KB 时的标准 CAN 波特率。 |
0x11 | CAN250000Baud 该值指定了 250KB 时的标准 CAN 波特率。 |
0x12 | CAN500000Baud 该值指定了 500KB 时的标准 CAN 波特率。 |
0x13 | CAN1000000Baud 该值指定了 1MB 时的标准 CAN 波特率。 |
0x14 - 0x1F | 保留 |
0x20 | ProgrammingSetup(编程设置) 该值规定了网络的编程设置,可根据车辆的网络要求以参数表示。 |
0x21 - 0xFF | 保留 |
三、肯定响应消息
1. 肯定响应消息定义
字节 | 参数名称 | 字节值 | Cvt |
---|---|---|---|
#1 | LinkControl(链路控制)响应SID | 0xC7 | |
#2 | linkControlType(链路控制类型) | 0x00 - 0x7F |
2. 肯定响应消息数据参数定义
定义 |
---|
linkControlType(链路控制类型) 该参数是请求消息中 LinkControlType(链路控制类型)子功能参数第 6 至 0 位的回显。 |
四、支持的NRC
NRC | 说明 |
---|---|
0x12 | 不受支持的子功能 |
0x13 | 消息长度不正确或格式无效 |
0x22 | 条件不正确 若不满足所请求的 LinkControl(链路控制)的标准,则应回传此 NRC。 |
0x24 | 请求序列错误 若客户端请求在不执行指定待转换模式的前述验证步骤的情况下转换运行模式,则应回传此 NRC。 |
0x31 | 请求超过限值 以下情况下,应回传该 NRC: 所请求的 linkControlModeIdentifier(链路控制模式标识符)无效;特定的 modeParameter(模式参数)(linkRecord(链路记录))无效。 |
五、示例
1. 固定波特率的转换(PC 波特率 115200 kBit/s)
step1:验证是否满足波特率选择开关的所有标准
suppressPosRspMsgIndicationBit = False
req 87 01 05
resp C7 01
step 2:转换波特率
suppressPosRspMsgIndicationBit = True
req 87 83
// 服务其未作出响应。客户端和服务器须转换其通信链路的波特率。
2. 特定波特率的转换(150 kBit/s)
step1:验证是否满足波特率选择开关的所有标准
suppressPosRspMsgIndicationBit = False
modeParameter = 0x0249F0
req 87 02 02 49 F0
resp C7 02
step 2:转换波特率
suppressPosRspMsgIndicationBit = True
req 87 83
// 服务其未作出响应。客户端和服务器须转换其通信链路的波特率。
3. FlexRay 周期设置至 ‘编程’ 的转换
以下示例显示了将 FlexRay 网络周期设计转换至已优化的 ‘编程’ 模式(例如,利用已增强的动态编程段)的场景
step1:验证是否满足调度器开关的所有标准
suppressPosRspMsgIndicationBit = False
req 87 01 20
resp C7 01
step 2:转换至编程调度器
suppressPosRspMsgIndicationBit = True
req 87 83
// 服务其未作出响应。客户端和服务器须转换其 FlexRay 通信链路的周期设计。