小猫爪:嵌入式小知识17-XCP on CAN简介

小猫爪:嵌入式小知识17-XCP on CAN简介

  • 0 目录
  • 1 前言
  • 2 XCP on CAN
  • 3 实战演练
    • 3.1 CONNECT
    • 3.2 GET_COMM_MODE_INFO和GET_STATUS
    • 3.3 GET_SEED和UNLOCK
    • 3.4 获取Slave信息
    • 3.5 SET_MTA和BUILD_CHECKSUM
    • 3.6 设置DAQ
    • 3.7 DAQ传输
    • 3.8 SHORT_UPLOAD
    • 3.9 标定
    • 3.10 FLASH Program
  • END

0 目录

  1. 小猫爪:嵌入式小知识15-XCP基础简介
  2. 小猫爪:嵌入式小知识16-XCP协议简介
  3. 小猫爪:嵌入式小知识17-XCP on CAN简介
      

1 前言

  前面已经对XCP协议做了非常细致的介绍,接下来就来看看XCP是怎样在CAN总线上进行工作的吧。参考资料:XCP协议规范2003。

2 XCP on CAN

  XCP在CAN上的实现也是非常的简单,首先得分配两个CAN ID,对于Master这一方来说,一个作为发,即CMD和STIM,一个作为收,即RES/ERR/EV/SERV和DAQ。这里需要注意的是STIM和DAQ可以有自己独立的CAN ID,但是需要使用SET_DAQ_ID命令CMD进行配置。

  之前文章里已经提到过,在CAN上的XCP是不支持交互通信模式的,一般都是采用标准通信模式和块传输模式两者配合。

  XCP在CAN上的协议包的体现为:
在这里插入图片描述
  首先XCP Header为空,至于XCP Packet则与XCO协议一模一样。而XCP Tail则根据经典CAN的MAX_DLC(经典CAN的MAX_DLC固定为8)和XCP Packet长度LEN有以下两种情况:

  1. MAX_DLC = LEN
    这个时候XCP Packet把CAN帧的8个字节全部填满,XCP Tail为空。
  2. MAX_DLC > LEN
    这个时候XCP Packet没有把CAN帧的8个字节填满,那么就需要填充到8个字节,这个时候XCP Tail即为填充。

  对于CAN-FD,MAX_DLC只有以下值有效:8、12、16、20、24、32、48和64。这个时候有的朋友就要问了,那如果LEN > MAX_DLC的时候怎么办,不可能,这种事情在XCP on CAN上是不可能发生的,你放心吧。

3 实战演练

  接下来来看看XCP的一些常用操作在CAN上的体现。当我将CANape配置完之后,点击Start,Master和Slave会进行怎样的交互呢?
在这里插入图片描述
  具体流程如下:

3.1 CONNECT

在这里插入图片描述
  首先使用CONNECT命令与Slave建立XCP连接。CONNECT的正响应具体描述如下:
在这里插入图片描述
  根据上表就可以解析出Flash programming available,stimulation available,DAQ lists available, calibration/paging available,Intel format,AG为BYTE,不支持Slave Block Mode,支持命令GET_COMM_MODE_INFO命令获取通信配置,MAX_CTO = 8,MAX_DTO = 8, 还有协议层和传输层的版本号。
  其中Slave Block Mode意思就是说,Slave可以发起块传输,就是连续发送好几个XCP包。而Master Block Mode就是Master可以发起块传输。

3.2 GET_COMM_MODE_INFO和GET_STATUS

在这里插入图片描述
  再使用GET_COMM_MODE_INFO和GET_STATUS获取Slave的XCP协议信息以及当前XCP运行状态信息。
GET_COMM_MODE_INFO的正响应具体描述如下:
在这里插入图片描述
  这里就不一一对着解析,稍微说一下一些参数的含义吧:
1.MAX_BS 表示在PGM命令中所运行下载的最大Block大小。
2.MIN_ST表示在块传输过程中,两个XCP包允许相隔的最小时间。
3.QUEUE_SIZE表示在支持交互模式下,Master连续发送CMD的最大数量。
  GET_STATUS的正响应具体描述如下:
