【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

2023-11-17

  1. CCP协议介绍

CCP的全称是CAN Calibration Protocol (CAN标定协议),是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范,支持11位标准与29位扩展标识符。

    1. CCP通信方式

CCP协议采用主从通信方式,如上图所示,其中从设备是需要标定的ECU。根据CCP协议,一个主设备可通过CAN总线与多个从设备相连接,每个从设备均有其特定地址。主设备通过每个ECU的地址,与其建立一一对应的关系。

 

该系统主要有如下两种模式:

  • Polling模式:主设备和从设备一一对应的通信方式,即主设备询问,从设备对应回答的。当主从设备建立连接后,每次通信都是通过主设备首先发一条指令,请求从设备做出相应回应。通过返回一帧消息,提供主设备请求的数据及命令执行代码。这种通信方式实现简单,占ECU资源少,但是效率比较低。
  • DAQ模式:DAQ模式与Polling模式不同,其工作状态可以脱离主设备控制,而是按一定的时间周期自动向主设备发送数据。这种通信方式效率高,但是占用CPU资源高。
    1. CCP消息格式

CCP协议遵从CAN通信规范,所以CCP的通信都是以CAN报文的形式来传送。CCP消息统一使用8个字节数据传输,所有CCP命令和参数都被包含在8字节数据场。

CCP协议的实现包括:命令接收对象(CRO)和数据传输对象(DTO),如图1所示:

 

  • 命令接收对象(CRO)是主设备向ECU发送消息对象,包括命令代码和命令参数,结构为:

CMD

CTR

相关命令参数

CRO参数说明:

位置

类型

描  述

0

字节

命令代码=CMD

1

字节

命令序号=CTR

2…7

字节

命令参数和数据域

按照CCP协议,CRO格式是固定的8个字节,从设备接收的命令按照CMD代码进行解释说明。在Polling模式中,主设备发送的命令序号是有先后顺序,从设备的应答序号与其相同作一一对应,起到保护作用。

  • 数据传输对象(DTO)是从设备以数据包形式对应的反馈消息。可分为三类:
    1. 命令返回消息CRM,从设备对应DTO返回的回答消息。
    2. 事件消息,反应了内部从设备状态的改变,向主设备报告ECU的错误,请求进行错误纠正或其它处理。
    3. DAQ消息,是一种高速的上传模式,能够按照固定设定周期自动上传ECU有关参数和数据。

CRM和事件消息结构相同:

PID

ERR

CTR

相关命令参数

数据场各个字节说明:

位置

类型

描  述

0

字节

标识符(PID)

1

字节

错误代码(ERR)

2

字节

命令序号(CTR)

3~7

字节

命令参数和数据域

PID用来标识DTO类型,对于CRM和事件消息含义相同。ERR代码,在CRM中反映的是CRO请求执行的情况,如返回ERR为0x00,表示CRO命令正确执行。对于事件消息,ERR代码的数值表示ECU内部发生了哪种错误。

PID含义如下:

PID

定   义

0xFE

DTO是CRM

0xFF

   DTO是事件消息

0≤n≤0xFD

DTO是DAQ

当PID取值在[0,0xFD],表示是DAQ通信模式,要符合DAQ通信模式的格式:

PID

相关命令参数

    1. DAQ模式的数据通信

DAQ是一种高效的通信方式,它不依靠主设备,而是自主的按照设定的周期向主设备发送数据。DAQ通信结构包括三个部分:DAQ列表、ODT列表及DAQ~ODT。不同的上传周期决定不同的DAQ列表,有几个上传周期就有几个DAQ列表,同一个周期内的数据都包含在同一个DAQ列表中,结构如图2所示。

 

每一个DAQ列表都可以包含多个ODT列表,总的ODT个数不超过254个。每个ODT最大字节数为7个,包含7个单字节的数据信息,ODT列表中存放着需要上传的数据信息,如数据地址,数据长度及地址偏移量。

