4. AURIX上的XCP从站驱动集成

在AURIX TC3xx上集成XCP从站,本质上是把“XCP协议栈”和“CAN/FlexRay/Ethernet通信外设”以及“应用内存访问”三部分拼装成一个可被上位机(如CANape、INCA)识别的从站节点。与PC端软件不同,TC3xx是裸机或AUTOSAR环境下的嵌入式目标,因此集成工作必须同时解决协议栈移植、传输层驱动、内存访问权限和实时性四个问题。本节围绕这些实际问题展开。

一、XCP从站协议栈的移植与分层

XCP从站通常以源码形式提供(如Vector XCP Basic、开源XCP或英飞凌配套示例),其结构分为三层:协议层(命令解析、DAQ/STIM、校准页管理)、传输层(XCP on CAN/FlexRay/Ethernet)和驱动层(内存读写、时间戳、事件触发)。移植时,协议层基本无需改动,重点在传输层和驱动层。

驱动层需要实现的核心接口包括:Xcp_ReadMemory、Xcp_WriteMemory、Xcp_GetTimestamp、Xcp_SendFrame、Xcp_ReceiveFrame。在TC3xx上,内存读写必须区分本地RAM、DFlash(校准数据)和PFlash(代码)。对DFlash的写操作需要调用英飞凌的Flash驱动(如IfxFlash),并注意擦除粒度(TC3xx DFlash页为8字节,扇区为4KB),不能像RAM一样直接赋值。

移植时建议先关闭DAQ功能,仅实现CTO(命令传输对象)的CONNECT、SHORT_UPLOAD、DOWNLOAD等基本命令,确认上位机能识别从站后,再逐步打开DAQ和STIM。

二、中断与DMA资源分配

XCP从站的实时性主要取决于DAQ事件的触发和传输。TC3xx有多个CAN节点、FlexRay节点和Ethernet MAC,每个节点都有独立的中断和DMA通道。资源分配的核心原则是:XCP传输中断优先级应低于控制算法中断,但高于非实时任务。

以CAN为例,TC3xx的MultiCAN+模块每个CAN节点有独立的发送/接收中断。XCP从站通常使用一个专用CAN节点(如CAN0 Node0),其接收中断优先级设为中等(例如优先级10),发送中断可设为较低优先级或使用发送完成中断。若使用DMA搬运DAQ数据,可将CAN节点的接收FIFO与DMA通道绑定,DMA在每帧接收完成后触发中断,由XCP协议层处理。

对于Ethernet,TC3xx的GETH模块支持DMA描述符环。XCP on Ethernet通常使用UDP,端口按XCP标准为5555(命令)和5556(DAQ)。DMA描述符应分配在非缓存区(或使用缓存一致性维护),避免CPU与DMA访问冲突。FlexRay的静态段和动态段需要根据XCP帧长度配置,通常将XCP帧放在动态段,避免占用控制消息的静态时隙。

AURIX TC3xx XCP从站集成结构 上位机 CANape / INCA 传输介质 CAN / FlexRay / Eth AURIX TC3xx 从站节点 通信外设 MultiCAN+ / ERAY / GETH 中断 + DMA 通道 FIFO / 描述符环 XCP传输层 XCP on CAN / FR / Eth CTO / DAQ / STIM 帧组装与解析 XCP协议层 命令解析 / 响应 DAQ列表管理 校准页 / 时间戳 内存访问与驱动层 RAM (测量变量) DFlash (校准参数) PFlash (代码) Flash驱动 应用任务 / 控制算法

三、CAN/FlexRay/Ethernet接口配置要点

三种传输层在TC3xx上的配置差异较大,但共同点是都需要正确设置波特率、帧格式和XCP传输参数。

CAN接口:TC3xx的MultiCAN+支持CAN FD。XCP on CAN通常使用标准帧(11位ID),命令帧和DAQ帧使用不同的CAN ID。例如命令帧ID=0x554,DAQ帧ID=0x555。波特率需与上位机一致,常用500kbps或1Mbps。若使用CAN FD,数据场可到64字节,能显著提高DAQ吞吐率。配置时需注意:CAN节点的中断应使能接收中断和发送完成中断,发送FIFO深度建议不小于8,避免DAQ突发时丢帧。

FlexRay接口:FlexRay的配置更复杂,需要设置通信周期、静态段长度、动态段长度、时隙数等。XCP帧通常放在动态段,使用动态时隙传输。TC3xx的ERAY模块支持FIFO和DMA,建议将XCP接收FIFO绑定到DMA通道,减少CPU中断负载。FlexRay的冷启动和同步需要网络中有至少两个节点,调试时可用一个FlexRay分析仪模拟其他节点。

Ethernet接口:TC3xx的GETH模块支持10/100/1000Mbps。XCP on Ethernet使用UDP,命令端口5555,DAQ端口5556。配置时需要设置MAC地址、IP地址(如192.168.1.100)、子网掩码和网关。DMA描述符环应放在非缓存区,或使用IfxCpu_forceToUnCache确保一致性。若使用AUTOSAR,Ethernet驱动通常由EthIf和UdpNm管理,XCP从站需要注册为UDP socket用户。

四、与AUTOSAR或非AUTOSAR工程的融合

在非AUTOSAR工程中,XCP从站通常作为一个独立任务或后台循环运行。主循环中调用Xcp_MainFunction处理接收和发送,DAQ事件由定时器中断触发。这种方式简单直接,但需要注意主循环周期不能太长,否则命令响应会变慢。建议将XCP主函数放在1ms任务中,DAQ事件按需触发。

在AUTOSAR工程中,XCP从站通常以CDD(复杂设备驱动)或SWC(软件组件)形式集成。若使用Vector的MICROSAR XCP,它已经提供了AUTOSAR适配层,只需配置Xcp模块、CanIf、PduR等。关键配置项包括:XcpTxPdu和XcpRxPdu的引用、DAQ列表的触发源(如XcpEvent_1ms)、以及内存访问的Xcp_ReadMemory回调。若使用非AUTOSAR的XCP栈,则需要自己编写适配层,将CAN帧的收发映射到CanIf的CanIf_Transmit和CanIf_RxIndication。

在AUTOSAR中集成XCP时,注意不要将XCP的DAQ传输放在高优先级中断中,否则可能影响安全监控(如看门狗、E2E保护)的实时性。建议XCP传输使用独立的中等优先级任务或中断。

五、一个可参考的集成检查清单

以下清单可用于实际集成时的自检,字段和判断依据均来自TC3xx和XCP的工程实践。

检查项 典型值/要求 判断依据
XCP命令帧ID 0x554(示例) 上位机CONNECT命令能收到正响应
DAQ帧ID 0x555(示例) DAQ列表启动后能收到数据帧
CAN波特率 500kbps或1Mbps 与上位机一致,无错误帧
DAQ事件周期 1ms / 10ms 与测量任务周期匹配
DFlash写保护 已解锁对应扇区 DOWNLOAD命令能写入校准页
DMA描述符对齐 32字节对齐 无DMA传输错误中断
XCP主函数调用周期 ≤1ms 命令响应时间小于10ms

集成完成后,建议先用SHORT_UPLOAD读取一个已知RAM变量(如0x70000000处的测试变量),确认读写通路正常;再配置一个1ms的DAQ列表,采集10个变量,观察上位机是否稳定收到数据。若出现丢帧,优先检查DMA和中断优先级,其次检查CAN发送FIFO是否溢出。对于FlexRay和Ethernet,还需确认网络配置和描述符环的缓存一致性。