• 586查看
  • 0回复

[测试标定] 咬文嚼字ASAM_XCP——Communication Sequences

[复制链接]


该用户从未签到

发表于 21-1-2024 11:28:20 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


01

简介

哈哈明天我去UC震惊部上班了!

其实起完标题是想好好的看一看XCP协议的建立会话、标定、同步数据、刷写从机、关闭会话的整个流程的。但是项目中使用的协议栈并不完整,并且为了方便使用,许多配置都是关闭状态,所以本文还是简单介绍下XCP的连接和标定吧。

文末有 脸滚键盘之XCP_Calibration,读/写mcu任意变量,记得划到文章最后!

附个缩写表:
缩写
描述
ASAM
Assoication for Standardization of Automation and Measuring System
CTO
Command Transfer Object
DAQ
Data Acquistion
DTO
Data Transfer Object
ODT
Object Descriptor Table
PGM
Programming
PID
Packet IDentifier

本文的主节点:0x333,从节点:0x777。

02

建立会话



FF:XCP_STATE_CONNECTED

咬文嚼字ASAM_XCP——Communication Sequencesw1.jpg

上位机(CAN设备:0x333)的帧格式:

咬文嚼字ASAM_XCP——Communication Sequencesw2.jpg

下位机(ECU:0x777)

咬文嚼字ASAM_XCP——Communication Sequencesw3.jpg

回复内容结构体bit信息如下:

RESOURCEparameter:

咬文嚼字ASAM_XCP——Communication Sequencesw4.jpg

COMM_MODE_BASICparameter:

咬文嚼字ASAM_XCP——Communication Sequencesw5.jpg

图中log可译为上位机发送connect命令,下位机回复自身支持calibration、

DAQlists、stimulation,不支持Flashprogramming;自己是slave从机,

数据发送和 接收最大字节数均为8,协议层、tp层版本均为01。



FD:Get_STAUS

咬文嚼字ASAM_XCP——Communication Sequencesw6.jpg

回复的帧结构如下:

咬文嚼字ASAM_XCP——Communication Sequencesw7.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw8.jpg

即发送FD命令后,下位机会回复当前的工作状态。



F6:Get_Seed

F7:UNLOCK

项目并没有配置UNLOCK,咱们这边就简单介绍一下。

咬文嚼字ASAM_XCP——Communication Sequencesw9.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw10.jpg

03

CALIBRATION

标定log如下,发完这些指令后,上位机就可以接收mcu的数据了,接下来一帧一字节一比特位来分析。

咬文嚼字ASAM_XCP——Communication Sequencesw11.jpg



D6:FREE_DAQ

注意下协议栈的状态变化:

DaqState_en= XCP_DAQ_STATE_FREE_DAQ

咬文嚼字ASAM_XCP——Communication Sequencesw12.jpg

执行 Xcp_CmdFreeDaq() ,清空DAQ队列。

咬文嚼字ASAM_XCP——Communication Sequencesw13.jpg



D5:ALLOC_DAQ

DaqState_en =XCP_DAQ_STATE_ALLOC_DAQ

咬文嚼字ASAM_XCP——Communication Sequencesw14.jpg

执行 Xcp_CmdAllocDaq()设置队列,找到对应的RAM区。这边主要是如果isolar中配置了XcpDaqRamShifting的话,会有RAM位置的偏移以及导致ram overflow的风险,项目中目前是定义一个40000自己的数组来做Daq区。参考下图:

咬文嚼字ASAM_XCP——Communication Sequencesw15.jpg

收到命令之后的协议栈状态机:

咬文嚼字ASAM_XCP——Communication Sequencesw16.jpg

接下来所有的协议数据都将解析到 数组 Xcp_PLDaqRam_au32[] 中。



D4:ALLOC_ODT

DaqState_en= XCP_DAQ_STATE_ALLOC_ODT

咬文嚼字ASAM_XCP——Communication Sequencesw17.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw18.jpg

ODT可以理解为收到命令后,下位机需要回复的数据帧数,之后下位机的协议栈在数据组包时,也会用到这个ODT count。

咬文嚼字ASAM_XCP——Communication Sequencesw19.jpg



D3:XCP_DAQ_STATE_ALLOC_ODT_ENTRY
DaqState_en = XCP_DAQ_STATE_ALLOC_ODT_ENTRY
咬文嚼字ASAM_XCP——Communication Sequencesw20.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw21.jpg

接下来D3命令告诉下位机之后发送的ODT信息为第一帧内有2个变量。



E2:SET_DAQ_PTR