ODT列表需要转换成DAQ~ODT列表的形式才能向主设备发送数据,如图1所示。每一个ODT都有唯一的一个绝对编号,通过PID标识对应一个DAQ~ODT列表,而每一个ODT还有一个相对编号,表示其在每个DAQ列表的位置,第一个ODT编号为0。

举例如下,10ms周期间隔的DAQ列表编号为#0,20ms周期间隔的DAQ列表编号为#1,30ms周期间隔的DAQ列表编号为#2。每一个DAQ列表下有几个ODT列表,假设DAQ#0列表下对应3个ODT的相对编号为#0、#1、#2,绝对编号也为#0、#1、#2。DAQ#1列表下对应2个ODT的绝对编号为#0、#1,相对编号是承接上面DAQ#0下的ODT编号,为#3、#4,以此类推。

在使用DAQ模式进行通信时前,主设备需要对DAQ列表和ODT列表进行相关配置,具体步骤如下:

  1. 首先获取ECU内需要实现的DAQ列表数目及ODT列表数目。DAQ列表数目由上传数据的周期个数决定,ODT列表数目由所传数据的长度和个数决定。
  2. 其次向对应的ODT中添加数据内容,包括数据存储地址和数据长度。不同的数据地址、类型被写在不同的ODT中。
  3. 根据不同的上传周期,针对不同的DAQ列表赋予数据通道和预分频值。事件通道与上传周期一一对应,同一个DAQ列表使用相同的事件通道和预分频值,即同一个DAQ列表所有数据的上传周期相同,通过与分频值可以将数据的上传周期成倍扩大。
    1. CCP命令代码

CCP 协议共规定了28条命令,其中11条为必选命令,17条为可选命令。每条命令都有自己的CMD代码,从设备通过CRO中的CMD代码对接收的CCP命令进行解释并执行。CCP命令代码如表1所示。

表1  CCP命令代码表

命  令

CMD代码

ACK应答事件(ms)

备注

CONNECT

0x01

25

GET_CCP_VERSION

0x1B

25

EXCHANGE_ID

0x17

25

GET_SEED

0x12

25

可选

UNLOCK

0x13

25

可选

SET_MTA

0x02

25

DNLOAD

0x03

25

DNLOAD_6

0x23

25

可选

UPLOAD

0x04

25

SHORT_UP

0x0F

25

可选

SELECT_CAL_PAGE

0x11

25

可选

GET_DAQ_SIZE

0x14

25

SET_DAQ_PTR

0x15

25

WRITE_DAQ

0x16

25

START_STOP

0x06

25

DISCONNECT

0x07

25

SET_S_STATUS

0x0C

25

可选

GET_S_STATUS

0x0D

25

可选

BUILD_CHECKSUM

0x0E

30000

可选

CLEAR_MEMORY

0x10

30000

可选

PROGRAM

0x18

100

可选

PROGRAM_6

0x22

100

可选

MOVE

0x19

30000

可选

TEST

0x05

25

可选

GET_ACTIVE_CAL_PAGE

0x09

25

可选

START_STOP_ALL

0x08

25

可选

DIAG_SERVICE

0x20

500

可选

ACTION_SERVICE

0x21

5000

可选

如果ECU内部不支持DAQ通信模式,则以下指令也是可选命令:GET_DAQ_SIZE、SET_DAQ_SIZE、WRITE_DAQ、START_STOP。如果使用了SELECT_CAL_PAGE指令,则GET_ACTIVE_CAL_PAGE指令也是必须的。

    1. ERR代码

CRM-DTO的ERR代码指示了CRO命令的执行情况,事件消息中的ERR代码表示ECU内部发生的错误类型,CCP协议对ERR代码的定义见表2。

表2  ERR代码列表

代码

描  述

错误等级

备  注

0x00

确认/无错误

--

无(等待直到ACK或时间溢出)

0x01

DAQ处理器超载

C0

无(等待直到ACK或时间溢出)

0x10

