CCP学习二——通信流程

2023-11-08

1 概述

  CCP通信按信息传输方式分为:POLLING(问答)和DAQ方式
  按功能模式分为三种:SESSION(会话)、CAL(标定)、DAQ(查询)
  工作流程一般为,程序初始化完成后,通过SET_S_STATE设置节点当前工作状态(Session/CAL/DAQ),若触发CAL和DAQ,需要在初始化时对该功能进行初始化。
  正常情况下设置为会话模式(SESSION),需要CAL和DAQ时在进行初始化。
        在CCP通信流程
可以看出CCP通信协议的分为这四大模块,初始化、会话、标定、DAQ数据传输

PS:“冷启动”包含:
① 连接:建立主从设备之间的逻辑连接,
② seed&key 登录程序,
③ 自动会话配置(EXCHANGE ID),除非被覆盖,
④ 自动代码更新,如果主设备支持。

1.1.初始化

应用程序完成CAN Driver初始化后,调用CCP功能前需要对其进行初始化,按顺序如下:

命令 描述 备注
TEST 物理连接 测试是否物理连接建立起来,返回ECU的station address,该命令在可选命令中
CONNECT 通信连接 建立点对点(master-slave)的物理链接,声明接下来的命令都是针对当前从节点发送的,直到另一从节点被选中,此时当前的节点处于暂时断开状态。从设备不响应任何指令,除非先用带正确station address信息的CONNECT命令链接。
GET_CCP_VERSION 获取CCP版本 协议三原则:大版本号一定要相同;小版本号主节点大于等于从节点主节点支持有Non-Optional命令(初始化)
EXCHANGE_ID 交换ID CCP主站和从站交换id以实现自动会话配置。根据从服务器返回的ID,可能包含自动分配数据采集设置文件(Plug’n’Play)。
GET_SEED 获取SEED EXCHANGE_ID 执行完后,自动将MTA0设置到相关位置,接到该命令后返回SEED,用来加密交互。
UNLOCK 发送KEY解锁 与SEED和加密style配合,计算出Key,返回功能权限信息,三种权限CAL、DAQ及PGM需要三次破解。
SET_S_STATUS 设置状态位 设置ECU内CCP通信状态,一般进入等待状态。bit 0  CAL初始化完成; bit 1  DAQ初始化完成 ;bit 2  保存DAQlist设置,上电开始传输;bit 6  CAL参数掉电不丢失 ;bit 7  Session in progress

解锁完成后,依据任务的分配,系统工作状态可以设置为以下三种状态:

  • ① 等待会话状态,接收命令,触发命令操作
  • ② 继续初始化CAL和DAQ,例如:设置DAQ掉电不丢失,上电自动传输,此时需要设置为DAQ初始化完成状态
  • ③ DISCONNECT,休眠当前节点。多ECU并行工作时,初始化时把所有节点都初始化,断开连接把每个ECU设置为休眠状态,通过CONNECT再唤醒具体ECU,切换工作。单节点工作时不需要此命令,直接进入某种工作状态。
1.2.会话状态

会话状态主要定义具体应用协议,接受具体代码,执行相关命令,返回结果数据。典型函数两条:

  • ACTION SERVICE:行动响应(Action Service)
  • DIAG SERVICE:诊断服务(Diagnostic Service)

  都是先发送协议命令,从节点接收到命令信息后按照执行具体行动,并自动设置MTA0到要返回的数据存储首地址,通过DTO带回要返回信息长度。信息量大时调用UPLOAD读取,信息量小于3bytes,直接附在DTO未定义位返回,例如执行结果,增加执行效率。
  UPLOAD、DNLOAD两个函数也可以实现会话服务,但传递数据需要先调用SETMTA指定具体存储地址,容易造成内存区存储混乱,且传输效率低,主要应用于批量数据传输。而
ACTION SERVICE和DIAG SERVICE传递的是握手信息,不需要明确传递参数的具体存储地址。DNLOAD 6相同。
  SHORT UP与UPLOAD命令区别在于和MTA0无关,
CRO自带存储区首地址,且执行完后MTA0不自增,适用于小量单次数据上传。

2.CCP具体功能的实现例子

2.1.Session log-in

CONNECT (逻辑连接)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

GET_CCP_VERSION (版本一致)

CRO 0x1B 0x27 0x02 0x01
DTO 0xFF 0x00 0x27 0x02 0x01

EXCHANGE_ID (交换身份标识)

CRO 0x17 0x23
DTO 0xFF 0x00 0x23 0x04 0x02 0x03 0x03

GET_SEED (得到秘钥种子,返回秘钥)

CRO 0x12 0x23 0x02
DTO 0xFF 0x00 0x23 0x01 0x14 0x15 0x16 0x17

UNLOCK (通过接收到的秘钥,解除保护)

CRO 0x13 0x23 0x14 0x15 0x16 0x17
DTO 0xFF 0x00 0x23 0x02

SET_S_STATUS (设置会话状态,设置一个或多个状态位)

CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23

2.2.Calibration Data Initialization
CONNECT (连接,如果已经连接,跳过)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

