XCP协议和A2L文件 – DAQ同步数据传输详解

这一篇文章,我们主要来讨论一下XCP的同步数据传输,以DAQ(即ECUPC发送数据,实现数据采集)为例讨论其中所涉及到的重要概念和原理。如何实现对ECU中的数据进行获取并发送呢,不难想到,只要通过数据的地址和数据的长度就可以完整的获得数据的内容,其实XCP也是基于这么一个简单的原理,XCP在获取到上位机发来的一系列的地址+长度的组合以后完成DAQ的初始化,然后就可以定期的将对应的这些数据发送出来。一个完整的DAQ数据采集流程有两个步骤:

  1. 上位机发送数据的地址长度等信息给ECU做采集前的初始化
  2. ECU在做完初始化以后,周期性的把数据发送出来

 本篇文章要讨论的是第二点,第一点使用的命令和第二点不同,在后续的文章中会有介绍。

 经过前边的介绍,我们可以看出实现周期的数据上传,需要有一个数据结构来维护发送数据的地址和长度,这个数据结构在XCP中称为ODT(Object Description Table),该结构中的每一个条目代表一个数据所处的地址和它的长度,XCP中称之为ODT Entry。从软件实施的角度ODT所代表的就是操作数据时使用的数据结构,而从通讯角度ODT就是每一帧数据,因此不同的传输层ODT的参数也不尽相同,通过CAN来举例,ODT从通讯角度代表着一帧CAN报文,而ODT Entry代表一个数据即CAN报文中的字节内容,因此对于CAN来说一个ODT里边最多能容纳7ODT Entry(每个Entry代表的数据为一个字节,剩余一个字节为PID

odt

在实际应用中,用户一般会希望一个周期内采集非常多的数据(超过一帧),那么就需要把多个ODT组合起来,这种组合在XCP中称为DAQ List,从通讯的角度看,它对应了很多帧的报文,每个报文的第一个字节存放着PID用于识别不同帧所对应的ODT编号,不能放数据。

daq_list

 

有了DAQ/ODT以后,要被上传的数据就可以通过他们来索引并获得,获得这些数据以后就需要一定的周期或事件来触发上传,这些周期任务和事件在XCP中被称为Event。将以上提到的四个概念组合起来,XCP就实现了数据的同步传输,如下图所示,在这个图中,有3个不同周期的任务,分别为5ms/10ms/100ms,他们分别能触发DAQ0/DAQ1/DAQ2进行数据上传,每个DAQ中都有若干个ODT,它们相互独立,编号都是从0开始,每个ODT中的ODT Entry也相互独立,编号从0开始。上位机对ECU XCP进行DAQ初始化其实就是把想要采集的数据的地址和长度按照设定好的周期填充到每个DAQ/ODT中的ODT entry里边,初始化完毕后,XCP协议就可以在Event5ms/10ms/100ms)中定期的利用这些信息将地址上指定长度的数据发送出来。

xcp_event

发表评论

电子邮件地址不会被公开。