深入浅出:CAN通信之CCP协议

2023-10-08 18:30
文章标签 协议 深入浅出 通信 ccp

本文主要是介绍深入浅出:CAN通信之CCP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CCP(CAN Calibration Protocol) CAN标定协议(用于标定系统与ECU之间的通信)

CCP协议在应用层,使用CAN的数据帧来传输命令
在这里插入图片描述

CRO数据帧(主设备向从设备发送)

CRO报文:CCP报文帧格式为CMD + CTR + DATA,即Command、Counter、Data,其中Command是一些列的命令标号,为人为规定,Counter计数用,Counter根据发送消息的先后顺序进行赋值,例如第一条发送的CRO其CTR为01,相对应的,从机对其进行应答的相应报文的CTR值也应该为01,第二条的CTR值为02,以此类推。CCP协议共规定了28条命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPAXq7vf-1682574673463)(D:\ScreenShoot\2345_image_file_copy_20230415_1.jpg)]

  • CRO命令的第一个字节为CMD,命令代码,命令表一共有28条命令
  • CRO命令的第二个字节为CTR,命令计数器,由上位机计数
  • CRO命令的剩余六个字节为命令参数,每个命令有不同参数

在这里插入图片描述

DTO(从设备向主设备发送)

DTO报文:分为三种类型报文,分别是CRM-DTO(命令返回消息),EVENT-DTO(事件消息),DAQ-DTO

CRM类型:用于反馈CRO命令的报文

CRM-DTO发生在Polling模式下,是针对主设备发送的CRO消息的应答

第一个字节为PID,表示类型,CRM类型为0xff
第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,CRM类型就对应0x00
第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来
剩余的五个字节为参数
在这里插入图片描述

Event Message类型:用于反馈错误的报文

EVENT-DTO事件消息发生在ECU内部错误时由ECU主动发送,这类DTO不需要事先收到主设备的CRO,一旦ECU发生内部错误,会主动向主设备发生这一消息,报告内部情况。

第一个字节为PID,表示类型,EM类型为0xfe
第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,EM类型对应命令返回码表除0x00的剩余17条命令
第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来
剩余的五个字节为参数

在这里插入图片描述

CRM-DTO和EVENT-DTO共用上一种报文结构,第一个字节PID(data packet ID)用于判断报文属于那一类型,PID = 0xFF为CRM(正常命令的被动响应),PID = 0xFE(错误事件的主动响应)为EVENT,其它的都是DAQ,第二个字节ERR(error code),第三个字节为代码指令计数器CTR,其它字节为指令代码相关的返回参数和数据

DAQ类型:用于定期反馈数据

DAQ-DTO(数据采集)报文除了第一个字节为PID外,其余字节都是返回数据
在这里插入图片描述

在这里插入图片描述

基本概念

  • ECU

    Electronic Control Unit(电子控制单元):一种具有中央处理单元的电子装置,其外围电路可执行编程功能。

  • CRM

    Command Return Message(命令返回消息) : 从从设备发送到主设备的一种消息,包含命令/错误代码和命令计数器。

  • CRO

    Command Receive Object(命令接收对象) :从主设备发送到从设备的消息。

  • DTO

    Data Thansmission Object (数据传输对象):从设备发送到主设备的消息(命令返回消息或事件消息或数据采集消息)。

  • DAQ

    Data Acquisition:从从设备向主设备发送的用于从ECU快速数据采集的过程和消息的定义。

  • ODT

    Obiect Descriptor Table: 元素(变量)列表,用于组织数据采集。

DAQ列表

按照不同的上传周期,ECU内部需要多个DAQ列表。例如有三个信号,上传周期分别为10ms、20ms、30ms,那么就需要3个DAQ列表,而同一上传周期的数据/变量(OTD)都被归类在同一个DAQ列表内,这些ODT被称作ODT列表。

ODT列表