在这里插入图片描述
1.Current session status中表示了一些行为状态,有STORE_CAL_REQ,STORE_DAQ_REQ ,CLEAR_DAQ_REQ,DAQ_RUNNING,RESUME。
2.Current Resource Protection Status中则表示了当前有哪些CMD是被SEED&KEY锁着的。在XCP中,有一种保护机制叫做SEED&KEY保护机制,它会按照功能具体分成了CAL/PAG,DAQ,STIM,PGM四类,如下:
在这里插入图片描述
  每一类都有一套单独的SEED&KEY机制(算法也可以不同),需要单独解锁,只有使用GET_SEED和UNLOCK进行解锁后,然后才能发送其相对应的CMD。

3.3 GET_SEED和UNLOCK

在这里插入图片描述
  再使用GET_SEED和UNLOCK命令对所有的CMD进行解锁,GET_SEED命令具体描述如下:
在这里插入图片描述
  当Mode=0时,第二个字节表示Resource,也就是说这次解锁的对象是哪一类CMD,具体请参考Current Resource Protection Status的描述。

3.4 获取Slave信息

在这里插入图片描述
  再使用GET_DAQ_PROCESSOR_INFO, GET_DAQ_RESOLUTION_INFO和GET_CAL_PAGE命令获取Slave的DAQ信息,为后面配置DAQ做准备。
  GET_DAQ_PROCESSOR_INFO正响应具体描述如下:
在这里插入图片描述

  1. DAQ_PROPERTIES表示当前Slave支持DAQ哪些特征,比方说支不支持动态DAQ_List,支不支持TimeStamp,支不支持更改DAQ的CAN ID,支不支持报告overload(就是一个周期内没有把所有的ODT发送完)以及报告overload的方式。
  2. MAX_DAQ, MIN_DAQMAX_EVENT_CHANNEL在之前文章已经介绍过了,这里就不多做解释了。
  3. DAQ_KEY_BYTE里面有Type of Optimisation Method,address extension of ODT_Entry, ODT number is Absolute or Relative。

  GET_DAQ_RESOLUTION_INFO正响应具体描述如下:
在这里插入图片描述
  这个命令可以获取当前Slave支持的ODT_Entry的数量和大小,以及Timestamp的大小和分辨率,在这里就不多做解释了,感兴趣的朋友请参考协议规范。
  GET_CAL_PAGE正响应具体描述如下:
在这里插入图片描述
  Logical data page number表示当前(XCP或者ECU,由该CMD中的Mode字节区分)激活的PAGE编号。

3.5 SET_MTA和BUILD_CHECKSUM

在这里插入图片描述
  再使用SET_MTA设置MTA(Memory Transfer Address)和Address extension,随后使用BUILD_CHECKSUM获取MTA处,大小为6610的Block的Check Sum。

3.6 设置DAQ

在这里插入图片描述
  接下来就可以设置DAQ了,设置DAQ的过程比较复杂,总的来说,其实就是设置ODT_Entry,设置ODT,再设置DAQ-List,随后再将DAQ与Event Channel绑定,随后再开启DAQ。具体流程如下:

  1. 当Slave是动态DAQ-List配置时,必须要先使用FREE_DAQ命令清空DAQ-List,ODT,ODT_Entry。
  2. 再使用ALLOC_DAQ命令创建1个空的DAQ-List,DAQ_LIST_NUMBER为0(依次累加)。
  3. 再使用ALLOC_ODT命令创建3个空的ODT,并且把这3个ODT加入DAQ_LIST_NUMBER为0的DAQ_List中。
  4. 再使用ALLOC_ODT_ENTRY命令分别创建3个ODT_ENTRY,并且将其分别放置在上一步创建的3个ODT中,ODT_ENTRY中的Element大小分别是2,6,4个字节。
  5. 再使用SET_DAQ_PTR命令和WRITE_DAQ命令分别对前几步创建的3个ODT_ENTRY进行配置,配置内容有BIT_OFFSET(数据掩码,表示传输的数据BIT有效位,如果等于FF,则说明忽略掩码),Element的大小(前面得知AG=BYTE,所以这里Element字节大小是2个字节),Address extension,以及Element的物理地址。到这里整个DAQ_List已经设置完毕。
  6. 再使用SET_DAQ_LIST_MODE命令设置DAQ_List的一些特征,设置Identification Field的格式为relative ODT number and absolute DAQ list number (BYTE),开启DTO的TimeStamp,DAQ模式(Slave–>Master),还有将DAQ_List与Event Channel 2绑定(Event Channel在Slave已经配置好了,这里直接根据Channel Num进行百绑定),至此整个DAQ配置已经全部完成。
  7. 最后使用START_STOP_DAQ_LIST命令选择DAQ_List 0,使用GET_DAQ_CLOCK获取一下Slave的时间戳,再使用START_STOP_SYNCH开启START_STOP_DAQ_LIST选择的DAQ_List 0的传输。

