Содержание статьи
XCP (Universal Measurement and Calibration Protocol) — это бинарный автомобильный интерфейсно-независимый протокол прикладного уровня модели OSI-7. Используется при разработке и отладке ECU. Появился в далёком 2003 году как потомок ранее существующего протокола CCP.
Для чего нужен XCP?
XCP предназначен для чтения и записи памяти микроконтроллера ЭБУ. Это обычно диагностика, калибровка и измерение. Основные действия по XCP:
-
Настройка внутренних параметров ECU
-
Калибровка ECU
-
Обновление прошивки для целей разработки
-
Извлечение данных из ECU (показания датчиков, переменных программы)
-
Ввод данных в ECU
Основная задача XCP — предоставить инженеру-разработчику возможность в реальном времени наблюдать за внутренними переменными ECU и изменять их, не перепрошивая электронный блок. XCP используется исключительно на этапе разработки и калибровки ECU.
Важное преимущество XCP — это его независимость от физической шины. Обозначение «X» в названии означает, что протокол может работать поверх CAN, CAN FD, Ethernet, FlexRay, UART и других интерфейсов. Это делает его универсальным инструментом, пригодным для разработки самых разных систем.
Почему появился XCP на фоне UDS?
Нужен был диагностический протокол, который для своей реализации потребует меньше системных ресурсов от RAM, Flash памяти и мощности CPU.
Нужен был протокол, который позволит достигнуть большей битовой скорости в таких интерфейсах как CAN, UART и прочие.
Основные принципы работы XCP
Протокол XCP обычно работает поверх канального протокола CAN, однако XCP также может работать поверх других протоколов, таких как UART, SPI, CAN-FD, Ethernet: TCP или UDP, FlexRay, USB и другим.
В сети XCP есть одно ведущее устройство (master) и несколько ведомых (slave). Работает по принципу запрос-ответ. Master инициирует сессию общения. Slave отвечает. Широковещательных пакетов нет (за исключением сообщения GET_SLAVE_ID). Master периодически посылает сообщения Data stimulation без ожидания ответа на них. Slave не может одновременно общаться с несколькими мастерами. Программа на ПК является ведущим и адресно опрашивает конкретный ECU.
Произвольный доступ к ячейкам памяти ECU (RAM, Flash) позволяет считывать любые переменные (сигналы с датчиков, коэффициенты ПИД-регулятора) и изменять калибровочные таблицы (топливные карты, углы опережения зажигания) на лету.
Структура сообщения XCP
Сообщение протокола XCP в общем случае состоит из трёх частей: заголовка, пакета и хвоста.
Пакет XCP содержит следующие поля:
Поле
Размер
Описание
Identification field
1-4 байта
Идентифицирует лишь тип пакета, само устройство адресуется по CAN ID
Timestamp field
1-4 байта
Метка времени
Data field
0..N байт
Данные
Есть два типа пакетов:
-
CTO (Command Transfer Object) — для передачи команд управления
-
DTO (Data Transfer Object) — для передачи синхронных данных
Пример обмена данными по XCP:

CAN
При работе поверх протокола CAN заголовок будет отсутствовать.

UART/SPI
При работе по UART либо SPI пакет выглядит следующим образом:

По сравнению с CAN, в варианте по UART добавляются следующие поля:
Поле
Длина
Описание
LEN
2 байта
Длина пакета (не считая заголовка или хвоста)
CTR
2 байта
Последовательный номер пакета
FILL
0..N
Заполнение (используется, если по каким то причинам требуется посылать пакеты какого-то специфического размера)
CS
2 байта
Контрольная сумма вычисляется простым суммированием байтов в XCP-заголовке, XCP-пакете и XCP-хвосте, не считая самого поля CS. Переполнение игнорируется.
Описание структуры данных XCP
XCP обращается к переменным не по имени, а по их адресу в физической памяти (RAM или Flash). Соответствие между адресами и именами переменных находятся в текстовом A2L-файле, который стандартизован ASAM MCD-2 MC. Это значит, что для доступа к переменной в ECU не надо добавлять в прошивку какой бы то ни было отдельный Си-код, как это происходит в случае с протоколом UDS. Прошивка просто содержит минималистическое ядро XCP-протокола, которое только лишь читает и пишет физическую память (как и, к примеру, с JTAG).
A2L — это текстовый файл, описывающий структуру данных, передаваемых по протоколу A2L. A2L перечисляет в себе, с какими переменными мы будем работать (читать и писать). Файл A2L содержит информацию о переменных в памяти ЭБУ. Формат A2L файла таков, чтобы его было легко синтаксически анализировать всяческими утилитами.

В файле A2L могут быть комментарии в стиле C, есть include. Файл задаёт переменные, их типы данных, адреса в памяти.

Переменные, описываемые в файле A2L, могут быть различных типов данных:

Формат файла A2L не следует путать с такими форматами, как DBC или ARXML, так как последние два используются для описания структуры CAN, Ethernet и SOME/IP-сообщений, но не структур данных в CCP или XCP.
Часто внутри ECU функции даже не вычисляются формулами. Вместо этого в прошивку загружаются Look Up таблицы. Значения этих таблиц порой приходится редактировать, чтобы снова сохранить в ROM. Это как раз делают по протоколу XCP.
XCP позволяет гибко калибровать любой параметр и считывать любой сигнал, при этом в коде программы никаких действия для этого не нужно делать, т.к. XCP-модуль напрямую общается с памятью, а вся информация о переменных хранится в файле *.а2l.
Преимущества XCP
Благодаря XCP и совместимому с ним софту можно строить графики и даже анимации поверхностей по тем данным, что читаются из ECU. В этом плане XPC похож на утилиту Segger J-Scope. Такой диагностики не достигнуть через текстовые CLI терминалы и ASCII графику.
К примеру, в CanEasy можно использовать как протокол CCP, так и XCP, с последующим выводом полученных от ЭБУ данных на любой тип панелей, начиная от простых индикаторов сигнала, до навороченных RichPanels.
Термины и обозначения
XCP
Universal Measurement and Calibration Protocol
CCP
CAN calibrarion protocol
PDU
Protocol Data Unit
OEM
Original equipment manufacturer
MC
Measurement and calibration
MCD
Measurement, Calibration and Diagnostic systems
CAN
Controller Area Network
A2L
File Extension for an ASAM 2MC Language File (ASAM MCD-2 MC Language)
UDP
User Datagram Protocol
ODT
Object Description Table
USB
Universal Serial Bus
PID
Packet IDentifier
SxI
SPI или SCI
ASAM
Association for Standardization of Automation and Measuring Systems
CAN FD
Controller Area Network Flexible Data rate
DBC
CAN database
SCI
Serial Communications Interface
SPI
Serial Peripheral Interface
ECU
Electronic Control Unit
Список использованных источников
-
CCP / XCP on CAN Explained — A Simple Intro [2025]
-
CANape – The ECU Measurement & Calibration Tool
-
XCP The standard protocol for the embedded Development
-
CanEasy: working with XCP: basics
