XCP (protocol)

XCP (or) "Universal Measurement and Calibration Protocol" is a network protocol originating from ASAM for connecting calibration systems to electronic control units, ECUs. It enables read and write access to variables and memory contents of microcontroller systems at runtime. Entire datasets can be acquired or stimulated synchronous to events triggered by timers or operating conditions. In addition, XCP also supports programming of flash memory.

ASAM states "The primary purpose of XCP is to adjust internal parameters and acquire the current values of internal variables of an ECU. The first letter X in XCP expresses the fact that the protocol is designed for a variety of bus systems."

In 2003, the protocol was standardized as "ASAM MCD-1 XCP". XCP is a successor to CAN Calibration Protocol (CCP) that was developed back in the mid-1990s. At that time, CAN was the dominant networking system in the automobile industry. Over time, other bus systems such as LIN, MOST and FlexRay emerged and made it necessary to extend the protocol to other transport media. In addition, XCP supports synchronous and asynchronous serial interfaces. With Ethernet or USB as the transport medium, XCP can also serve as a standardized interface to analog measurement devices and to hardware interface converters to RAM emulators, JTAG or other microcontroller debug interfaces.

Due to its broad range of use, a primary goal in the development of XCP was to achieve as lean an implementation in the ECU as possible and high scalability of features and resource utilization. XCP can even be implemented on 8-bit microcontrollers for CAN or SCI with few resources, and it exploits the full potential of FlexRay or Ethernet on high-performance platforms.

As a two-layer protocol, XCP consistently separates the protocol and transport layers from one another and adheres to a Single-Master/Multi-Slave concept. XCP always uses the same protocol layer independent of the transport layer. The “X” in its name stands for the variable and interchangeable transport layer. Currently, the following transport layers are defined as standard by ASAM as of October 2016:


 * XCP on CAN
 * XCP on CAN FD
 * XCP on SxI (SPI, SCI)
 * XCP on Ethernet (TCP/IP and UDP/IP)
 * XCP on USB
 * XCP on FlexRay

In addition to supporting other transport layers, the successor to the CCP protocol contains many functional improvements such as:

XCP allows a client to access memory on the ECU using a format defined in a separate A2L file. Because the A2L format file contains all the information to access the information, the ECU code does not have to be recompiled to access different measurements or calibrations.
 * Better resource utilization in the ECU
 * Synchronous data stimulation
 * Support of start-up measurements
 * Optimized communication by block transfer commands
 * Plug & play configuration
 * More precise measurement data acquisition by measuring the time stamps in the ECU (Slave)