每一个ODT的最大元素数目为7,可以存放7个单字节数据变量的信息,其内容包括数据变量的存放地址,数据长度及其偏移地址。ODT列表需要通过DAQ-DTO方式才能向主设备发送,由于每一个ODT都有唯一的绝对编号,该编号即为DAQ-DTO的PID,排在最前面的ODT相对编号为0。绝对编号是对于所有ODT来说的,每一个ODT的绝对编号都不相同。相对编号是相对于当前DAQ列表而言,不同DAQ列表的ODT,其相对编号可能会相同。正是因为单帧有八字节数据,而ODT编号需要占用一字节,因此在DAQ-DTO中只剩下7字节来用于ODT的传输,而又因为CCP无法进行跨帧的数据/命令传输,所以一个ODT最大只能存储7字节数据。又因为PID的长度为8位,因此ODT的总数不能超过254个(0~0xFD)(通过修改PID长度可以增加ODT总数,但会减少单个ODT的长度)

命令编号功能
0x01CONNECT——建立连接
0x02SET_MTA——设置内存传输地址
0x03DNLOAD——数据下载
0x04UPLOAD——数据上传
0x06STOP_START——开始/停止/准备数据传输
0x07DISCONNECT——断开连接
0x08STSRT_STOP_ALL——开始/停止数据传输
0x0CSET_S_STATUS——设置Session状态
0x0DGET_S_STATUS——获取Session状态
0x0EBUILD_CHECKSUM——计算校验和
0x12GET_SEED——获取被请求资源的种子
0x13UNLOCK——解锁保护
0x14GET_DAQ_SIZE——获取DAQ list大小
0x15SET_DAQ_PTR——设置DAQ list指针
0x16WRITE_DAQ —— 写DAQ list入口
0x1BGET_CPP_VERSION——获取CCP版本

流程介绍

在这里插入图片描述

在这里插入图片描述

可提供功能:

1.随机读取ECU中RAM和ROM中的数据

2.测量数据采样

3.标定数据的采样和传输

4.同时处理多个ECU系统

5.flash编程技术

在这里插入图片描述

ECU地址(Intel格式,低字节在前)

在这里插入图片描述

错误等级:

C0:警告

C1:伪错误

C2:可修复错误

C3:不可修复

在这里插入图片描述

0x31:命令句法错误,与传输命令信息有误相关

使用CCP协议的意义:

在我们对板卡下载烧录完程序后如果我们要更改参数,则需要再次编辑编译烧录会使工作变得更加繁琐,引入CCP协议后我们可以通过CCP中的相关操作指令对RAM、PORTS、ROM、FLASH读取,写RAM、PORTS、FLASH

DAQ下的定期传输需要用到ODT(Objetc Descriptor Table,元素变量列表)

在这里插入图片描述

DAQ通信设置

在使用DAQ通信前,主设备需要对DAQ列表及ODT列表进行配置

  1. 获取ECU内部DAQ列表数量和ODT数目,DAQ列表数量由上传的数据周期决定,每个不同周期对应一个DAQ列表。ODT列表数则由每个周期下上传的数据个数及长度决定

  2. 向相应的ODT填入数字,及数据的存储地址和数据长度,随后根据类型和上传周期被写在不同DAQ的不同ODT中

  3. 上传周期由事件通道(Event Channel)和预分频值(Prescaler)决定.事件周期可以理解为ECU每多少ms触发一次,若为10,则说明ECU每10ms触发一次该事件。预分频值可以理解为:以事件通道的时间为基准进行分频,我们以此来复用事件通道。若预分频值设定为2,则将某一事件以20ms的周期进行触发,但使用的仍然是同一个DAQ列表。

  4. 启动DAQ,进行数据采集

    DAQ Initlize and Start data transmission

CommandDescriptionRemark
CONNECT (0x01)ConnectBypass, if already connected
GET_DAQ_SIZE (0x14)Get the number of ODTS in DAQ
(loop )n
SET_DAQ_PTR (0x15)Set DAQ List number,ODT List number,ODT Element(Id) number
WRITE_DAQ (0x16)Set DAQ transfer bytes,extension address(DAQ element),Address of DAQ Element
START_STOP (0x06)Set Mode select,DAQ list number,last ODT number(the current DAQ list should be transmission the last ODT number),Event channel number ,transmission prescalerprepare data tranmission
START_STOP_ALL (0x08)start data transmission
SHORT_UP(Short Upload)

在这里插入图片描述

在这里插入图片描述

实例视图在这里插入图片描述
后续会持续完善内容……

这篇关于深入浅出:CAN通信之CCP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167227

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R