指令处理器忙

C1

无(等待直到ACK或时间溢出)

0x11

DAQ处理器忙

C1

无(等待直到ACK或时间溢出)

0x12

内部超时

C1

无(等待直到ACK或时间溢出)

0x18

请求密钥

C1

无(等待直到ACK或时间溢出)

0x19

阶段状态请求

C1

无(等待直到ACK或时间溢出)

0x20

冷启动请求

C2

冷启动

0x21

标定数据初始化请求

C2

标定数据初始化

0x22

DAQ列表初始化请求

C2

DAQ列表初始化

0x23

更新代码请求

C2

(冷启动)

0x30

未知指令

C3

(错误)

0x31

指令句法错误

C3

错误

0x32

参数超出许可范围

C3

错误

0x33

访问被拒绝

C3

错误

0x34

超载

C3

错误

0x35

访问锁定保护

C3

错误

0x36

资源/功能暂不可用

C3

错误

对于CRM-DTO,当ERR代码为0x00时表示对CRO命令的确认及命令的正确执行,如返回其他值,则根据上表的含义分析问题。如果ECU没有收到CRO命令的情况下发生错误,会直接以事件消息发送错误代码来进行相应错误处理。CCP协议对错误等级及应对措施规定如表3所示。

表3  错误等级分类及措施

级别

描  述

措  施

重试次数

超时

无握手信号

重试

2

C0

警告

--

--

C1

伪错误(comm错误,忙,……)

等待(ACK或超时)

2

C2

可修复的(温度,掉电……)

初始化

1

C3

不可修复的(重启,超载……)

终止

--

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

【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码 的相关文章

  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh

