博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CCP浅谈
阅读量:5036 次
发布时间:2019-06-12

本文共 2970 字,大约阅读时间需要 9 分钟。

说明


  • 如果想详细了解CCP,可以下载或者
  • 本文不涉及到专业的知识讲解,如果想查看更加专业的知识可以选择看完以上任意一个文档。这里旨在用通俗易懂的文字描述。

CCP简介

CCP(CAN Calibration Protocol),中文:CAN标定协议,顾名思义就是基于CAN总线的一种应用层协议。

  • 以下是网络的标准版解释:
    CCP是一种基于CAN总线的ECU标定协议,已经在许多欧美汽车厂商得到应用,采用CCP协议可以快速有效地实现对汽车电控单元的标定。
  • 以下是我的理解:CCP协议就是一种基于CAN通信的协议,类似于UDS协议,均是基于CAN报文来传输数据,不能脱离CAN报文的限制。

CCP can do this...

  • Read
    • RAM
    • PORTS
    • ROM
    • FLASH
  • Write
    • RAM
    • PORTS
    • FLASH

CCP 通信

557805-20160518220725716-1867475057.png

基于CCP协议的ECU标定,是采用主-从通信方式。大体的可以简化为如下的几步:

  • 选择哪一个从机进行连接
  • 选择控制方式
  • 接收数据
  • 断开连接

CCP 报文

CCP有如下两种报文

557805-20160518220618044-1453222707.png

  • CRO: Command Receive Object , 即命令接收对象
  • DTO: Data Transmission Object,数据传输对象。

联想到是主-从通信模式,所以很好的CRO就是命令,DTO就是报告的消息了。详情可参考图片:

CCP 工作模式

CCP有两种工作模式:

  • Polling(查询模式):你一问,我一答。
  • DAQ(Data Acquisition)模式:可以理解为托管,即主机设定好相关的传输规则(后续会说),从机根据该规则进行自动的发送消息。
  • 详细可参考该图:
    557805-20160518220653638-1842853397.png

CCP 报文帧格式

由于是基于CAN总线协议的,所以逃不开这些东西,所以,CAN ID是必须要的。那么对于CCP本身,有用的部分就是数据场,即一个8个Byte的数组。鉴于UDS也是基于CAN的应用程序协议,并且其有多帧传输的功能,着重说明,CCP是一帧一帧发送的。不存在拼接两个帧数据的情况。

对于CCP报文格式,分两部分进行说明。

CRO

557805-20160518220755138-1630757071.png

Command + CTR + Data

  • Command: 就是一些列的命令标号了,这个是人为规定的,就是协议定为多少就是多少。
  • CTR:Counter就是一个计数用的。
    • 所以,一个有效的命令参数位为6位,那么6位能够表示什么?后面就会知道了。

DTO

其格式为:

557805-20160518220954560-849679855.png
557805-20160518221003951-339301613.png

上面说了,ECU回复的消息有两种,这里添加一种错误处理。即可以回复信息的种类为3种:

  • CRM : Command Return Message
    • 对命令的直接回答
  • Event Message
    • 检测到自身错误的一种事件型消息
  • Data Acquisition Message
    • 从设备自动上传的一种消息

既然DTO自由一个ID,那么如何区分是是属于那种信息?当然不同的协议有不同的判断标准。CCP是利用第一个数据即一个Byte来判断的。

  • 0xFF:CRM
  • Event:0xFE
  • 其他的就是DAQ的。后面会谈这个是如何实现的。

DAQ List

什么是DAQ List?就是从设备支持的DAQ的上传表,至于上传表里面有哪些元素?元素的属性是什么?这个就需要慢慢了解了。

DAQ属性

为什么需要划分DAQ?在ECU中对CAN信号有一个周期处理的概念,这里就是通过对标定数据的采样和上传周期来区分是那个DAQ的,可以理解为:同一个DAQ,采样和上传的周期是一样的。

周期又是如何确定的?

这就涉及到两个名词:Event Channel事件通道和prescaler预分频值。

事件通道可以理解为:每多少ms,ECU打通一次该通道,或者说触发一次。如果是10ms,表明ECU每10ms触发一次该事件。
预分频值可以理解为:我们以事件通道的时间为基准进行分频,这样就可以复用事件通道了。即如果20ms的周期进行上传,预分频值设定为2.如果是50ms的周期进行上传,预分频值设置为5就可以了。

