AutoSar架构-----XCP模块与协议介绍
1、XCP 模块定义
XCP 一般要求如下图:
XCP 导入的类型需要如下表这些头文件:
2、ETAS 工具配置
2.1、XcpGeneral 配置
3、XCP 协议
ASAM-MCD-1MC:ECU 和标定测量系统接口
ASAM-MCD-2MC:即 A2L 文件,是控制器内部信息描述文件规范
ASAM-MCD-3MC:此接口用于将另一个系统连接到标定测量系统,例如用于试验台自动化
1、XCP 协议介绍
XCP(Universal Meaurement and Calibration Protocol) 协议中的"X"表示的是可变的传输层协议,如下图:
截至到目前,XCP 协议已经迭代到了 1.5 版本,每个版本更新如下:
2、XCP 上下位机通信模型
XCP 基于 Master-slave 原则;标定系统作为 Master,ECU 通常作为 Slave,Master 与 Slave 之间通过标定工具(硬件如 ETAS 的 ES582、Vector 的 VX1000 等)了解,使用 XCP 协议规范的指令进行交互;所以在 Master 和 Slave 的系统均需集成 XCP 标准
协议栈,就和诊断栈一样。
Master 与 Slave 的命令交互帧叫做 CTO(Command Transfer Objects);
Master 与 Slave 的测量数据交互帧叫做 DTO(Data Transfer Objects);
通信模型如下:
XCP 提供了如下几种数据传输方式:
1、一问一答模式:
2、Master 块传输模式:
如使用 download 传输大数据给 ECU,就会用到这种通讯模式。
3、Slave 块传输
如 Upload 指令,获取 ECU 内部的数据状态;一般标定 download 完之后,会紧跟着一个 upload 检查是否
写进了目标 ram 地址。
4、多问答模式:
3、XCP 指令集
了解了上位机通信模型后,接下来就需要了解 XCP 协议具体定义了哪些指令。
1、XCP 帧结构定义
XCP 帧包含三部分:Header+Packet+Tail。如下图:
其中,帧头(Header)、帧尾(Tail)依赖不同传输层,其中若传输层使用 CAN,则不需要帧头(Header),如下图:
真正重要的是深色部分,这部分内容与传输层无关,即 XCP
协议栈真正要处理的数据内容,它主要分为三部分内容 ID 域、时间戳域和数据域。
ID 域:
ID 域中最重要的就是 PID(Packet identifier),这个值实际上是 Master\Slave 的命令 ID。如下:
DAQ 主要是测量时根据 DAQ list 和 ODT 类型来定位数据,后续详说。
CTR 可选,也是用于 DAQ。
时间戳域:
时间戳通常给 DTO 帧使用,因为同一个 DAQ list 里的观测量是同一时间采集,所以一个 DAQ 周期
只会传输一个时间戳。
数据域:
Master 和 Slave 真正交互的实际数据,每个指令都有不同的 Date 参数放在这个域里。
2、XCP 标准指令集
标准指令集表示提供最基础的功能,包括 Master 和 Slave 的连接建立、断开、ECU 身份识别,解锁
受保护资源、获取当前会话状态等。参考 XCP1.0 版本,标准指令集如下:
其中前四条指令是必选的,是 XCP 主从机建立连接时使用到的指令,一般标定上位机的连接按钮,一
点击就会使用这几条指令。剩下的指令除了最后两条,基本都是需要实现的,UPLOAD 可以与 DOWNLOAD
搭配使用,SEED\UNLOCK 也是组合使用。如下以 CONNECT(FF) 指令为例,详细看下 PID+DATA 的交互,如下:
根据标准,Master 主机的 CONNECT 指令与 Slave 从机 Positive Response 回应如下:
根据上述协议可以看出回复的含义如下:
0x05(RESOURCE):CAL/PAG、DAQ 资源可获取,STIM、PGM 资源不可获取
0x40(COMM_MODE_BASIC):BYTE_ORDER = 0 代表是 字节序为 Inter 模式(小端模式)
0x08:MAX CTO
0x0008:MAX DTO
0x01 0x01:XCP 协议版本为 1.1。
3、XCP 标定指令集
标定指令集就是执行标定动作或者在开始标定之前将离线标定的数据批量写进 calibration ram 中。
其通讯流程如下:
首先发送 SET_MAT(0xF6)设置即将要传输的 memory 地址等;
然后调用 DOWNLOAD(0xF0)通知 Slave 即将要使用的传输模式,结合 DOWNLOAD_NEXT 进行大数据传输
或者使用问答方式进行小数据标定。
4、XCP 页切换指令集
页切换,可以用于所谓的工作页和参考页的切换,本质上就是 memory 地址的切换。
页切换指令集包含如下内容:
但在实际使用中,页切换不是所有的 ECU 都支持的,通常是带 overlay 功能的 CPU 可以支持。因此要做
页切换的目的就是想要 CPU 很快地访问 WP 或者 RP 去取算法所需的参数,但做这个切换若没有 overlay
是比较难实现的,英飞凌 TC3xx 系列 CPU 是支持 Overlay 机制的。
5、数据采集指令集
数据采集集,即常见的 DAQ 指令集,如下:
DAQ 可分为动态和静态 DAQ;根据 ASAM_XCP_PART5 的示例,DAQ 的响应时序如下:
1、获取 Slave 从机 DAQ 列表信息
由于首先就要获取 DAQ 列表信息,因此在 XCP 初始化时就要对 DAQ 进行初始化。
该步骤所要用到的指令:DA、D9、D7、D5、D8;
2、准配 DAQ 列表
1、静态 DAQ 配置:常用指令 E3
2、动态 DAQ 配置
首先需释放 DAQ(D6),然后分配 DAQ(D4),最后分配 ODT 入口(D3)。
3、配置 DAQ 列表
该步骤用到的指令有:SET_DAQ_PTR(E2)、WRITE_DAQ(E1)
4、开始传播数据
用到的指令有:
SET_DAQ_LIST_MODE(E0)、START_STOP_DAQ_LIST(DE)、GET_DAQ_CLOCK(DC)、START_STOP_SYNCH(DD)
6、刷写指令集
1、声明刷写开始(使用 PROGRAM_START(D2))
2、擦除 FLASH
用到的指令有 SET_MTA(F6)、PROGRAM_CLEAR(D1)。
3、开始刷写数据 (指令 PROGRAM(D0))
4、结束刷写
PROGRAM_VERIFY(C8)、PROGRAM_RESET(CF)