随机推荐

  • 前端例程20221227:下雪动画

    演示 动图太大了不好上传 这里就放个静态图吧 实际上这里是雪花从上到下飘落的效果 代码
  • 分集 复用 多址

    1 分集 是在多条独立路径上传输相同的数据 接收端通过分集合并技术 抵抗信道衰落 提高传输可靠性 降低误码率 复用 是在多条独立路径上传输不同数据 充分利用系统资源 提高系统容量 即总数据率 2 分集 是一个信号通过多条路径送达接收端 好处
  • UVA-11212 编辑书稿 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在书上的 迭代加深搜索 章节出现 即是采用迭代加深搜索的方法来做 但是咋一看题目 我认为用广度优先搜索也合适 因为题目要求
  • python爬虫系列X--小知识汇总

    X系列不针对专门技术 只是一些辅助 内容零散添加 1 为爬虫运行状态设置邮件提醒 使用python smtp email模块完成 from email mime text import MIMETextfrom email header i
  • 【第63篇】CSI-Net:统一的人体特征和姿态识别

    摘要 https arxiv org pdf 1810 03064 pdf 我们构建了CSI Net 一个统一的深度神经网络 DNN 来学习WiFi信号的表示 使用CSI Net 我们共同解决了两个身体特征问题 生物特征估计 包括身体脂肪
  • 【美国大学生数学建模比赛】2020C题(总结和原创参赛论文)百度云请自取

    最新想法 本学期选修了下大数据 发现其实本题的解法还涉及到数据库 大数据各个层次数据处理和分布式数据流blabla 而之前那几天美赛做的还停留在最基础的数据处理层 而且我现在觉得如果要做大的话不应该在这个层里面进行深度学习 前面的数据库处理
  • 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?实现 int sqrt(int x) 函数。

    今天我们来爬一爬楼梯 假设你正在爬楼梯 需要 n 阶你才能到达楼顶 每次你可以爬 1 或 2 个台阶 你有多少种不同的方法可以爬到楼顶呢 注意 给定 n 是一个正整数 示例 1 输入 2 输出 2 解释 有两种方法可以爬到楼顶 1 阶 1
  • 为啥 Python 运行速度这么慢 ?

    作者 Anthony Shaw 是 Python 软件基金会成员和 Apache 基金会成员 近来Python可谓人气骤升 这门编程语言用于开发运维 DevOps 数据科学 网站开发和安全 然而 它没有因速度而赢得任何奖牌 Java在速度方
  • javascript防抖(Debouncing)和节流阀(Throttling)

    中文原文链接 https jinlong github io 2016 04 24 Debouncing and Throttling Explained Through Examples 英文原文链接 https css tricks c
  • C++ 生命周期

    C 程序的生命周期要经过编码 Coding 预处理 Pre processing 编译 Compiling 和运行 Running 四个阶段 编码即coding阶段 这阶段主要是定义变量 写语句 实现各种数据结构 函数和类 预处理是 C C
  • Qt::带返回值的信号发射方式

    一般来说 我们发出信号使用emit这个关键字来操作 但是会发现 emit并不算一个调用 所以它没有返回值 那么如果我们发出这个信号想获取一个返回值怎么办呢 两个办法 1 通过出参形式返回 引用或者指针的方式带回 比如emit sig int
  • 【SHELL脚本】MYSQLDUMP备份数据库,含忽略数据表

    背景介绍 项目的数据库十分重要 必须保证数据不能丢失 项目组的数据库为mysql5 7 12 采用备份工具mysqldump 开发需求 备份指定多个数据库 部分数据库的部分数据表需要指定忽略 打包上传到go FastDFS文件管理器 下面为
  • jvm 内存分配

    1 任何对象都是以8字节为粒度进行对齐的 2 类属性按照如下优先级进行排列 长整型和双精度类型 8字节 整型和浮点型 4字节 字符和短整型 2字节 字符类型和布尔类型 1字节 最后时引用类型 3 不同类型继承关系类的成员不能混合排列 首先按
  • 程序员究竟还需要读书么?

    近来看了2篇和读书有关的文章 一篇提到Joel讲现在程序员不太读书了 主要靠在网上找各种参考资料 一篇则是马总说的 成功与情商有关 与读书多少关系不大 一定程度上这两个观点都有点道理 可以靠StackOverflow com和搜索引擎找到各
  • 1 FFmpeg从入门到精通-FFmpeg简介

    1 FFmpeg从入门到精通 FFmpeg简介 2 FFmpeg从入门到精通 FFmpeg工具使用基础 3 FFmpeg从入门到精通 FFmpeg转封装 4 FFmpeg从入门到精通 FFmpeg转码 5 FFmpeg从入门到精通 FFmp
  • 一个人开发APP系列之实战1 制作APP产品启动图标

    声明 写这个博客系列也是为了清晰思路 新手写的不好 请大神们指导指导 建议想学的还是先去android develops官网看看相关资料吧 好了 不闲扯了 进入正题 今天的目的是使用Android Studio自带的工具Image Asse
  • TencentOS-tiny 功耗管理 (二十 二)- tickless(低功耗)

    一 功耗管理 tickless 概述 TencentOS tiny的tickless机制提供了一套非周期性时钟的方案 在系统无需systick驱动调度的情况下 停掉systick 初级功耗管理方案下 因为还有系统systick的存在 因此系
  • python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)

    目录 一 前言 二 基于轨迹与路面重心偏离度误差的预测自动差速小车循迹控制策略 三 轨迹图像的处理要点 四 本篇部分核心控制策略python代码 五 结论 一 前言 基于最近的测试 得到了一种粗略控制的算法 其控制效果适合单线路和急转弯的情
  • DevExpress控件手册

    https www evget com article 2018 7 17 28180 html 手册是全英文的 有chm和pdf两种格式 winform手册有两百来兆 内容的确是很详细了 每个控件还有入门的详细例子 建议下载CHM格式的
  • 【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

    CCP协议介绍 CCP的全称是CAN Calibration Protocol CAN标定协议 是基于CAN总线的ECU标定协议规范 CCP协议遵从CAN2 0通信规范 支持11位标准与29位扩展标识符 CCP通信方式 CCP协议采用主从通