4. AUTOSAR与RH850 XCP集成

在RH850平台上做XCP测量标定,如果项目已经采用AUTOSAR架构,通常不会让XCP协议栈“绕过”基础软件直接挂在CAN驱动上,而是把XCP作为一个标准BSW模块(Xcp)纳入AUTOSAR通信栈。这样做的核心价值在于:XCP报文与诊断、网络管理、普通应用报文共享同一套CanIf、PduR、ComM资源,ECU的通信状态、唤醒睡眠、总线负载都能被统一管理。本节围绕“Xcp模块如何配置”和“它与CanIf、PduR、ComM如何交互”两条主线展开。

一、Xcp在AUTOSAR通信栈中的位置

在AUTOSAR分层模型中,Xcp位于服务层,向下通过PduR路由到CanIf,再经Can驱动收发;向上通过Xcp接口与XCP命令处理、DAQ/STIM、标定RAM访问等逻辑相连。与ComM的关系则体现在通信模式控制:ComM决定CAN通道是否处于FULL_COMMUNICATION,Xcp的传输层可用性依赖该状态。理解这个位置,是配置的起点。

应用层 / 标定工具侧 XCP命令处理 · DAQ/STIM · 标定RAM访问 · A2L描述 Xcp 模块(服务层) XcpConfig · 传输层适配 · 事件通道 · 命令解析 PduR(PDU路由器) XCP PDU路由 · 上下行分发 · 网关配置 CanIf(CAN接口层) Tx/Rx PDU · 控制器模式 · 唤醒校验 Can 驱动 / RH850 CAN控制器 ComM 通信模式管理 NO_COMMUNICATION SILENT_COMMUNICATION FULL_COMMUNICATION 控制CanIf控制器模式 XCP命令/响应 Xcp_Transmit / RxIndication CanIf_Transmit / RxIndication 模式请求 通信可用性

二、Xcp模块的关键配置项

在AUTOSAR配置工具(如DaVinci Configurator、EB tresos)中,Xcp模块的配置大体分为四组:通用参数、传输层参数、DAQ/STIM参数和事件通道参数。以下参数名以常见AUTOSAR XCP规范命名为例,具体名称可能因工具版本略有差异。

通用参数:XcpProtocolLayer选择XCP on CAN;XcpCmdResponseTimeout设置命令响应超时,典型值500ms;XcpMaxCtoSize与XcpMaxDtoSize分别限制命令传输对象和数据传输对象的最大字节数,CAN上通常CTO为8字节,DTO可配置为8或更大(配合CAN FD)。

传输层参数:需要为XCP分配独立的CAN ID。例如命令接收XcpRxPduId对应CAN ID 0x554,命令发送XcpTxPduId对应0x555,DAQ数据发送对应0x556。这些PDU必须在CanIf中注册,并在PduR中建立从Xcp到CanIf的路由路径。

DAQ/STIM参数:XcpDaqCount定义DAQ列表数量,例如4个;XcpOdtCount定义每个DAQ的ODT数量;XcpMaxEventChannels定义事件通道数,例如3个,分别对应1ms、10ms、100ms任务周期。DAQ列表的触发源需要绑定到具体事件通道。

事件通道参数:每个事件通道配置XcpEventChannelTimeCycle(单位ms)和XcpEventChannelTimeUnit。例如事件通道0配置为1ms,用于高速采样;事件通道1配置为10ms,用于中等速率信号;事件通道2配置为100ms,用于慢速监控。

三、Xcp与CanIf、PduR、ComM的交互关系

这三者的交互可以按“发送路径”和“接收路径”分别理解,同时叠加ComM的模式控制。

发送路径(XCP响应/DAQ数据):Xcp模块调用PduR_XcpTransmit(),PduR根据路由表将PDU转发给CanIf_Transmit(),CanIf检查控制器状态后写入CAN邮箱。如果ComM未将通道置为FULL_COMMUNICATION,CanIf会拒绝发送或返回E_NOT_OK,Xcp侧表现为响应超时。

接收路径(XCP命令):CAN控制器收到报文后,CanIf的RxIndication回调触发,CanIf调用PduR_XcpRxIndication(),PduR再调用Xcp_RxIndication(),Xcp解析命令并准备响应。这条路径要求CanIf的Rx PDU配置中使能CanIfRxPduUserRxIndicationUL为PDUR,且PduR中Xcp的接收路由已激活。

ComM的介入点:ComM通过ComM_RequestComMode()管理通道通信模式。当标定工具连接时,通常由诊断或应用触发ComM进入FULL_COMMUNICATION;当总线睡眠或故障时,ComM切到NO_COMMUNICATION,此时Xcp的传输层不可用。配置时需要确保Xcp所属的ComM通道与CanIf控制器、Can驱动通道三者一致,否则会出现“Xcp已初始化但无法收发”的现象。

配置检查要点:CanIf中XCP的Tx/Rx PDU必须使能;PduR中Xcp的上下行路由必须成对存在;ComM通道与CanIf控制器通道号必须匹配;Xcp的Rx PDU需要配置为接收,Tx PDU配置为发送,不可混用。

四、一个可参考的配置片段

以下为Xcp模块在CAN上的典型配置参数示例(数值为教学假设,实际项目需根据总线负载和标定需求调整):

XcpConfig:
  XcpProtocolLayer        = XCP_ON_CAN
  XcpMaxCtoSize           = 8
  XcpMaxDtoSize           = 8
  XcpCmdResponseTimeout   = 500ms
  XcpDaqCount             = 4
  XcpOdtCountPerDaq       = 8
  XcpMaxEventChannels     = 3

EventChannel_0:
  TimeCycle = 1ms
  Unit      = ms
  DaqList   = DAQ_0, DAQ_1

EventChannel_1:
  TimeCycle = 10ms
  Unit      = ms
  DaqList   = DAQ_2

EventChannel_2:
  TimeCycle = 100ms
  Unit      = ms
  DaqList   = DAQ_3

CanIf_Pdu:
  XcpRxPdu  -> CanId 0x554, Rx
  XcpTxPdu  -> CanId 0x555, Tx
  XcpDaqPdu -> CanId 0x556, Tx

PduR_Routing:
  Xcp -> CanIf : XcpTxPdu, XcpDaqPdu
  CanIf -> Xcp : XcpRxPdu

ComM_Channel:
  ChannelId = CAN_0
  User      = XCP
  Mode      = FULL_COMMUNICATION (标定期间)

配置完成后,判断集成是否成功的依据是:标定工具能通过0x554/0x555完成CONNECT、GET_STATUS等命令交互;DAQ列表能按事件通道周期在0x556上发出数据;当ComM切到NO_COMMUNICATION时,XCP通信中断且无总线错误。若出现命令无响应,优先检查PduR路由和CanIf的Rx PDU使能状态;若DAQ数据不按周期发送,检查事件通道与DAQ列表的绑定关系以及任务调度周期是否匹配。

RH850的CAN控制器在AUTOSAR驱动下,邮箱分配和中断优先级会影响XCP的实时性。若DAQ数据出现丢帧,除了检查Xcp配置,还需确认Can驱动中断优先级高于标定任务,且CAN邮箱数量足够覆盖XCP的Tx PDU。

把Xcp纳入AUTOSAR通信栈后,测量标定不再是“旁路”行为,而是与整车通信管理协同的标准功能。配置的核心在于三件事:PDU路由成对、ComM通道一致、事件通道与任务周期匹配。这三点确认后,RH850上的XCP集成基本可以稳定运行。