DAQ包含元素

通过了解,CCP只能通过单帧进行数据/命令传输,所以,对消息的组织有一定的要求,抛开一些附带的解析符和验证符以外,能够表示信息实在有限。故,一条报文就简单的表示一个信息。在一个DAQ中,包含有多个ODT,我们可以称其为ODT列表。那么这个ODT列表是做什么的?

ODT列表

每一个DAQ是通过ODT来组成的。那么ODT又是什么?就是传输数据的基本信息框架。

我们知道,一个DAQ-DTO传输的数据是7Byte,那么这7个数据记录在哪里?主机如何知道当前pid所带的信息对应到的是哪一个数据?那么,这里就需要借助ODT了。

  • 元素
  • 地址
  • 数据长度
    那么,一个ODT里面最多有7个元素,一个ODT中所有元素的数据长度最多为7Byte。因为再多的话,一个PID就封装不进去了。(如果有压缩算法的话)

以上关于DAQ list相关的说明,可以参考下面的图来进行理解:

557805-20160518221221138-2080966923.png

这里为什么每个PID里面有7个元素,因为很多情况下,限定了每个元素的数据长度为1,所以一个ODT正好可以放入7个数据元素。

ODT个数

通过PID知道,ECU支持的最大的ODT列表的个数是有限制的。0x00-0xFD,当然,如果想支持多一点也是没有问题的。那就只能修改协议了。比如,当pid为0x00的时候,需要根据第二位来判断上传的是什么数据,即pid[2]!

MTA

英文全称 :Memory Transfer Address

其中存在两个,即MTA0,MTA1.

  • MTA0:可以理解为,主地址,即CCP主要通过该地址来查询/操作数据。
  • MTA1:可以理解为辅助地址,即只有在特定的情况下,用来临时代替/辅助MTA0进行数据捕获/操作的。

值得注意的是,MTA0一般都会随着命令的执行而自动定位在执行以后的地方,除非特殊情况。详细的请参考具体的Command.

错误处理

在错误代码上有几个等级。

  • C0:警告
  • C1:伪错误
  • C2:可修复错误
  • C3:不可修复

在CCP里面具体定义了几种等级的所属范围。我觉得有点像学校的校规:记小过,记大过,警告,通报批评,开除等等。

ASAP

ASAP有3种,名字起的也是够随意,直接用1,2,3来标定。

  • ASAP1
    • MCD-ECU之间的接口规范
  • ASAP2
    • ASAP描述文件,是电子控制单元内部数据的描述文件。简单一点就是,这个变量在ECU里面的地址是多少,单位是多少,怎么换算得来的等等。不然,只有一堆的数字而没有解析数据的规则是没有一点意义的。
  • ASAP3
    • 自动测试系统-MCD之间的接口规范

命令

这里不主要说命令,但会说一些。

  • 解锁
    • 很多功能都需要解锁才能使用。不然,对于ECU来说,这就是控制成本和控制销售价格的好方法。当然,这里主要是做保护,总不能让你什么都可以更改吧。
  • 数据1-5传输和固定6传输
    • 对于传送数据在1-5之间的话,需要有个变量来表明当前一帧报文到底传送了多少个数据。
    • 对于固定传输6个数据的话,很显然是没有必要有上面的变量的。
    • 协议
  • 设置DAQ列表
    • 涉及到设置DAQ指针。
    • ODT信息配置等,后续程序里面会涉及的多一些。

转载于:https://www.cnblogs.com/ply616/p/5506959.html

你可能感兴趣的文章
jquery.lazyload延迟加载图片第一屏问题
查看>>
HDU 1011 Starship Troopers (树形DP)
查看>>
手把手教你写DI_1_DI框架有什么?
查看>>
.net常见的一些面试题
查看>>
OGRE 源码编译方法
查看>>
上周热点回顾(10.20-10.26)
查看>>
C#正则表达式引发的CPU跑高问题以及解决方法
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了...
查看>>
APScheduler调度器
查看>>
设计模式——原型模式
查看>>
【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
查看>>
如何一个pdf文件拆分为若干个pdf文件
查看>>
web.xml中listener、 filter、servlet 加载顺序及其详解
查看>>
前端chrome浏览器调试总结
查看>>
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>