SET_S_STATUS (设置会话状态(xxxx xxx0)CAL=off)

CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23

Loop
SET_MTA (设置内存传输地址到目的块)

CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23

BUILD_CHKSUM (构建内存块的校验和)

CRO 0x0E 0x23 0x00 0x00 0x80 0x00
DTO 0xFF 0x00 0x23 0x02 0x12 0x34

DOWNLOAD (下载,如果校验和不匹配)

CRO 0x03 0x23 0x05 0x10 0x11 0x12 0x13 0x14
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x05

SELECT_CAL_PAGE (选择标定数据页)

CRO 0x11 0x23
DTO 0xFF 0x00 0x23

SET_S_STATUS (设置会话状态 bit CAL=1(xxxx xxx1))

CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23

2.3.DAQ list Initialization
CONNECT (连接,如果已经连接,跳过)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

SET_S_STATUS (设置会话状态 DAQ=0(xxxx xx|0x))

CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23

GET_DAQ_SIZE (分配DAQ列表,参考Organization of DAQ)

CRO 0x14 0x23 0x03 ------ 0x01 0x02 0x03 0x04
DTO 0xFF 0x00 0x23 0x10 0x08

Loop
SET_DAQ_PTR (设置目标指针)

CRO 0x15 0x23 0x03 0x05 0x02
DTO 0xFF 0x00 0x23

WRITE_DAQ (写列表数据)

CRO 0x15 0x23 0x02 0x01 0x02 0x00 0x42 0x00
DTO 0xFF 0x00 0x23

SET_S_STATUS (设置会话状态 DAQ=1(xxxx xx1x))

CRO 0x0C 0x23 0x81
DTO 0xFF 0x00 0x23

STATRT_STOP (开始DAQ- DTOs的数据传输,设置参数)

CRO 0x06 0x23 0x01 0x03 0x07 0x02 0x00 0x01
DTO 0xFF 0x00 0x23

2.4.Code Update
CONNECT (连接,如果已经连接,跳过)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

SET_MTA (设置内存传输地址到开始地址)

CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23

CLEAR_MEMORY (清除从设备的内存)

CRO 0x10 0x23 0x00 0x00 0x80 0x20
DTO 0xFF 0x00 0x23

Loop
PROGRAM (程序 取决于扇区或设备的大小)

CRO 0x18 0x23 0x03 0x10 0x11 0x12
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x03

PROGRAM (SIZE=0,程序结束)

CRO 0x18 0x23 0x03 0x10 0x11 0x12
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x03

2.5.Block DownLoad
CONNECT (连接,如果已经连接,跳过)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

SET_MTA (设置内存传输地址到目的块)

CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23

DOWNLOAD (下载,相应的数据块大小被下载)

CRO 0x03 0x23 0x05 0x10 0x11 0x12 0x13 0x14
DTO 0xFF 0x00 0x23 0x02 0x34 0x00 0x20 0x05

2.6.Block UpLoad
CONNECT (连接,如果已经连接,跳过)

CRO 0x01 0x45 0x00 0x02
DTO 0xFF 0x00 0x45

SET_MTA (设置内存传输地址到源数据块)

CRO 0x02 0x23 0x00 0x02 0x34 0x00 0x20 0x00
DTO 0xFF 0x00 0x23

UPLOAD (上传)

CRO 0x04 0x23 0x04
DTO 0xFF 0x00 0x23 0x10 0x11 0x12 0x13

3.附录:
错误码矩阵
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CCP学习二——通信流程 的相关文章