3.7 DAQ传输

在这里插入图片描述
  由于在前面配置DAQ中,将DAQ_List与Event Channel 2绑定,而在Slave中,Event Channel 2是一个100ms的周期性事件,所以可以看到DAQ报文每100ms发送一次。
  首先DTO包的格式如下:
在这里插入图片描述
  多帧DTO构成的DAQ格式如下:
在这里插入图片描述
  根据在上面DAQ配置步骤中,使用了SET_DAQ_LIST_MODE将Identification Field的格式配置为relative ODT number and absolute DAQ list number (BYTE),所以Identification Field的格式为PID为一个字节表示ODT Number,DAQ一个字节表示DAQ-List Number:
在这里插入图片描述
  根据在上面DAQ配置步骤中,使用SET_DAQ_LIST_MODE命令开启了Timestamp,以及在前面的GET_DAQ_RESOLUTION_INFO得知Timestamp的大小是4字节,编码为Intel模式,所以
拿出一帧数据如下:
在这里插入图片描述
红色框:表示ODT Number。
蓝色框:表示DAQ-List Number。
黑色框:分别代表数据部分,分别对应前面配置的2,6,4个字节大小的3个ODT_Entry。

3.8 SHORT_UPLOAD

在这里插入图片描述
  在之前文章提到过,除了可以使用DAQ进行数据测量,还可以使用Master周期发送CMD去主动读取,这里一般采用的是SHORT_UPLOAD命令去读取。

3.9 标定

在这里插入图片描述

  1. 首先使用SET_MTA命令设置标定数据目标地址。
  2. 再使用DOWNLOAD命令写入标定值。
  3. 最后再使用SHORT_UPLOAD命令回读标定值校验是否正确写入。

3.10 FLASH Program

  找不到合理素材,先欠着,嘿嘿嘿~来年再见!!!

  到这里,XCP就差不多都介绍完了,下期再见。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/89505.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenCV实战(基础知识二)

目录 简介 1.ROI区域 2.边界填充 3.数值计算 4.图像融合 简介 OpenCV是一个流行的开源计算机视觉库,由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包,可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和计算机视觉应用。Ope…

动捕设备助力打造沉浸式虚拟现实体验

在纪录片《超时空寻找》中,借助了实时动捕设备,基于三维数字人技术进行老战士与历史场景还原,让抗美援朝老战士可以通过虚拟现实技术,跨越时空与战友实现隔空对话。 随着动捕设备的不断发展,虚拟现实技术越来越成熟&a…

亿赛通电子文档安全管理系统 RCE漏洞复现(QVD-2023-19262)

0x01 产品简介 亿赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

centos7设置java后端项目开机自启【脚本、开机自启】

1.切换目录 cd /etc/init.d/2.编辑脚本 vim wbs-service-start.sh编辑内容 #!/bin/bash # chkconfig: 2345 80 90 # description: auto_runnohup java -jar /usr/java/wbs-service.jar > /dev/null 2>&1 & echo $! > /var/run/wbs-service.pid3.添加进入系…

基于JSP+Servlet+mysql员工权限管理系统

基于JSPServletmysql员工权限管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的员工权限管理系统[qxxt] 项目架构:B/S架构 开发语言:Java语言 …

HCIP学习--企业网三层架构实验

一、实验拓扑 二、实验要求 内网IP地址172.16.0.0/16合理分配 SW1/2之间互为备份 VRBP/STP/LANTRUNK均使用 所有PC通过DHCP获取ip地址 三、实验步骤 首先思考进行IP地址的规划 配置eht-trunk [sw1]interface Eth-Trunk 0 [sw1-Eth-Trunk0]q [sw1-GigabitEthernet0/0/1]i…

CAD泰森多边形框架3D插件

