4. ETAS ISOLAR-AB中配置XCP
在ISOLAR-AB中配置XCP,本质上是把“标定测量通道”从ECU软件架构层面建立起来:先让Xcp模块进入ECU配置描述,再让通信矩阵(DBC/ARXML)提供CAN或以太网报文与PDU,随后在XcpGeneral中定义协议行为,在XcpOnCan/XcpOnEth中绑定具体总线,在XcpTransportLayer中把XCP报文映射到传输层,最后生成代码并集成到工程。整个过程不是简单的“点几下”,而是围绕“XCP报文如何从标定工具到达ECU、ECU如何回传”这条数据链展开的。
一、创建Xcp模块并导入通信描述
在ISOLAR-AB的ECU配置工程中,XCP属于BSW模块,需要先通过模块添加方式把Xcp模块挂到ECU实例下。通常操作路径是:在ECU Navigator中选中目标ECU,右键选择“Add Module”或通过模块配置视图添加Xcp。添加后,Xcp模块会出现在BSW模块列表中,并带有默认的XcpGeneral、XcpOnCan、XcpOnEth、XcpTransportLayer等子容器。此时模块还没有任何通信绑定,需要导入DBC或ARXML来提供CAN报文、信号、PDU以及以太网帧信息。
导入DBC时,ISOLAR-AB会把CAN矩阵中的报文、信号、节点解析为可引用的通信对象。对于XCP,关键不是所有信号,而是承载XCP命令与响应的报文,例如示例中定义:
BO_ 0x550 XCP_TX: 8 Vector__XXX
SG_ XCP_TX_DATA : 0|64@1+ (1,0) [0|0] "" Vector__XXX
BO_ 0x551 XCP_RX: 8 Vector__XXX
SG_ XCP_RX_DATA : 0|64@1+ (1,0) [0|0] "" Vector__XXX
这里0x550为ECU发送、工具接收,0x551为工具发送、ECU接收。导入ARXML时,则更关注ISignal、ISignalIPdu、Frame、SocketConnection等对象,尤其是以太网XCP需要UDP或TCP的Socket连接信息。导入完成后,应在通信描述中确认这些对象已进入ECU的通信视图,否则后续XcpOnCan/XcpOnEth无法引用。
二、XcpGeneral:协议行为的总开关
XcpGeneral决定XCP从站“支持什么、怎么响应”。在ISOLAR-AB中,常见配置项包括协议层(XCP on CAN/CAN FD/Ethernet)、字节序、地址粒度、DAQ与STIM支持、Seed&Key、时间戳、命令响应超时等。示例配置思路如下:
- Protocol Layer:选择XCP_ON_CAN或XCP_ON_ETH,必须与后续XcpOnCan/XcpOnEth一致。
- Byte Order:按ECU CPU实际字节序选择,例如Intel(小端)或Motorola(大端),否则DAQ上传的多字节变量会解析错误。
- Address Granularity:通常为1字节,若ECU地址按字对齐,需与链接器地址定义一致。
- DAQ/STIM:若只做测量,可关闭STIM以节省RAM;若需要在线标定,则打开STIM并配置DAQ列表数量。
- Seed&Key:用于保护标定权限,示例中可先关闭,联调通过后再启用。
这些参数不是孤立的,它们会直接影响A2L生成和工具连接。例如DAQ数量不足时,INCA中配置的测量列表会报“DAQ full”;字节序错误时,测量值会出现明显跳变或乱码。
三、XcpOnCan与XcpOnEth:绑定具体总线
XcpOnCan负责把XCP报文绑定到CAN或CAN FD。关键配置是Rx PDU和Tx PDU:Rx PDU对应ECU接收的XCP命令帧(如0x551),Tx PDU对应ECU发送的响应帧(如0x550)。在ISOLAR-AB中,这些PDU来自导入的DBC/ARXML,需要在下拉框中选中。若使用CAN FD,还要设置帧格式和波特率切换。示例参数:
XcpOnCan:
CanIdRx = 0x551
CanIdTx = 0x550
CanFd = false
MaxDlc = 8
RxPdu = XCP_RX
TxPdu = XCP_TX
XcpOnEth则面向以太网XCP,需要配置本地IP、端口、传输协议(UDP或TCP)以及Socket连接。UDP适合低延迟测量,TCP适合可靠传输但延迟略高。示例中可设ECU IP为192.168.1.100,端口5555,工具IP为192.168.1.10。配置完成后,必须确认ARXML中的SocketConnection与XcpOnEth引用一致,否则生成的代码不会打开对应端口。
四、XcpTransportLayer:把XCP报文映射到传输层
XcpTransportLayer是XCP与底层通信之间的“适配层”。它定义CTO(命令传输对象)和DTO(数据传输对象)如何映射到CAN报文或以太网包。对于CAN,通常一个CTO占用一帧8字节;对于以太网,CTO和DTO可以合并或分开发送。关键参数包括:
- MaxCto / MaxDto:单次传输最大长度,CAN下通常为8,以太网下可更大。
- Transport Layer Timeout:命令响应超时,示例可设100ms。
- Queue Size:发送/接收队列深度,影响高负载DAQ时的丢帧概率。
- Checksum:是否启用XCP校验和,通常与工具侧保持一致。
这一层配置错误时,典型现象是工具能连接但DAQ上传失败,或命令发出后无响应。排查时应先确认CTO/DTO映射是否与DBC中的PDU长度匹配。
五、生成代码与集成
配置完成后,在ISOLAR-AB中执行代码生成。生成内容通常包括Xcp_Cfg.c/h、Xcp_PBcfg.c以及A2L文件。生成后需要把Xcp模块加入BSW调度,确保Xcp_MainFunction被周期调用,并在RTE中把测量变量与XCP地址关联。集成时重点检查:
- Xcp模块是否已加入ECU的BSW模块列表并参与编译。
- CAN/Eth驱动是否已初始化,PDU是否已注册到XcpTransportLayer。
- A2L中的地址与ELF/MAP文件是否一致,避免标定变量偏移。
- 工具连接后能否读取到ECU信息,DAQ列表能否正常上传。
整体来看,ISOLAR-AB中的XCP配置是一条从通信描述到模块参数、再到代码生成与工具联调的完整链路。理解每个子模块的职责和它们之间的引用关系,比记住点击顺序更重要。