【AUTOSAR】CCP协议的代码分析与解读(六)----CCP协议开始/断开/设置/获取

1.开始/终止数据传输(START_STOP)

该命令用于DAQ通信模式,其作用是开始或终止某个DAQ列表的数据上传。START_STOP命令的CRO数据场结构如下所示。

位  置

类  型

描  述

0

字节

命令代码=0x06(START_STOP)

1

字节

命令序号=CTR

2

字节

模式:开始/终止/准备数据传输

3

字节

DAQ列表序列

4

字节

最后一个ODT序号

5

字节

事件通道号

6,7

传输速率预分频值

该命令对于不同的模式有不同的含义,其中:

  1. 模式=0x00:终止某DAQ列表的数据传输;
  2. 模式=0x01:开始DAQ列表的数据传输;
  3. 模式=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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Autosar汽车行业广泛使用的一种软件架构标准,旨在提高汽车电子系统的可靠性和可维护性。它通过提供标准化的接口和通信协议,使得不同厂家和供应商开发的软件和硬件组件可以相容且互操作。Autosar标准包含了许多不同的模块和组件,它们分别负责不同的功能,如通信、诊断、操作系统等。要读懂Autosar代码,首先需要了解Autosar标准的整体架构和各个模块之间的关系。 在阅读Autosar代码时,需要熟悉标准中定义的各种接口和数据结构,了解它们的作用和用法。此外,还需要理解Autosar中使用的不同软件架构模式和设计模式,例如发布订阅模式、状态机模式等。很多Autosar代码都会按照这些模式进行设计和实现,因此读懂这些模式对于理解代码至关重要。 此外,由于Autosar标准是由多个汽车厂商和供应商共同制定和维护的,因此在阅读Autosar代码时还需要关注不同厂商或供应商对标准的实现方式和扩展。虽然Autosar标准化了接口和通信协议,但在实际应用中仍然存在一些厂商特定的实现和扩展,这些内容也需要在阅读代码时予以理解。 总之,要读懂Autosar代码,需要对Autosar标准有深入的了解,包括整体架构、各种接口和数据结构、软件架构模式和设计模式,以及不同厂商或供应商的实现方式和扩展。同时,也需要对汽车行业的背景和需求有一定的了解,这样才能更好地理解Autosar代码的含义和用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值