CCP浅谈
说明
- 如果想详细了解CCP,可以下载
AN-AMC-1-102_Introduction_to_CCP.pdf
或者ccp211.pdf
- 本文不涉及到专业的知识讲解,如果想查看更加专业的知识可以选择看完以上任意一个文档。这里旨在用通俗易懂的文字描述。
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 通信
基于CCP协议的ECU标定,是采用主-从通信方式。大体的可以简化为如下的几步:
- 选择哪一个
从机
进行连接 - 选择控制方式
- 接收数据
- 断开连接
CCP 报文
CCP有如下两种报文
CRO
: Command Receive Object , 即命令接收对象DTO
: Data Transmission Object,数据传输对象。
联想到是主-从通信模式
,所以很好的CRO就是命令,DTO就是报告的消息了。详情可参考图片:
CCP 工作模式
CCP有两种工作模式:
- Polling(查询模式):你一问,我一答。
- DAQ(Data Acquisition)模式:可以理解为托管,即主机设定好相关的传输规则(后续会说),从机根据该规则进行自动的发送消息。
- 详细可参考该图:
CCP 报文帧格式
由于是基于CAN总线协议的,所以逃不开这些东西,所以,CAN ID是必须要的。那么对于CCP本身,有用的部分就是数据场,即一个8个Byte的数组。鉴于UDS也是基于CAN的应用程序协议,并且其有多帧传输的功能,着重说明,CCP是一帧一帧发送的。不存在拼接两个帧数据的情况。
对于CCP报文格式,分两部分进行说明。
CRO
Command + CTR + Data
- Command: 就是一些列的
命令
标号了,这个是人为规定的,就是协议定为多少就是多少。 - CTR:Counter就是一个计数用的。
- 所以,一个有效的命令参数位为6位,那么6位能够表示什么?后面就会知道了。
DTO
其格式为:
上面说了,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相关的说明,可以参考下面的图来进行理解:
这里为什么每个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信息配置等,后续程序里面会涉及的多一些。
CCP浅谈的更多相关文章
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
随机推荐
- MSSQL数据库索引的应用
一.索引的概念 索引就是加快检索表中数据的方法.数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程序迅速地找到表中的数据,而 ...
- C#如何把List of Object转换成List of T具体类型
上周码程序的时候碰到个问题,因为设计上的约束,一个方法接受的参数只能为List<object>类型,然而该方法需要处理的真实数据则是确定的List<Currency>.然而C# ...
- Yii2 执行流程
原文地址: http://www.cnblogs.com/cresuccess/p/4874330.html
- QQ空间HD(3)-Modal的切换效果总结
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UIViewController ...
- 弹出框二 之 bootbox.js
1.可以通过Nuget下载 2.引入 jquery bootstrap bootbox.js 3.使用 $(function () { //bootbox.alert("确认删除" ...
- Scala 中object和class的区别
Scala中没有静态类型,但是有有“伴侣对象”,起到类似的作用. Scala中类对象中不可有静态变量和静态方法,但是提供了“伴侣对象”的功能:在和类的同一个文件中定义同名的Object对象:(须在同一 ...
- Request 传值 遇到的中文乱码问题
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xxxx.aspx.cs&quo ...
- Jquery控制滚动显示欢迎字幕v2
Jquery控制滚动显示欢迎字幕v2: 之前做的那个比较适合测试环境,但要套入到网站中,有两个按钮在那摆着,还是不太好看.后面对代码进行了修改,如下: 参考代码: <html> <h ...
- 清北暑假模拟day1 生活
/* 数字三角形,要求第K大的值,可以推知,如果得知k的范围,那么一定是在上一行可转移状态的对应范围内(反证法可以证明),这个在背包九讲里也有提及 */ #include<cstdio> ...
- redhat 下 rpm 指令
1.如何安装rpm软件包rmp软件包的安装可以使用程序rpm来完成.执行下面的命令 rpm -i your-package.rpm 其中your-package.rpm是你要安装的rpm包的文件名,一 ...