• 280查看
  • 0回复

[底层软件] 深入XCP(上)数据结构和概念介绍

[复制链接]


该用户从未签到

发表于 25-4-2024 20:10:31 | 显示全部楼层 |阅读模式

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


汽车电子中标定(根据ECU的性能要求或者整车的性能要求,修改调整或者优化ECU 内部参数的过程)是一个绕不过去的话题。XCP表示一个通用的标定协议,它可以基于CAN,也可以基于TCP/IP、UDP/IP或者USB等。本文主要讲述基于CAN的XCP协议。
1 介绍

1.1 XCP数据包类型
XCP的数据包有两种类型:CTO(CommandTransfer Object)和DTO(Data Transfer Object),前者主要负责命令、应答、错误和事件信息的传输,后者主要用于数据(DAQ和STIM)的传输,如下图所示。
深入XCP(上)数据结构和概念介绍w1.jpg

主机(HostPC)与从机(ECU)之间的通信流
通常来说,Command报文必须回复(从机回复Response packet或者Error packet),而Event、Service Request以及Data Acquisition Packets由于是异步传输,因此有时不能确保主机收到了报文(如使用UDP传输时)。
1.2 XCP数据包格式
XCP报文由三部分组成:头、数据包和尾,如下图所示。
深入XCP(上)数据结构和概念介绍w2.jpg

标识符域中的PID表示数据包的标识符(PacketIDentifier)。对于CTO类型的消息而言,PID表征消息的类型;对于DTO而言,PID表示绝对或者相对的ODT编号:假如PID表示绝对的ODT(Object Descriptor Table)编号,那么此时DAQ段就不存在,假如PID表示相对的ODT编号,那么就需要根据DAQ和PID段来计算此时的ODT绝对编号。ODT绝对编号是指每个ODT编号在所有的DAQList中是唯一的。比如:有2个DAQ List(DAQ0和DAQ1),每个DAQ中都有7个ODT,则DAQ0中的ODT编号是0~6,则DAQ1中的ODT编号是7~13。相对ODT编号是指每个DAQ List中的ODT编号都是从0开始编号。如比如:有两个DAQ List(DAQ0和DAQ1),每个DAQ都有7个ODT。对于DAQ0来说,ODT编号是0~6,对于DAQ1来说,ODT编号也是0~6。时间域(Timestamp Field)对于CTO类型的消息而言时不存在的,在DTO中可能存在(DAQ_PROPERTIES中的TIMESTAMP_SUPPORTED表示是否存在,长度取决于Timestamp Field Type,可能为1个字节、2个字节或者4个字节)。
1.2.1 CTO数据包的组成

因此CTO的数据包如下图所示。

深入XCP(上)数据结构和概念介绍w3.jpg

CTO数据包结构
PID(CMD)的取值范围为0xC0~0xFF。分为如下4个部分。
指令类别
PID范围
用途

标准指令

(STD)
0xF1-0xFF
建立连接、上传数据、设定内存地址和断开连接等命令

标定指令

(CAL)
0xEC-0xF0
标定任务的指令
页面切换指令(PAG)
0xE4-0xEB
标定内存操作的指令
数据采集和请求(DAQ)
0xD3-0xE3
DAQ数据采集等设置指令

内存编程

(PGM)
0xC8-0xD2
内存管理指令
各个指令具体如下所示(在下一篇文章中会详细描述经常使用的指令的作用)。

深入XCP(上)数据结构和概念介绍w4.jpg

Standardcommands (STD)表格
深入XCP(上)数据结构和概念介绍w5.jpg

Calibrationcommands(CAL)表格
深入XCP(上)数据结构和概念介绍w6.jpg

Pageswitching commands (PAG)表格

深入XCP(上)数据结构和概念介绍w7.jpg

DataAcquisition and Stimulation commands (DAQ)表格

深入XCP(上)数据结构和概念介绍w8.jpg

Non-volatilememory programming commands (PGM)表格

1.2.2 DTO数据包的组成

深入XCP(上)数据结构和概念介绍w9.jpg

DTO数据包结构
对于DAQ而言,PID表征ODT的编码,取值范围为0x00 <= DAQ <= 0xFB,对于STIM而言,PID的取值范围为0x00<= STIM <= 0Xbf。如下所示。
深入XCP(上)数据结构和概念介绍w10.jpg

DAQ中段含义

深入XCP(上)数据结构和概念介绍w11.jpg

STIM中段含义

1.2.3 总结

主机发给从机的数据包中的ID和从机发给主机的数据包中的ID如下图所示。

深入XCP(上)数据结构和概念介绍w12.jpg

主机发给从机的数据包中的ID

深入XCP(上)数据结构和概念介绍w13.jpg

从机发给主机的数据包中的ID

2 DAQ 、ODT和DTO的关系
DAQ List可以有多个,通常由EvcentChannle来触发周期发送,而1个DAQ List可以由多个ODT组成,1个ODT由多个ODT Entry组成,在传输数据时,DTO中的PID即表示ODT的编号,如下图所示。
深入XCP(上)数据结构和概念介绍w14.jpg

一个ODT中可以包含1~7个ODT Entry。如果每个参数占用1byte,则一个ODT可以容纳7个ODT Entry;如果每个参数占用2byte,则一个ODT可以容纳3个ODT Entry;每个如果参数占用4byte,则一个ODT只可以容纳1个ODT Entry.
深入XCP(上)数据结构和概念介绍w15.jpg

DAQ、ODT与ECU内存的关系
用Event Channel A触发10ms、20ms、50ms的周期性报文同步传输: 10ms:Par_A,Par_B,Par_C,每个参数大小为一个字节;20ms:Par_D参数的大小为2个字节; 50ms:Par_E参数的大小为3个字节。假如有3个DAQlist,每个DAQlist里面有一个ODT,那么对应关系如下图所示。
深入XCP(上)数据结构和概念介绍w16.jpg

快速发帖

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

本版积分规则

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

GMT+8, 27-12-2024 11:21 , Processed in 0.188942 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.