【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

  1. CCP协议介绍

CCP的全称是CAN Calibration Protocol (CAN标定协议),是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范,支持11位标准与29位扩展标识符。

    1. CCP通信方式

CCP协议采用主从通信方式,如上图所示,其中从设备是需要标定的ECU。根据CCP协议,一个主设备可通过CAN总线与多个从设备相连接,每个从设备均有其特定地址。主设备通过每个ECU的地址,与其建立一一对应的关系。

 

该系统主要有如下两种模式:

  • Polling模式:主设备和从设备一一对应的通信方式,即主设备询问,从设备对应回答的。当主从设备建立连接后,每次通信都是通过主设备首先发一条指令,请求从设备做出相应回应。通过返回一帧消息,提供主设备请求的数据及命令执行代码。这种通信方式实现简单,占ECU资源少,但是效率比较低。
  • DAQ模式:DAQ模式与Polling模式不同,其工作状态可以脱离主设备控制,而是按一定的时间周期自动向主设备发送数据。这种通信方式效率高,但是占用CPU资源高。
    1. CCP消息格式

CCP协议遵从CAN通信规范,所以CCP的通信都是以CAN报文的形式来传送。CCP消息统一使用8个字节数据传输,所有CCP命令和参数都被包含在8字节数据场。

CCP协议的实现包括:命令接收对象(CRO)和数据传输对象(DTO),如图1所示:

 

  • 命令接收对象(CRO)是主设备向ECU发送消息对象,包括命令代码和命令参数,结构为:

CMD

CTR

相关命令参数

CRO参数说明:

位置

类型

描  述

0

字节

命令代码=CMD

1

字节

命令序号=CTR

2…7

字节

命令参数和数据域

按照CCP协议,CRO格式是固定的8个字节,从设备接收的命令按照CMD代码进行解释说明。在Polling模式中,主设备发送的命令序号是有先后顺序,从设备的应答序号与其相同作一一对应,起到保护作用。

  • 数据传输对象(DTO)是从设备以数据包形式对应的反馈消息。可分为三类:
    1. 命令返回消息CRM,从设备对应DTO返回的回答消息。
    2. 事件消息,反应了内部从设备状态的改变,向主设备报告ECU的错误,请求进行错误纠正或其它处理。
    3. DAQ消息,是一种高速的上传模式,能够按照固定设定周期自动上传ECU有关参数和数据。

CRM和事件消息结构相同:

PID

ERR

CTR

相关命令参数

数据场各个字节说明:

位置

类型

描  述

0

字节

标识符(PID)

1

字节

错误代码(ERR)

2

字节

命令序号(CTR)

3~7

字节

命令参数和数据域

PID用来标识DTO类型,对于CRM和事件消息含义相同。ERR代码,在CRM中反映的是CRO请求执行的情况,如返回ERR为0x00,表示CRO命令正确执行。对于事件消息,ERR代码的数值表示ECU内部发生了哪种错误。

PID含义如下:

PID

定   义

0xFE

DTO是CRM

0xFF

   DTO是事件消息

0≤n≤0xFD

DTO是DAQ

当PID取值在[0,0xFD],表示是DAQ通信模式,要符合DAQ通信模式的格式:

PID

相关命令参数

    1. DAQ模式的数据通信

DAQ是一种高效的通信方式,它不依靠主设备,而是自主的按照设定的周期向主设备发送数据。DAQ通信结构包括三个部分:DAQ列表、ODT列表及DAQ~ODT。不同的上传周期决定不同的DAQ列表,有几个上传周期就有几个DAQ列表,同一个周期内的数据都包含在同一个DAQ列表中,结构如图2所示。

 

每一个DAQ列表都可以包含多个ODT列表,总的ODT个数不超过254个。每个ODT最大字节数为7个,包含7个单字节的数据信息,ODT列表中存放着需要上传的数据信息,如数据地址,数据长度及地址偏移量。

ODT列表需要转换成DAQ~ODT列表的形式才能向主设备发送数据,如图1所示。每一个ODT都有唯一的一个绝对编号,通过PID标识对应一个DAQ~ODT列表,而每一个ODT还有一个相对编号,表示其在每个DAQ列表的位置,第一个ODT编号为0。

举例如下,10ms周期间隔的DAQ列表编号为#0,20ms周期间隔的DAQ列表编号为#1,30ms周期间隔的DAQ列表编号为#2。每一个DAQ列表下有几个ODT列表,假设DAQ#0列表下对应3个ODT的相对编号为#0、#1、#2,绝对编号也为#0、#1、#2。DAQ#1列表下对应2个ODT的绝对编号为#0、#1,相对编号是承接上面DAQ#0下的ODT编号,为#3、#4,以此类推。

