客户端请求控制通信波特率。LinkControl服务用于控制客户端和服务器之间的通信链接波特率,以交换诊断数据。 该服务可选地应用于那些数据链路层,这些数据链路层允许在活动诊断会话期间进行波特率转换。
在实现转换数据链路层的波特率过程中,将整个流程划分为两个步骤。主要是为了克服功能性通信,即必须同时在多个服务器中转换波特率。
步骤1:客户端验证是否可以执行转换,并通知服务器要使用的波特率。在客户端执行步骤2之前,要求每个服务器都应作出肯定响应。但此步骤并不执行波特率转换。
步骤2:客户端实际上请求转换波特率。仅在验证可以执行波特率转换(执行步骤#1)的情况下,才应执行此步骤。在进行功能通信的情况下,建议在转换波特率时(suppressPosRspMsgIndicationBit = TRUE),服务器不应有任何响应,因为一台服务器可能已经转换为新的波特率,而其他服务器仍需要传输它们响应消息(避免波特率不匹配)。
任何波特率转换应按以下方式进行:
⎯preventPosRspMsgIndicationBit = TRUE:成功发送/接收客户端请求消息后,该请求请求波特率转换。
⎯preventPosRspMsgIndicationBit = FALSE:成功发送/接收服务器肯定响应消息后,确认消息已成功接收,该请求请求波特率转换。
注意:此服务绑定到非defaultSession。 会话层计时器超时会将服务器转换回其正常运行速度。 如果执行ECUReset服务(十六进制),则同样适用。 过渡到另一个非defaultSession不会影响波特率。
诊断请求格式
当 sub-function参数等于verifyBaudrateTransitionWithFixedBaudrate(0x01)时,诊断请求具体格式如下:
当 sub-function参数等于verifyBaudrateTransitionWithSpecificBaudrate(0x02)时,诊断请求具体格式如下:
关于其他的sub-function的参数值以及说明,这边请看下表:
Hex | Name | Description |
00 | ISOSAEReserved | ISO 保留,未定义 |
01 | verifyBaudrateTransitionWithFixedBaudrate | 验证是否可以执行到由baudrateIdentifier数据参数指定的预定义波特率的转换 |
02 | verifyBaudrateTransitionWithSpecificBaudrate | 验证是否可以执行到由linkBaudrateRecord数据参数指定的特定定义的波特率的转换 |
03 | transitionBaudrate | 将波特率转换为前面的验证消息中指定的波特率 |
04 | ISOSAEReserved | ISO保留,未定义 |
... | ||
3F | ||
40 | vehicleManufacturerSpecific | 主车场定义 |
... | ||
5F | ||
60 | systemSupplierSpecific | 供应商定义 |
... | ||
7E | ||
7F | ISOSAEReserved | ISO 保留,未定义 |
对于没有给出具体格式定义的sub-function,请参看主车场给到的需求进行分析。不可盲目套用在ISO中定义好的另外两个sub-function。
ISO定义的波特率参数如下:
Hex | Name | Description |
00 | ISOSAEReserved | ISO 保留,未定义 |
01 | PC9600Baud | 9600 的标准PC波特率 |
02 | PC19200Baud | 19200 的标准PC波特率 |
03 | PC38400Baud | 38400 的标准PC波特率 |
04 | PC57600Baud | 57600 的标准PC波特率 |
05 | PC115200Baud | 115200 的标准PC波特率 |
06 | ISOSAEReserved | ISO 保留,未定义 |
... | ||
0F | ||
10 | CAN125000Baud | 125000 的标准CAN波特率 |
11 | CAN250000Baud | 250000 的标准CAN波特率 |
12 | CAN500000Baud | 500000 的标准CAN波特率 |
13 | CAN1000000Baud | 1000000 的标准CAN波特率 |
14 | ISOSAEReserved | ISO 保留,未定义 |
... | ||
FF | ||
正响应格式
具体的格式如下:
负响应NRC码
具体的NRC码如下:
在这些NRC码中,需要格外注意0x31(requestOutOfRange)。因为这里的错误原因与其他服务的错误原因不太一样。