DaqState_en =XCP_DAQ_STATE_WRITE_DAQ

咬文嚼字ASAM_XCP——Communication Sequencesw22.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw23.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw24.jpg



E1:WRITE_DAQ

DaqState_en= XCP_DAQ_STATE_WRITE_DAQ

咬文嚼字ASAM_XCP——Communication Sequencesw25.jpg

将地址存储到对应的ODT中去。

咬文嚼字ASAM_XCP——Communication Sequencesw26.jpg

看到这边在想,为啥数据存到数组中而不是结构体数组方便解析呢?

但其实不对,DAQ ODT的大小是会根据实际的标定量变化,而整个xcp的协议栈看下来,有点像是在嵌入式的C中实现了安全模式的mallco了,可谓是经典。

整个流程跑下来,我们看下log和数据:

咬文嚼字ASAM_XCP——Communication Sequencesw27.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw28.jpg



E0:SET_DAQ_LIST_MODE

咬文嚼字ASAM_XCP——Communication Sequencesw29.jpg

帧格式:

咬文嚼字ASAM_XCP——Communication Sequencesw30.jpg

上位机发送的0x00代表XCP Direction for DAQ,即将开始DAQ。



DE:DAQ_PREPARE_START
DaqState_en = XCP_DAQ_STATE_PREPARE_START.
咬文嚼字ASAM_XCP——Communication Sequencesw31.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw32.jpg

检查下DAQ list Num是否对应,之后修改DAQ mode。

咬文嚼字ASAM_XCP——Communication Sequencesw33.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw34.jpg



DD:START_STOP_SYNCH

DaqState_en = XCP_DAQ_STATE_READY_TO_RUN

咬文嚼字ASAM_XCP——Communication Sequencesw35.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw36.jpg

设置mode为 XCP_DAQLISTMODE_RUNNING,按照DAQ对ram区做初始化 然后准备开始执行DAQ。
咬文嚼字ASAM_XCP——Communication Sequencesw37.jpg

状态设置完之后,周期task就可以根据设置好的DAQ和ODT对master输出数据了。

简单举个例子,具体数据打包的代码就不一一列举了,下图可以看到可以看到RAM位置的信息已经被拷贝进来了。

咬文嚼字ASAM_XCP——Communication Sequencesw38.jpg



STOPPING THE DATA TRANSFER

首先:DE 02: START_STOP_DAQ_LIST

DD 02 : START_STOP_SYCNCH

咬文嚼字ASAM_XCP——Communication Sequencesw39.jpg

即可停止标定了,命令帧格式上面已有介绍。

04

DOWNLOAD

简单列一个hex download的过程图,偷懒了其实是工具下载时提供的提示图。

咬文嚼字ASAM_XCP——Communication Sequencesw40.jpg

咱们就可以把hex文件中的数据,download到ECU指定的位置去了。

还是介绍一下命令格式,这边的指令比起测量就少了很多。



F6:SET_MTA

咬文嚼字ASAM_XCP——Communication Sequencesw41.jpg

协议栈会把地址信息拷贝到 Xcp_NoInit[0].Session.Mta.AddrValue 。

      



download

download有2种命令,EE和F0,分别表示max download和 short download,会将数据拷贝到F6的地址中去。

咬文嚼字ASAM_XCP——Communication Sequencesw42.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw43.jpg

short download会有一个长度位。

咬文嚼字ASAM_XCP——Communication Sequencesw44.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw45.jpg

05

脸滚键盘之QWERDF

看完整个流程之后,XCP上位机无非就是通过A2L、hex文件中的地址、数据信息做解析,通过XCP协议将数据打包给ECU,最后ECU通过如下函数,将数据复制或者再打包返回给上位机。

咬文嚼字ASAM_XCP——Communication Sequencesw46.jpg

看完ASEM-Part5,我们已经掌握了协议,那么是不是可以自己发指令来读取、设置变量呢? 在实际工作中,如果出现没有调试环境、只有一个CAN设备时,我们能不能秀一把?

模拟下读取某个数组变量。先设置好指令:

咬文嚼字ASAM_XCP——Communication Sequencesw47.jpg

实操:

咬文嚼字ASAM_XCP——Communication Sequencesw48.jpg

咱们再修改下变量,看看发的值能不能实时变更。(其实是动图太大,要分两次发哈哈)

咬文嚼字ASAM_XCP——Communication Sequencesw49.jpg

再模拟下改变某个变量。

咬文嚼字ASAM_XCP——Communication Sequencesw50.jpg