在使用DAQ模式进行通信时前,主设备需要对DAQ列表和ODT列表进行相关配置,具体步骤如下:

  1. 首先获取ECU内需要实现的DAQ列表数目及ODT列表数目。DAQ列表数目由上传数据的周期个数决定,ODT列表数目由所传数据的长度和个数决定。
  2. 其次向对应的ODT中添加数据内容,包括数据存储地址和数据长度。不同的数据地址、类型被写在不同的ODT中。
  3. 根据不同的上传周期,针对不同的DAQ列表赋予数据通道和预分频值。事件通道与上传周期一一对应,同一个DAQ列表使用相同的事件通道和预分频值,即同一个DAQ列表所有数据的上传周期相同,通过与分频值可以将数据的上传周期成倍扩大。
    1. CCP命令代码

CCP 协议共规定了28条命令,其中11条为必选命令,17条为可选命令。每条命令都有自己的CMD代码,从设备通过CRO中的CMD代码对接收的CCP命令进行解释并执行。CCP命令代码如表1所示。

表1  CCP命令代码表

命  令

CMD代码

ACK应答事件(ms)

备注

CONNECT

0x01

25

GET_CCP_VERSION

0x1B

25

EXCHANGE_ID

0x17

25

GET_SEED

0x12

25

可选

UNLOCK

0x13

25

可选

SET_MTA

0x02

25

DNLOAD

0x03

25

DNLOAD_6

0x23

25

可选

UPLOAD

0x04

25

SHORT_UP

0x0F

25

可选

SELECT_CAL_PAGE

0x11

25

可选

GET_DAQ_SIZE

0x14

25

SET_DAQ_PTR

0x15

25

WRITE_DAQ

0x16

25

START_STOP

0x06

25

DISCONNECT

0x07

25

SET_S_STATUS

0x0C

25

可选

GET_S_STATUS

0x0D

25

可选

BUILD_CHECKSUM

0x0E

30000

可选

CLEAR_MEMORY

0x10

30000

可选

PROGRAM

0x18

100

可选

PROGRAM_6

0x22

100

可选

MOVE

0x19

30000

可选

TEST

0x05

25

可选

GET_ACTIVE_CAL_PAGE

0x09

25

可选

START_STOP_ALL

0x08

25

可选

DIAG_SERVICE

0x20

500

可选

ACTION_SERVICE

0x21

5000

可选

如果ECU内部不支持DAQ通信模式,则以下指令也是可选命令:GET_DAQ_SIZE、SET_DAQ_SIZE、WRITE_DAQ、START_STOP。如果使用了SELECT_CAL_PAGE指令,则GET_ACTIVE_CAL_PAGE指令也是必须的。

    1. ERR代码

CRM-DTO的ERR代码指示了CRO命令的执行情况,事件消息中的ERR代码表示ECU内部发生的错误类型,CCP协议对ERR代码的定义见表2。

表2  ERR代码列表

代码

描  述

错误等级

备  注

0x00

确认/无错误

--

无(等待直到ACK或时间溢出)

0x01

DAQ处理器超载

C0

无(等待直到ACK或时间溢出)

0x10

指令处理器忙

C1

无(等待直到ACK或时间溢出)

0x11

DAQ处理器忙

C1

无(等待直到ACK或时间溢出)

0x12

内部超时

C1

无(等待直到ACK或时间溢出)

0x18

请求密钥

C1

无(等待直到ACK或时间溢出)

0x19

阶段状态请求

C1

无(等待直到ACK或时间溢出)

0x20

冷启动请求

C2

冷启动

0x21

标定数据初始化请求

C2

标定数据初始化

0x22

DAQ列表初始化请求

C2

DAQ列表初始化

0x23

更新代码请求

C2

(冷启动)

0x30

未知指令

C3

(错误)

0x31

指令句法错误

C3

错误

0x32

参数超出许可范围

C3

错误

0x33

访问被拒绝

C3

错误

0x34

超载

C3

错误

0x35

访问锁定保护

C3

错误

0x36

资源/功能暂不可用

C3

错误

对于CRM-DTO,当ERR代码为0x00时表示对CRO命令的确认及命令的正确执行,如返回其他值,则根据上表的含义分析问题。如果ECU没有收到CRO命令的情况下发生错误,会直接以事件消息发送错误代码来进行相应错误处理。CCP协议对错误等级及应对措施规定如表3所示。

表3  错误等级分类及措施

级别

描  述

措  施

重试次数

超时

无握手信号

重试

2

C0

警告

--

--

C1

伪错误(comm错误,忙,……)

等待(ACK或超时)

2

C2

可修复的(温度,掉电……)

初始化

1

C3

不可修复的(重启,超载……)

终止

--

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值