CTO被用来将命令从Master发送到Slave,以及将Slave的响应发送到Master。
XCP 命令结构
Slave 收到来自 Master 的命令,必须对其做出正面或负面的响应。
命令 (CMD):
每条命令都有一个唯一的编号,此外,还可以随命令发送其他具体参数,这里定义的最大参数个数为MAX_CTO-1,MAX_CTO表示CTO包的最大长度,单位为字节。
肯定响应:
否定响应:
具体参数也可以作为补充信息传递给消极的回应,而不仅仅是积极的回应。举个例子,在Master和Slave之间建立连接。在Master和Slave开始通信时,Master向Slave发送一个连接请求,而从Slave必须积极响应,从而产生一个连续的点对点连接。
Master –>Slave: 连接
Slave –> Master: 肯定响应
连接命令:
模式 00 表示 Master 希望与 Slave 进行正常XCP 通信。如果 Master 在建立连接时使用 0xFF 0x01,则 Master 正在请求与 Slave 进行 XCP 通信。同时,它通知 Slave 它应该切换到特定的 - 用户定义- 模式。
Slave肯定响应:
Slave的肯定响应可以采取更广泛的形式。当与Slave建立连接时,它已经向Master发送了特定于通信的信息。例如,RESOURCE是Slave提供的关于是否支持页面切换或是否可以在XCP上闪烁的信息。使用MAX_DTO,从端通知主端它支持的传输测量值的最大数据包长度,等等。您将在ASAM XCP第2部分协议层规范中找到有关参数的详细信息。
XCP允许在主从之间交换命令和反应的三种不同模式:Standard模式、Block模式和Interleaed模式。
在标准的通信模型中,每个对Slave的请求后面都有一个响应。除了XCP ON CAN,它不允许多个slave对Master的命令做出反应。因此,每个XCP消息总是可以追溯到一个唯一的Slave。这种通信模式就是Standard模式。
Block传输模式是可选的,节省了大量数据传输(例如上传或下载操作)的时间。尽管如此,在Slave方,在这种模式下必须考虑性能问题。因此,需要维护两个命令之间的最小间隔时间(MIN_ST),并将命令总数限制在MAX_BS的上限值。另外,Master可以使用GET_COMM_MODE_INFO从Slave读取这些通信设置。前面提到的限制在Master方Block传输模式中不需要观察,因为PC机的性能几乎总是足以接受来自微控制器的数据。
由于性能原因,还提供了交错模式。但是这种方法也是可选的,与块传输模式相反,它在实践中没有相关性。
CMD
Master通过CMD向Slave发送一个通用请求。PID (Packet Identifier)字段包含命令的标识号。附加的特定参数在数据字段中传输。然后Master等待Slave肯定或者否定响应。
XCP的实现也具有很强的可伸缩性,因此不需要实现每个命令。在A2L文件中,把可用的cmd列在所谓的XCP IF_DATA中。如果在A2L文件中的定义和在Slave中的实现之间有差异,Master可以根据Slave的响应确定,Slave甚至不支持该命令。如果Master发送了一个没有在Slave上实现的命令,那么Slave必须响应ERR_CMD_UNKNOWN并且没有在Slave上发起任何活动。这会让Master快速知道一个可选命令还没有在Slave上实现。
命令中还包括其他一些参数。请从文档ASAM XCP第2部分的协议层规范中获取精确的细节。
命令按组划分: Standard, Calibration, Page, Programming 和 DAQ测量命令。如果不需要某个组,则不需要实现该组的命令。如果组是必要的,那么某些命令必须始终在Slave中可用,而组中的其他命令是可选的。
下面以概述为例。Page组中的SET_CAL_PAGE和GET_CAL_PAGE命令被标识为非可选。这意味着在一个支持页面切换的XCP Slave中,至少必须实现这两个命令。如果在Slave中不需要切换页面,则不需要执行这些命令。
Standard 命令:
Calibration命令:
Page命令:
周期数据交换—基础:
周期数据交换—静态配置
周期数据交换—动态配置
Flash programming:
RES
如果Slave能够成功地满足Master的请求,Slave 会使用RES表示肯定响应。
在ASAM XCP第2部分协议层规范中找到有关参数的更详细信息
EV
如果Slave想要通知Master一个异步事件,可以发送一个EV来做这件事。它的实现是可选的。
在ASAM XCP第2部分协议层规范中找到有关参数的更详细信息
我们将更多地讨论与测量和激励有关的事件。这与XCP Slave发起发送事件的动作没有任何关系。相反,它涉及Slave报告诸如特定功能故障之类的干扰。
SERV
Slave可以使用这种机制请求Master执行一个服务。
在ASAM XCP第2部分协议层规范中找到有关参数的更详细信息