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

news2024/12/28 20:01:06
  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

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

终止

--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual modflow Flex地下水数值模拟教程

详情点击链接:Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析 一,地下水数值软件的操作流程、建模步骤和所需资料处理 [1] Visual MODFLOW Flex特征[2] Visual MODFLOW Flex软件界面及模块 [3] 地…

详细讲解接口自动化攻略

目录 前言: 为什么要做接口自动化 问题在哪里 全靠参数化 接口间参数传递 测试数据参数化 测试断言 测试管理 导入测试用例 接口执行顺序 使用测试数据集 测试参数配置 运行结果&测试报告 测试套件 前言: 接口自动化是提高测试效率和…

ThreadX在gcc下的移植

本文介绍ThreadX在arm-none-eabi-gcc编译器下的移植方法。 1、ThreadX介绍和源码获取 threadx的介绍和源码获取请参考之前的博文:ThreadX在mdk(AC5)中的移植。 2、准备工作 本篇主要介绍threadx在corex-m7上的移植,编译器使用arm-none-eabi-gcc。 在…

智能井盖传感器:以科技破解城市顽疾

在城市的道路网络中,井盖扮演着重要的角色,用于覆盖下方的管道和设施,然而,由于井盖的老化、损坏或被盗,常常会导致安全问题的发生,如路面塌陷、行人受伤等。井盖的状态监测和维护一直是城市管理者面临的挑…

2023年8月PMP考试,考生需要关注这些!

经PMI和中国国际人才交流基金会研究决定,中国大陆地区2023年第三期PMP认证考试定于8月19日举办。考生须认真阅读下文,知悉考试安排及注意事项,并遵守考试有关规定。 考生须认真阅读下文,知悉考试安排及注意事项,并遵守…

阿里推出了一个集成AI的数据库客户端,霸榜GitHub

背景 📖 简介    Chat2DB 是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力,能够将自然语…

基于vue的可拖拽设计的报表看板设计器

gitee上的不错项目,基于vue实现的可拖拽的看板设计器可以自由搭配颜色和图标,开发者可以只关注业务数据接口,前端不擅长的人员可以直接轻松上手。 1.可支持的元素 文字,边框,常见图表,柱形图,…

pgsql查询分页不对和属性转json的mapper映射

pgsql查询分页不对和属性转json的mapper映射 第一种: select * from xxx left join (selectarray_agg(jsonb_build_object(labelId,dl.label_id,labelName,dl.label_name)) as labelList,array_agg(dl.label_name) as labelNames,array_agg(dl.label_id) labelIdLi…

使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章

文章目录 介绍:界面展示知识点详解导入相关模块设置Chrome驱动程序的路径创建ChromeDriver服务和启动Chrome浏览器发送GET请求获取网页内容模拟向下滚动加载更多内容获取完整的HTML内容关闭浏览器使用正则表达式提取文章信息构建数据表格和导出到Excel 扩展知识点代…

HTTP中的API是什么?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是API&#xf…

活动选择问题|贪婪算法-1

贪婪是一种算法范式,它一点一点地构建解决方案,总是选择下一个提供最明显和最直接好处的部分。贪婪算法用于优化问题。 如果优化问题具有以下属性,则可以使用贪婪解决该问题: 在每一步中,我们都可以做出一个目前看起来…

scrapy学习(scrapy项目学习)

创建scrapy项目 创建爬虫项目 scrapy startproject ss1_miove创建爬虫文件&#xff08;&#xff09; 命令格式&#xff1a;scrapy genspider <爬虫名称> <网站域名> scrapy genspider ss1_scrapy ssr1.scrape.centerscrapy框架的组成 spider文件夹&#xff1a…

ELK之Elasticsearch7.17.4安装(yum方式)和三节点集群配置

一、下载Elasticsearch7.17.4 的rpm包 下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-4 二、建立elasticsearch的yum源 vim /etc/yum.repos.d/es.repo [elasticsearch] nameElasticsearch repository for 7.x packages bas…

IO多路复用之poll

文章目录 一&#xff1a;poll函数接口参数说明&#xff1a;返回结果&#xff1a; 二&#xff1a;poll的优缺点优点&#xff1a;缺点&#xff1a; 三&#xff1a;poll代码示例 一&#xff1a;poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, i…

Java设计模式之行为型-模板方法模式(UML类图+案例分析)

目录 一、概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执…

信驰达科技携手TI将CC2340推向更广市场领域

根据蓝牙技术联盟&#xff08;Bluetooth SIG&#xff09;2023年最新发布《2023年蓝牙市场最新资讯》&#xff0c;市调机构ABI Research预测数据显示&#xff0c;蓝牙市场在未来五年将会实现高增长&#xff0c;蓝牙设备年出货量将保持强劲增长势头&#xff0c;预计到2027年将达7…

python高频函数—CSV() 读写

Part.1 csv.reader()函数 csv.reader(csvfile, dialectexcel, **fmtparams) 返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。 一个简短的用法示例: >>> import csv>>> with open(eggs.csv, newline) as csvfile:... spamreader csv.r…

ctrl键的作用

crtl是control的英文缩写&#xff0c;是控制的意思&#xff0c;长和其他键组合起来使用&#xff0c;达到快捷操作的功能。 例如&#xff1a;ctrlX是剪切的功能&#xff0c;ctrlP是打印设置&#xff0c;ctrlZ是撤销&#xff0c;ctrlF是查找&#xff0c;ctrlY是恢复的功能等。 …

在野外使用无线电台的必知事项

电台属于无线通信设备的一种&#xff0c;主要用于发送和接收无线电信号&#xff0c;实现语音、数据和图像等信息的传输。它一般是由发射机和接收机两部分组成&#xff0c;能够在不同的频段和频率上进行通信。通过无线电波传输信息&#xff0c;为人们在不同场景中提供可靠的远距…

11.Rocket解决分布式事务

highlight: arduino-light 两阶段提交协议 原文链接&#xff1a;https://blog.csdn.net/fenglibing/article/details/92417739 两阶段提交协议(Two-phase Commit&#xff0c;2PC)经常被用来实现分布式事务。一般分为协调器TC和若干事务执行者两种角色&#xff0c;这里的事务执行…