本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$28 CommunicationControl,其为Tester提供了控制目标ECU通信行为的能力。
目录
1 服务介绍
整车网络各ECU之间的通信依赖于通信报文,这些报文从功能上一般被划分为两大类:
- 应用报文(App Message):主要用于传输应用层的数据,如传感器数据、控制命令等。应用报文的主要功能是实现车载系统各个ECU之间的数据交换。应用报文的发送时机可以通过配置参数控制。
- 网络管理报文(NM,Network Management):主要用于管理车载网络的状态,包括节点的唤醒和休眠。其主要功能是确保网络中的各个节点在没有通信需求时进入低功耗模式,从而节约电池能量。网络管理报文具有周期性发送的特点,当节点需要唤醒网络时,会快速连续的发送网络管理报文,以确保网络的快速响应。网络管理报文通常在网络唤醒时优先发送。
$28 CommunicationControl诊断服务则主要用于关闭或恢复ECU不同类别通信报文的接收或发送。
一般而言,$28服务有以下的主要应用场景:
- 刷写ECU或向ECU写入大量数据时。因为在刷写软件的时候,ECU不需要通信相关的功能。通过在编程会话下执行$28服务关闭总线通信报文的发送和接收,可以减少网络总线负载,将ECU的所有通信资源都留给软件刷写或大数据下载,以提高ECU的刷写效率。在ECU刷写完成后,再利用$28服务恢复对应通信报文的发送和接收即可。
- 某些特殊的测试场合,比如希望只接收对应的应用报文或只发送对应的网络管理报文。
2 服务数据格式
2.1 请求数据格式
以下是$28服务的请求数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | CommunicationControl SID | 0x28 | 必选 |
#Byte2 | sub-function = [controlType] | 0x00 – 0xFF | 必选 |
#Byte3 | communicationType | 0x00 – 0xFF | 必选 |
#Byte4 | nodeIdentificationNumber (high byte) | 0x00 – 0xFF | 可选a |
#Byte5 | nodeIdentificationNumber (low byte) | 0x00 – 0xFF | 可选a |
- a:只有当 controlType == 0x04 或 0x05 时,nodeIdentificationNumber 才有效
2.1.1 controlType
controlType是$28服务的sub-function参数,用于指示如何控制ECU的通信行为,其具体定义如下表所示:
controlType | Description |
---|---|
0x00 | enableRxAndTx 使能对应通信报文的接收和发送 |
0x01 | enableRxAndDisableTx 使能对应通信报文的接收,但禁用其发送 |
0x02 | disableRxAndEnableTx 使能对应通信报文的发送,但禁用其接收 |
0x03 | disableRxAndTx 禁用对应通信报文的接收和发送 |
0x04 | enableRxAndDisableTxWithEnhancedAddressInformation 针对特定的总线主节点,将其相关的子总线段切换到仅支持诊断的调度模式(禁用除诊断报文以外的其他通信,只有诊断报文可以通过主节点到达子总线节点) |
0x05 | enableRxAndTxWithEnhancedAddressInformation 针对特定的总线主节点,将其相关的子总线段切换到应用程序调度模式(即0x04子功能的恢复) |
0x06 – 0x3F | ISOSAEReserved |
0x40 – 0x5F | 车辆制造商规定 |
0x60 – 0x7E | 系统供应商规定 |
0x7F | ISOSAEReserved |
2.1.2 communicationType
communicationType参数用于指示要对哪种类型的通信报文进行控制。其是一个位编码值,长度为1个字节,它允许同时控制多个通信类型。其具体定义如下表所示:
Encoding of bit | Value | Description |
---|---|---|
0 – 1 | 0x0 | ISOSAEReserved |
0x1 | normalCommunicationMessages 普通应用报文 | |
0x2 | networkManagementCommunicationMessages 网络管理报文 | |
0x3 | networkManagementCommunicationMessages and normalCommunicationMessages 普通应用报文和网络管理报文 | |
2 – 3 | 0x0 – 0x3 | ISOSAEReserved |
4 – 7a | 0x0 | Disable / Enable specified communicationType ECU仅能控制自身涉及的总线通信,而不负责控制其子节点的通信 |
0x1 – 0xE | Disable / Enable specific subnet identified by subnet number 控制由子网编号标识的特定子网通信 | |
0xF | Disable/Enable network which request is received on (Receiving node (server)) 控制接收请求(接收节点(服务器))的网络通信 |
- a:communicationType参数的 4-7 bit位一般置为0x0,直接限定ECU只能去控制自身涉及的总线通信,而无法控制其他节点的发送和接收。4-7 bit位设置的其他值基本不用,ISO-14229也没有明确说明,故不需去做太多了解。
2.1.3 nodeIdentificationNumber
nodeIdentificationNumber参数长度为2个字节,用于标识车辆网络中的某个网络节点。仅当子功能参数controlType设置为0x04或0x05时,此参数才存在。其具体定义如下表所示:
Byte Value | Description |
---|---|
0x0000 | ISOSAEReserved |
0x0001 – 0xFFFF | nodeIdentificationNumber 节点识别号标识连接在车辆总线系统上的某节点。只有当节点识别号有效时,ECU才能执行通信控制功能。 |
2.2 肯定响应数据格式
以下是$28服务的肯定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | CommunicationControl SID + 0x40 | 0x68 | 必选 |
#Byte2 | sub-function = [controlType] | 0x00 – 0x7F | 必选 |
2.2.1 controlType
controlType是对应$28服务请求报文中的controlType参数回显。
2.3 否定响应数据格式
以下是$28服务的否定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | Negative Response SID | 0x7F | 必选 |
#Byte2 | CommunicationControl SID | 0x28 | 必选 |
#Byte3 | NRC | supportedNRC | 必选 |
supportedNRC的可选值如下表所示:
supportedNRC | NRC define | 描述 |
---|---|---|
0x12 | sub-functionNotSupported | ECU不支持该诊断请求服务的子功能 |
0x13 | incorrectMessageLengthOrInvalidFormat | 诊断请求指令的长度或格式不对 |
0x22 | conditionsNotCorrect | 执行诊断的条件不满足 |
0x31 | requestOutOfRange | 诊断请求参数超出范围或DID/RID不支持 |
3 服务通信示例
3.1 禁用网络管理报文
本例展示了Tester通过$28服务禁用ECU网络管理报文发送的流程,其中,存在以下条件:
- sub-function bit7: SPR = 0
3.1.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | CommunicationControl SID | 0x28 |
#Byte2 | sub-function = [controlType = enableRxAndDisableTx] | 0x01 |
#Byte3 | communicationType = networkManagementCommunicationMessages | 0x02 |
3.1.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | CommunicationControl SID + 0x40 | 0x68 |
#Byte2 | sub-function = [controlType = enableRxAndDisableTx] | 0x01 |
3.2 切换诊断调度模式
本例展示了Tester通过$28服务控制车辆总线系统上的地址为0x000A的主节点子总网段切换到仅诊断调度模式的流程,其中,存在以下条件:
- sub-function bit7: SPR = 0
3.2.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | CommunicationControl SID | 0x28 |
#Byte2 | sub-function = [controlType = enableRxAndDisableTxWithEnhancedAddressInformation] | 0x04 |
#Byte3 | communicationType = normalCommunicationMessages | 0x01 |
#Byte4 | nodeIdentificationNumber (high byte) | 0x00 |
#Byte5 | nodeIdentificationNumber (low byte) | 0x0A |
3.2.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | CommunicationControl SID + 0x40 | 0x68 |
#Byte2 | sub-function = [controlType = enableRxAndDisableTxWithEnhancedAddressInformation] | 0x04 |