3. AUTOSAR XCP模块架构
在AUTOSAR分层架构中,XCP模块属于BSW(基础软件)中的通信服务层,但它与普通通信协议栈模块的定位有明显区别。普通通信模块(如CanIf、Com、PduR)服务于ECU内部功能之间的信号交换,而XCP模块的核心使命是让外部标定工具(如INCA、CANape)能够直接读写ECU内部内存、观测运行变量、刷写标定数据。因此,XCP在BSW中既是一个通信协议模块,又是一个“内存访问代理”,它需要同时与通信栈、网络管理、诊断事件管理等多个模块协作。
XCP在BSW中的位置
从分层角度看,XCP模块位于服务层,向上通过XCP接口(通常以C函数或RTE Port形式暴露)与SWC或应用层标定变量交互,向下通过传输层抽象接口与具体的总线驱动连接。它不直接操作CAN控制器或以太网MAC,而是依赖PduR(PDU路由器)完成PDU的转发。这种设计使XCP能够独立于底层总线类型,同一套XCP协议逻辑可以运行在CAN、CAN FD、以太网甚至FlexRay之上。
在AUTOSAR标准中,XCP模块的配置由XcpConfig容器描述,该容器包含通用参数、传输层特定参数、DAQ/STIM配置、事件通道配置等。XcpConfig不是单一扁平结构,而是按功能域组织为多个子容器,例如XcpGeneral、XcpOnCan、XcpOnEth、XcpDaq、XcpStim、XcpEvent等。理解这些容器的层次关系,是正确配置XCP模块的前提。
与PduR、ComM、Det的交互
XCP模块与PduR的交互是数据通路的核心。当XCP需要发送响应或DAQ数据时,它调用PduR_XcpTransmit,将XCP PDU交给PduR;PduR根据配置的路由表,把PDU转发到CanIf或EthIf。接收方向同理:CanIf或EthIf收到XCP报文后,通过PduR_XcpRxIndication上报给XCP模块。这里的关键配置是PduR中的路由路径,必须确保XCP的PDU ID与CAN ID或以太网帧类型正确映射。如果路由配置错误,标定工具会表现为“连接超时”或“无响应”,而ECU内部可能没有任何错误记录,排查时首先应检查PduR路由表。
与ComM的交互体现在通信模式管理上。XCP通信需要总线处于全通信模式(Full Communication),如果ComM将总线切换到无通信模式(No Communication)或静默模式,XCP传输会中断。典型场景是:ECU在低功耗状态下,ComM关闭了CAN控制器,此时标定工具无法建立XCP连接。因此,在标定工程中通常需要配置ComM,使XCP激活时请求保持全通信模式,或者通过XCP的CONNECT命令触发ComM模式切换。实际项目中,常见做法是在XCP连接建立后,由XCP模块调用ComM_RequestComMode请求全通信,并在连接断开后释放请求。
与Det的交互用于开发错误报告。XCP模块在检测到配置错误、传输层错误、内存访问越界或DAQ列表溢出时,会调用Det_ReportError,传入模块ID、实例ID、API ID和错误码。例如,当XCP尝试访问未映射的标定地址时,会报告XCP_E_INVALID_ADDRESS。在开发阶段,Det错误会记录到调试器或NVM中,帮助定位配置问题;在生产版本中,Det通常被禁用或裁剪,以节省资源。需要注意的是,Det报告的是开发错误,不是运行时功能安全机制,不能替代E2E保护或功能安全监控。
XcpConfig配置容器
XcpConfig是XCP模块的配置根容器,其结构按功能域划分。XcpGeneral包含协议版本、最大CTO/DTO长度、字节序、地址粒度等全局参数。XcpOnCan容器定义CAN传输层参数,包括CAN ID、CAN FD使能、最大DLC、填充字节等。XcpOnEth容器定义以太网传输层参数,包括IP地址、端口号、协议类型(UDP/TCP)、最大帧长等。XcpDaq和XcpStim分别配置数据采集和激励通道,包括DAQ列表数量、ODT条目数、事件通道绑定关系。XcpEvent定义事件通道,每个事件通道关联一个周期任务或触发源,决定DAQ数据的采样时刻。
配置时需要注意几个关键约束:DAQ列表的总ODT条目数不能超过XcpGeneral中配置的最大值;每个事件通道的预分频(Prescaler)决定实际采样周期,例如事件周期为10ms、预分频为5,则DAQ采样周期为50ms;CAN传输层中,CTO和DTO可以使用相同或不同的CAN ID,但必须与PduR路由表一致。这些参数在标定工具中会直接影响测量数据的刷新率和总线负载,配置不当会导致数据丢失或总线过载。
XcpOnCan与XcpOnEth传输层抽象
XCP协议本身与传输层无关,传输层抽象层负责将XCP PDU封装为具体总线的帧格式。XcpOnCan将XCP PDU映射到CAN数据帧,支持经典CAN和CAN FD。经典CAN下单帧最大8字节,因此长响应需要分包传输(CTO分包);CAN FD下单帧最大64字节,可减少分包次数。XcpOnEth将XCP PDU映射到UDP或TCP报文,UDP适合低延迟测量,TCP适合可靠刷写。传输层抽象向上提供统一的发送、接收、超时和初始化接口,XCP核心模块不感知底层是CAN还是以太网。
在实际工程中,选择XcpOnCan还是XcpOnEth取决于标定场景。CAN适合中小数据量、高实时性要求的测量,布线简单;以太网适合大数据量刷写、高带宽DAQ,但需要ECU具备以太网硬件和协议栈。部分ECU同时支持两者,通过XcpConfig中的传输层选择参数决定激活哪一个。无论选择哪种传输层,XCP协议命令、DAQ列表和内存访问逻辑完全一致,这也是AUTOSAR XCP模块架构设计的核心价值。