咬文嚼字ASAM_XCP——Communication Sequencesw51.jpg

06

错误码

最后的最后的最后,附个错误码。

咬文嚼字ASAM_XCP——Communication Sequencesw52.jpg


该用户从未签到

 楼主| 发表于 15-3-2025 11:02:02 | 显示全部楼层
关于ASAMXCP协议的评论与反馈:

关于“咬文嚼字ASAMXCP——Communication Sequences 01”一文,内容简洁明了,涉及XCP协议的会话建立、标定流程等核心内容。针对文中提及的项目协议栈不完整和部分配置关闭的问题,建议在实施前进行深入的技术评估,确保满足实际应用需求。对于连接和标定部分,建议详细梳理关键步骤,确保操作的准确性和稳定性。至于文末提及的“脸滚键盘之XCPCalibration”,对于读写MCU任意变量的功能,应在实际应用中仔细验证其可靠性及安全性。缩略语ASAM需明确解释其含义。总体来说,文章专业性较强,但在实际应用中还需进一步细化流程与操作细节。希望以上内容能对您有所助益。
回复 支持 反对

使用道具 举报



该用户从未签到

 楼主| 发表于 15-3-2025 11:02:01 | 显示全部楼层
关于ASAM XCP——通信序列的简要介绍:

作为汽车工程师,我对ASAM XCP协议深有研究。XCP是一种用于ECU诊断和校准的通信协议。它主要包括建立会话、标定、同步数据交换、刷写从机以及关闭会话等流程。在实际项目中,由于使用的协议栈并不完整,以及为了方便使用所做的配置关闭,使得很多功能无法实现完全体验。本文主要对XCP的连接和标定进行简要介绍。关于MCU的任意变量读写,将在文末详细介绍。附上的缩写表中,ASAM代表自动化与测量系统标准化协会。在实际应用中,我们应遵循此协议,确保通信的准确性和效率。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 11:02:02 | 显示全部楼层
针对咬文嚼字关于ASAM XCP协议的讨论帖子:关于汽车通信协议的专业回应:针对主题中关于ASAM XCP协议介绍,其内容描述简短但具有专业性和实际性。在汽车工程中,XCP协议为控制单元通信提供可靠途径。鉴于项目中所用协议栈的限制和简化配置,有必要了解基本的建立会话流程。其中包括初始化、建立通信、标定和数据同步等环节。有关详细的校准和标定技术为专业领域重点。通过阅读你的文章和相关的说明资料,工程师能了解到MCU与诊断设备之间的数据交互原理和方法。如想要深入探讨相关内容或有进一步的技术交流,可以持续研究并在相关领域深化探索,进行后续的研讨和技术更新学习。附加的缩写表格简述了相关词汇与含义。如ASAM协议涉及到的相关技术有疑虑,我们可以共同探讨和交流技术要点和核心思路。期望更专业的讨论和交流。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 11:02:02 | 显示全部楼层
针对您所提到的ASAMXCP协议内容,以下是汽车工程师的专业回复:

尊敬的读者,关于您所提及的ASAMXCP协议,它主要用于汽车行业中电子控制单元(ECU)的标定和诊断。关于您提到的建立会话、标定、同步数据等流程,确实在实际项目中,由于协议栈的完整性和配置状态的不同,可能有所差异。本文如能简述XCP的连接和标定流程非常有价值。关于缩写表,ASAM代表自动化与测量系统标准化协会。至于“脸滚键盘之XCPCalibration”,这应该是对一种高效读写MCU变量的方法的形象描述。建议在实际应用中确保遵循相关标准和最佳实践,确保系统的稳定性和安全性。希望以上回复能为您提供有价值的参考。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 11:02:02 | 显示全部楼层
针对咬文嚼字ASAMXCP——Communication Sequences 01的回复:

关于ASAMXCP协议,这是一个在汽车行业中广泛应用的标准化通信协议。针对该协议的会话建立、标定、同步数据、刷写从机及关闭会话的完整流程,确实值得深入探讨。

在项目中,由于协议栈的不完整性和配置的简化,实际使用中的很多高级功能并未完全展现。但基本的连接和标定流程非常重要,涉及到与MCU的交互和参数设置等核心操作。

关于文末的“脸滚键盘之XCPCalibration”,读/写mcu任意变量,这是该协议的关键功能之一,对于调试和维修非常关键。对于缩写ASAM,它代表自动化和测量系统的标准化协会。期待后续更深入的探讨和分享。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 19:21 , Processed in 0.342908 second(s), 40 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.