1.开始/终止数据传输(START_STOP)
该命令用于DAQ通信模式,其作用是开始或终止某个DAQ列表的数据上传。START_STOP命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x06(START_STOP) |
1 | 字节 | 命令序号=CTR |
2 | 字节 | 模式:开始/终止/准备数据传输 |
3 | 字节 | DAQ列表序列 |
4 | 字节 | 最后一个ODT序号 |
5 | 字节 | 事件通道号 |
6,7 | 字 | 传输速率预分频值 |
该命令对于不同的模式有不同的含义,其中:
- 模式=0x00:终止某DAQ列表的数据传输;
- 模式=0x01:开始DAQ列表的数据传输;
- 模式=0x02:为开始同步传输做准备。
该命令用于开始或终止某个特定DAQ列表数据的上传,由命令中的DAQ列表序号决定,同时该命令可以让该DAQ列表中的部分ODT(第0个命令中的最后一个ODT)上传。命令中的事件通道号对应该DAQ列表上传的周期,通过预分频值可延长上传周期,预分频值必须大于等于1。
如命令中的模式为0x02,则该命令不是用来开始或终止某个特定DAQ列表的数据通信,而是对特定DAQ列表进行参数标识。当所有需要上传的列表都完成标识以后,主设备会利用START_STOP_ALL命令将所有进行过参数标识的DAQ列表同步上传(另见START_STOP_ALL命令)。
针对START_STOP命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3~7 | 字节 | 无效 |
例如,主设备向从设备发送START_STOP命令,当前CTR为0x23,命令模式为0x01(开始上传DAQ列表数据),DAQ列表序号为0x03,最后一个ODT序号为0x07,事件通道为0x02,预分频值为1(Motorola格式),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x06 | 0x23 | 0x01 | 0x03 | 0x07 | 0x02 | 0x00 | 0x01 |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),从设备按主设备的请求开始上传DAQ列表#03中从第0个ODT列表到第7个ODT列表内的数据,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | -- | -- | -- | -- | -- |
2.断开(DISCONNECT)
当主设备需要结束与当前ECU的通信,或与下一个ECU通信时,用该条命令来断开与当前ECU的逻辑连接。这种断开可以暂时将从设备置为离线状态,也可以彻底终止与当前ECU的通信。
彻底断开会使先前对ECU状态的DAQ通信,也不会影响先前对DAQ列表、ECU通信状态、各项功能的保护状态及MTA地址值的设置。
该命令中ECU地址采用Intel格式,低位在前。DISCONNECT命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x07(DISCONNECT) |
1 | 字节 | 命令序号=CTR |
2 | 字节 | 命令参数:0x00:暂时断开,0x01终止 |
3 | 字节 | 无效 |
4,5 | 字 | ECU地址(Intel格式,低位在前) |
6~7 | 字节 | 无效 |
针对DISCONNECT命令返回DTO的数据场结构,如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3~7 | 字节 | 无效 |
例如,主设备向从设备发送DISCONNECT命令,当前CTR为0x23,命令参数为0x00(暂时将ECU设为“离线”状态),ECU地址为0x0208,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x07 | 0x23 | 0x00 | -- | 0x08 | 0x02 | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | -- | -- | -- | -- | -- |
3.设置当前通信状态(SET_S_STATUS)
从设备通过该命令设置当前主、从设备的通信状态。SET_S_STATUS命令的CRO数据场结构,如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x0C(SET_S_STATUS) |
1 | 字节 | 命令序号=CTR |
2 | 字节 | 状态字节 |
3~7 | 字节 | 无效 |
从设备通过状态字节中各位的信息设置当前通信所处的状态,具体定义如下所示。
byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RUN | STORE | 0x23 | res | res | RESUE | DAQ | CAL |
状态字节中各位定义如下所示。
位 置 | 名 称 | 描 述 |
0 | CAL | 标定数据初始化完成 |
1 | DAQ | DAQ列表初始化完成 |
2 | RESUE | 请求ECU断电时自动保存DAQ列表设置,在下次启动时再自动启动DAQ列表 |
6 | STORE | 请求ECU断电时保存标定数据 |
7 | RUN | 正处于运行阶段 |
3~5 | 保留 | 保留 |
状态字节中如果某位的数值为1,则该位的表达式为真。从设备可以对该字节中的数据进行读/写操作。上电、连接断开或发生错误时,状态字节中的数据会被清空。
针对SET_S_STATUS命令返回DTO的数据场结构,如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3~7 | 字节 | 不关心 |
例如,主设备向从设备发送SET_S_STATUS命令,当前CTR为0x23,状态字节的值为10000001(CAL,RUN),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x0C | 0x23 | 0x81 | -- | -- | -- | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | -- | -- | -- | -- | -- |
4.获取当前通信状态(GET_S_STATUS)
主设备通过该条命令请求从设备提供当前通信状态。GET_S_STATUS命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x16(WRITE_DAQ) |
1 | 字节 | 命令序号=CTR |
2~7 | 字节 | 无效 |
针对GET_S_STATUS命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3 | 字节 | 状态字节 |
4 | 字节 | 其他状态信息限定 |
5 | 字节 | 其他状态信息(可选) |
备注:返回DTO中其他状态信息为可选项,是否采用因制造商或具体应用而定,并不属于CCP协议范畴。如果ECU返回的DTO中不包括其他状态信息,其他状态信息限定必须为0(FALSH),如该位值不为FALSH,则由该位的值决定其他状态信息的类型。
例如,主设备向从设备发送GET_S_STATUS命令,当前CTR为0x23,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x0D | 0x23 | -- | -- | -- | -- | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | 0x81 | -- | -- | -- | -- |
由DTO返回状态字节,其中第0位(CAL)和第7位(RUN)分别为1。
5.建立checksum表(BUILD_CHKSUM)
Checksum是CCP提供的一个可选功能。为了提高效率,在每次对ECU进行标定前,CCP支持先对需要进行标定内存区域进行checksum算法,如果checksum结果与下载数据不一致,表明内存中的数据与标定数据不同,主设备才开始下载标定数据。
主设备用该命令请求从设备对指定内存区域(起始地址为MTA0,大小由命令中的Block大小决定)进行checksum计算,并返回计算结果。checksum算法由制造商和/或根据实际应用决定,不属于CCP协议范畴。BUILD_CHKSUM命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x0E(BUILD_CHKSUM) |
1 | 字节 | 命令序号=CTR |
2~5 | 无符号长整型 | Block大小(以字节数表示) |
6,7 | 字节 | 无效 |
针对BUILD_CHKSUM命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3 | 字节 | Checksum数据长度 |
4~7 | 字节 | Checksum数据(根据实际应用决定) |
例如,主设备向从设备发送BUILD_CHKSUM命令,当前CTR为0x23,内存块的大小为32KB(0x8000),起始地址为MTA0地址,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x0E | 0x23 | 0x00 | 0x00 | 0x80 | 0x00 | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23)及通过计算机得到的Checksum数据(0x1234),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | 0x02 | 0x12 | 0x34 | -- | -- |
6.清空内存(CLEAR_MEMORY)
该条命令可被用来在标定前清空FLASH ERROM中的数据,被清空区域起始地址即是MTA0地址。CLEAR_MEMORY命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x10(CLEAR_MEMORY) |
1 | 字节 | 命令序号=CTR |
2~5 | 长整型 | 内存区域大小 |
3,6,7 | 字节 | 无效 |
针对CLEAR_MEMORY命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3~7 | 字节 | 无效 |
例如,主设备向从设备发送CLEAR_MEMORY命令,当前CTR为0x23,内存块的大小为32KB(0x8000),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x10 | 0x23 | 0x00 | 0x00 | 0x80 | 0x00 | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | -- | -- | -- | -- | -- |
7.编程(PROGRAM)
不同与DNLOAD与DNLOAD_6命令,PROGRAM命令用以将一块大小确定的数据(由命令中的数据大小决定)烧写到ECU的非易失性内存(FLASH、EEPROM)中,起始地址为MTA0。烧写结束后,MTA0地址按烧写数据的字节数自增。PROGRAM命令的CRO数据结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x18(PROGRAM) |
1 | 字节 | 命令序号=CTR |
2 | 字节 | 数据大小(字节数) |
3~7 | 字节 | 数据(最多为5个字节) |
针对PROGRAM命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3 | 字节 | MTA0偏移(自增后) |
4~7 | 无符号长整型 | MTA0地址(自增后) |
例如,主设备向从设备发送PROGRAM命令,当前CTR为0x23,要烧写的数据为3个字节(0x03),分别为0x10、0x11、0x12如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x18 | 0x23 | 0x03 | 0x10 | 0x11 | 0x12 | -- | -- |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x03 |
由返回的DTO,执行命令前MTA0的值为0x34002000,执行命令后自增3个字节。
8.字节数据编程(PROGRAM_6)
该命令的功能与PROGRAM命令相同,区别在于PROGRAM命令写入数据的长度由CRO命令消息指定,而该命令写入数据长度固定为6个字节。烧写结束后,MTA0地址自增6个字节。PROGRAM_6命令的CRO数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | 命令代码=0x22(PROGRAM_6) |
1 | 字节 | 命令序号=CTR |
2~7 | 字节 | 烧写数据(6个字节) |
针对PROGRAM_6命令返回DTO的数据场结构如下所示。
位 置 | 类 型 | 描 述 |
0 | 字节 | Packet ID:0xFF |
1 | 字节 | 命令返回代码=ERR |
2 | 字节 | 命令序号=CTR |
3 | 字节 | MTA0偏移(自增后) |
4 | 无符号长整型 | MTA0地址(自增后) |
例如,主设备向从设备发送PROGRAM_6命令,当前CTR为0x23,要烧写的数据为6个字节,分别为0x10、0x11、0x12、0x13、0x14、0x15,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0x18 | 0x23 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 |
从设备返回TDO,包括确认代码ERR(0x00)、CTR(0x23),MTA0偏移地址(0x02)及自增后的MTA0地址,如下所示。
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x06 |