深入浅出: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

相关文章

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备