随机推荐

  • 华为OD机试 - 数大雁(Python)

    题目描述 一群大雁往南飞 给定一个字符串记录地面上的游客听到的大雁叫声 请给出叫声最少由几只大雁发出 具体的 1 大雁发出的完整叫声为 quack 因为有多只大雁同一时间嘎嘎作响 所以字符串中可能会混合多个 quack 2 大雁会依次完整发
  • OSPF详解(HCIP)

    学习目标 1 了解OSPF基本特性 2 了解OSPF邻接关系建立流程 3 了解OSPF报文 4 了解1类到7类LSA 5 OSPF矢量图画法 6 OSPF不规则区域解决方法 7 OSPF网络类型 8 OSPF特殊区域特性 一 OSPF基本特
  • JAVA 记录内网服务通过外网服务获取文件流

    公司项目遇到 对接第三方接口时需要根据链接获取网络文件保存到我们自己的服务器 但是本服务无法访问外网 只能通过请求另一个服务去访问外网 故准备由外网服务获取网络文件并将文件流推送回内网服务进行保存 外网服务接口 RestController
  • 华为OD机试 C++【代表团坐车】

    题目 一场大会上 有好几个代表团同时到达 接待处的问题是 只有一辆车去接 而这车的座位是有限的 你的任务是帮助接待员算出 有多少种方法可以让这车的座位恰好坐满 不多也不少 限制条件 每个代表团的人数都不会超过车的总座位数 每个代表团的人数和
  • 算法:图解位运算以及鸽巢原理应用

    文章目录 实现原理 基础位运算 位图思想 找最右侧数 按位异或 算法思路 典型例题 基础位运算 只出现一次的数字 只出现一次的数字III 经典题型 判断字符是否唯一 两整数之和 只出现一次的数字II 消失的两个数字 鸽巢原理 总结 本篇总结
  • visual studio2019下配置openCV

    openCV系列文章目录 文章目录 openCV系列文章目录 前言 一 解决办法 二 使用步骤 1 引入库 2 读入数据 运行结果 注意 工程源码下载 前言 我们使用CMake编译openCV源码 后会生成lib dll库 但是我发现在我的
  • emoji表情符号有时不能正常显示的问题的解决方案

    1 emoji表情符号应用场景及遇到的问题 emoji表情符号使用的场景 前端页面将用户带有emoji表情符号的留言发送给后端保存后 前端页面从后端获取留言再次展现 但是到再次从后端获取留言展示时 emoji表情符号不能正确展示 估计是后端
  • 操作系统第一章操作系统引论作业

    操作系统第一次课程作业 1 如果计算机不配操作系统 用户编写程序与运行程序需经历怎样的过程 需要人工操作 需要编写机器语言 需要脱机输入输出 2 什么是操作系统 它有什么基本特征 列举4种操作系统的名称 操作系统是管理计算机硬件与软件资源的
  • AcDbTable

    AcDbTable pTab new AcDbTable AcGePoint3d pInsert AcGePoint3d 0 0 0 AcDbDictionary pDict NULL 格式设置 AcDbObjectId idTblStyl
  • 简述for in 和 for of 的区别

    1 推荐在循环对象属性的时候使用 for in 在遍历数组的时候的时候使用 for of 2 for in 循环出的是 key for of 循环出的是 value 3 注意 for of 是 ES6 新引入的特性 修复了 ES5 引入的
  • Python科学计算的瑞士军刀——Anaconda 安装与配置

    Introduce Python是一种强大的编程语言 其提供了很多用于科学计算的模块 常见的包括numpy scipy和matplotlib 要利用Python进行科学计算 就需要一一安装所需的模块 而这些模块可能又依赖于其它的软件包或库
  • 数据库优化、索引【面试题】

    目录 数据库调优的目标 索引覆盖是什么 最左缀原则是什么 哪些因素可能会造成Mysql性能问题 如果sql语句需要使用联表查询我们如何进行优化呢 Mysql常见优化手段 你从哪些方面去优化你的数据库 一个页面响应很慢 你按照什么顺序去排查
  • java 微信请求_微信小程序请求微信api授权登录(Java后端)

    1 小程序端调用wx login 获取到微信返回的code临时凭证 2 小程序端调用我方的后台接口 Java后端调用微信的api 需要appId appSecret js code grant type authorization code
  • 简单易用的公司网页模板,助您快速建站

    在当今数字化时代 拥有一个高质量的公司网页是每个企业成功的关键 然而 对于那些没有技术专业知识的人来说 创建一个专业的网页可能是一项艰巨的任务 但是 现在有许多简单易用的公司网页模板可用于帮助您快速建站 下面 我们将简单地介绍一下如何利用这
  • 合并链表(C++)

    合并两个排序的链表 剑指Offer 25 问题描述 输入两个递增排序的链表 合并这两个链表并使新链表中的节点仍然是递增排序的 示例 输入 1 gt 2 gt 3 1 gt 3 gt 4 输出 1 gt 1 gt 2 gt 3 gt 4 gt
  • 【毕业设计】Python_基于DFM模型AHP算法的学生消费行为分析

    资源下载 https download csdn net download wouderw 87402799 1 分析学生消费行为的目的 1 分析学生的消费行为和食堂的运营状况 为食堂运营提供建议 2 根据学生的整体校园消费行为 选择合适的
  • DOTA: A Large-scale Dataset for Object Detection in Aerial Images 翻译

    DOTA 用于航空图像中目标检测的大规模数据集 原文 https arxiv org pdf 1711 10398 pdf 官网 https captain whu github io DOTA dataset https captain
  • 链栈的实现--C 语言版,详细讲解+代码实现

    顺序栈的实现 C 语言版 详细讲解 代码实现 例如 第一章 Python 机器学习入门之pandas的使用 文章目录 顺序栈的实现 C 语言版 详细讲解 代码实现 前言 一 结构体定义 二 操作步骤 1 初始化 2 判断栈是否为空 3 入栈
  • 悬铃木超级计算机,陈根:“九章”攻擂“悬铃木”,快一百亿倍的量子霸权

    文 陈根 2019年 谷歌率先宣布实现 量子霸权 量子优越性 一把把量子计算推入公众视野 激起量子计算领域的千层浪 就在近日 中国团队宣布量子计算机 九章 问世 挑战谷歌 量子霸权 实现算力全球领先 九章 作为一台76个光子100个模式的量
  • CCP学习二——通信流程

    1 概述 CCP通信按信息传输方式分为 POLLING 问答 和DAQ方式 按功能模式分为三种 SESSION 会话 CAL 标定 DAQ 查询 工作流程一般为 程序初始化完成后 通过SET S STATE设置节点当前工作状态 Sessio