插件介绍 CAD泰森多边形框架3D插件可用于在AutoCAD软件内生成三维Voronoi框架结构实体模型,适用于多孔Voronoi科研论文渲染绘图、Voronoi框架有限元建模、Voronoi空间结构优化等方面的应用。 使用说明 插件可设置生成的几何尺寸、晶格尺寸及边框直径等信息。 插…

重磅!云智慧监控宝这些功能免费用啦

自云智慧推出监控宝以来,各行业领域反映强烈,现已有超过24万人次使用监控宝官网的免费试用功能。得益于诸多企业及用户对监控宝热情的持续升温,云智慧释放技术红利,推出监控宝免费使用福利,面向中小型企业提供监控宝核…

【C语言】16-函数-2

1. 函数的嵌套调用 C 语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中又调用另一个函数,如下图所示: 其执行的流程为: 执行 main 函数的开头部分遇函数调用语句…

Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…

升级Go 版本到 1.19及以上,Goland: file.Close() 报错: Unresolved reference ‘Close‘

错误截图 解决方法 File -> Settings -> Go -> Build Tags & Vendoring -> Custom tags -> 添加值 “unix” 原因 Go 1.19 引入了unix构建标签。因此,需要添加unix到自定义标签。 参考 https://blog.csdn.net/weixin_43940592/article/det…

Java百度提前批面试题

今天分享百度提前批的 Java 后端开发面经,整体上考察的点挺多的,主要重点考察了网络i/o、网络协议、linux系统、mysql,Java 问的不多,可能是百度的后端开发的语言不是主要以 Java 为主,所以重点看面试者的计算机基础是…

飞天使-k8s基础组件分析-持久化存储

文章目录 emptyDirhostpathpv和pvc介绍nfs作为静态pv案例nfs作为动态pv案例使用本地文件夹作为pv改变默认存储类及回收策略参考文档 emptyDir 重启文件还有,但是如果杀了进程,则会丢失文件 创建pod # kubectl apply –f redis.yaml校验pod是否处于运行&…

Airbnb在中国不得势的主要原因是什么?Airbnb还有可能回来吗?

其实在年轻人的群体中,Airbnb还是相当出名的。想当初一开始出现的时候,很多人都为之疯狂,也在Airbnb上直接创下了众多房源输出,并且订单数量激增的地步。但是到了2021年,Airbnb却是以悄无声息的方式推出了中国市场,几乎没有什么通告,最终很多的用户都是在想要下载更新的时候才发…

SpringBoot生成和解析二维码完整工具类分享(提供Gitee源码)

前言:在日常的开发工作当中可能需要实现一个二维码小功能,我参考了网上很多关于SpringBoot生成二维码的教程,最终还是自己封装了一套完整生成二维码的工具类,可以支持基础的黑白二维码、带颜色的二维码、带Logo的二维码、带颜色和…

基于QT4的GPX文件编辑器开发

GPX文件是记录地理点的文件,本质是一种xml文件。GPX文件目前没有很好的编辑器,因此作者决定开发一款无需安装的绿色编辑器。 在QT4开发中,XML可以用DOM来实现,但其逻辑并不是很清晰。使用模型视图反而会更加可读。因此在开发中,使用model-view模式来实现数据读写。 1 需…

知识图谱Neo4j安装到实践全过程

前言: Hello大家好,我是Dream。 在本次实战中,我们将一起完成知识图谱Neo4j安装到实践全过程,探索其中的关系和属性。知识图谱是一种以三元组形式存储的数据结构,由实体、关系和属性组成,能够帮助我们更好地…

Docker容器:docker-compose管理创建LNMP服务并运行Wordpress网站平台

文章目录 一.项目环境1. 环境描述2.项目需求 二.部署过程1.安装Docker2.安装Docker加速器3.Docker-Compose安装部署4.准备依赖文件、配置nginx5.配置mysql6.配置php7.编写docker-compose.yml8.验证 三.容器快照,然后将Docker镜像打包成tar包备…

idea 新建servlet 访问提示404 WebServlet注解找不到包 报错

检查访问路径是否设置正确 如果设置为name “/testServlet”,则会404 WebServlet注解报错找不到包 检查是否引入了tomcat依赖包

Linux:shell脚本:基础使用(6)《正则表达式-awk工具》

简介 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 1)awk命令会逐行读取文件的内容进行处理 2)a…