Таблицы DTC в Bosch EDC17 — DTCO и DTCX, обложка статьи Academy Chip Tuning

Таблицы DTC в EDC17: одна ошибка — два кода (DTCO и DTCX)

Bosch EDC17 · Диагностика

Таблицы DTC в EDC17: одна ошибка — два кода (DTCO и DTCX)

7 июля 2026 · Обновлено 7 июля 2026 · 10 мин чтения · Автор: Станислав Касин

Один и тот же обрыв читается как P2454 на дешёвом сканере и как P148E на заводском тестере. Это не сбой оборудования — Bosch EDC17 хранит каждую ошибку как два кода, в двух параллельных таблицах DTC. Разберём, зачем такая архитектура сделана, как таблицы связаны с внутренними проверками блока и что это даёт на практике при диагностике и калибровке.

Парадокс двух кодов

Представьте: у автомобиля отказал датчик перепада давления на сажевом фильтре. Диагност подключает недорогой универсальный сканер и видит ошибку P2454. Тот же автомобиль загоняют к официальному дилеру, там подключают заводской тестер — и он показывает P148E. Один и тот же обрыв, один и тот же провод, одна и та же секунда времени — а коды разные. Как так?

Ответ спрятан глубоко в прошивке блока управления. Современный дизельный ЭБУ — мы разбираем Bosch EDC17CP44 от Audi 3.0 TDI — хранит для каждой возможной неисправности не один код, а сразу два, в двух параллельных таблицах DTC. Одна называется DTCO, вторая — DTCX. Они лежат рядом в памяти, устроены одинаково, но заполнены по-разному и служат разным людям. Разберёмся, зачем так сделано, чем они отличаются и что это даёт на практике.

Что вообще такое DTC и где он живёт

DTC (Diagnostic Trouble Code) — это код неисправности, та самая «пятизначная ошибка» вроде P2454, которую показывает сканер. Внутри ЭБУ фактическая неисправность живёт не как готовый код, а как DFC (Diagnostic Fault Check) — внутренняя проверка с собственным номером. У нашего блока таких проверок около 1550: каждый датчик, каждый исполнительный механизм, каждая логическая сверка имеют свой номер DFC.

Когда проверка срабатывает и ошибка «дозревает» (проходит дебаунс, подтверждается), блок должен превратить внутренний номер DFC в человекочитаемый DTC — чтобы отдать его наружу по диагностическому протоколу. Вот тут и вступают в игру две таблицы.

Обе они — это массивы 16-битных значений, лежащие во флеш-памяти блока: DTCO по адресу 0x802B0DCC, DTCX по адресу 0x802BC7E4. Обе имеют одинаковую длину — 1550 ячеек, ровно по числу DFC. И обе индексируются номером DFC: чтобы узнать код неисправности №695, блок просто читает 695-ю ячейку нужной таблицы. DTCO[695] даёт один код, DTCX[695] — другой. Позиция одна, а содержимое разное — это и есть корень всей истории.

DTCO — код закона

Начнём с DTCO. Буква «O» здесь означает OBD (а не ноль, как иногда думают). В заводской документации Bosch эта таблица описана как стандартизованный код неисправности OBD по ISO 15031-6 — то есть код по международному стандарту OBD-II / EOBD.

Ключевое слово — «стандартизованный». Коды в DTCO подчиняются общей для всех производителей системе SAE J2012: первая буква (P — powertrain, C — chassis, B — body, U — network) и четыре шестнадцатеричных знака. Именно эти коды понимает любой сканер, от дилерского комплекса до китайского адаптера за пятьсот рублей. Именно их проверяет инструментальный контроль на техосмотре.

Но у стандартизации есть цена, и она хорошо видна в цифрах. Если пройти по всем 1550 ячейкам DTCO нашего блока, получается следующая картина:

  • заполнено только 1311 ячеек, а 239 — пустые (нули);
  • среди заполненных всего 590 уникальных кодов — то есть многие ячейки повторяются;
  • по типам преобладают P0, P2 и U0 — стандартные «общие» диапазоны.

Что это значит? Во-первых, DTCO дырявая. Закон требует стандартный код только для эмиссионно-значимых неисправностей — тех, что влияют на выхлоп. Всё остальное (внутренние сверки, комфортные функции, служебные проверки) законного кода не получает, и его ячейка остаётся нулём. Такая ошибка для универсального сканера попросту невидима — и это сделано намеренно.

Во-вторых, DTCO грубая: 1311 заполненных ячеек схлопываются всего в 590 разных кодов. Несколько внутренних проверок делят один общий код — потому что стандарт не предусматривает отдельного P-кода на каждый нюанс. Условно, и «электрический обрыв датчика», и его «расширенная проверка» могут выдать наружу один и тот же P-код, хотя внутри блока это две разные проверки.

DTCX — код завода

Теперь вторая таблица. Буква «X» расшифровывается как немецкое zusätzlich — «дополнительный». Полное заводское определение сводится к следующему: дополнительный код неисправности, специфичный для производителя. Это язык, на котором ЭБУ разговаривает с фирменным дилерским оборудованием (у концерна VAG это ODIS, у независимых — VCDS и подобные).

Здесь картина зеркально противоположная DTCO. Пройдёмся по тем же 1550 ячейкам DTCX:

  • заполнено 1549 ячеек из 1550 — практически все;
  • и все 1549 значений уникальны — строгое соответствие «один к одному»;
  • преобладает диапазон P1xxx — заводская, производительская зона кодов, плюс C0/C1 (шасси).

Иначе говоря, DTCX сплошная и точная. У каждой из полутора тысяч внутренних проверок — свой персональный, ни с чем не совпадающий код. Завод сам владеет этим пространством имён и заводит код на каждую проверку без исключения, потому что для ремонта в сервисе важна максимальная детализация: механику нужно отличить «электрический минимум датчика» от «расширенной проверки того же датчика» от «неправдоподобного значения» — и у каждого будет свой уникальный P1xxx.

Стоит отметить: заводское описание предусматривает вообще до трёх кодов на проверку — DTCO (законный), DTCM (основной заводской) и DTCX (дополнительный заводской), плюс отдельно устаревший «мигающий» код DTCB. Наша конкретная прошивка настроена на конфигурацию, где живут только DTCO + DTCX, а основной заводской слот DTCM пуст. Поэтому именно DTCX здесь несёт всю заводскую детализацию.

«Дешёвый сканер и дилерский тестер на самом деле никогда не спорят об ошибке — они просто читают два разных её перевода. Тюнер, который знает обе таблицы, перестаёт гадать, какой из них врёт». — Станислав Касин, сооснователь Academy Chip Tuning

Отличия одним взглядом

Соберём разницу в таблицу — так нагляднее всего:

Свойство DTCO (0x802B0DCC) DTCX (0x802BC7E4)
Что это законный OBD-код (ISO 15031-6) дополнительный заводской код
Буква O = OBD X = zusätzlich (доп.)
Заполнено ячеек 1311 из 1550 (239 пусто) 1549 из 1550 (почти все)
Уникальных кодов 590 (много общих) 1549 (строго 1:1)
Тип кодов P0 / P2 / U0 (стандарт) P1xxx (заводской)
Кто читает любой сканер, техосмотр дилерский тестер (ODIS / VCDS)
Характер грубый, дырявый точный, сплошной

И одна тонкая, но важная деталь: «только законный код без заводского» не встречается ни разу — ноль случаев. То есть DTCX является строгим надмножеством: всё, что закодировано в DTCO, обязательно закодировано и в DTCX, но не наоборот. Проще говоря, DTCO — это огрублённая, отфильтрованная проекция более полной заводской таблицы. Завод знает про все ошибки, а закон видит только эмиссионно значимую их часть, да ещё и под общими кодами.

Почему две таблицы, а не одна

На этом месте логичный вопрос: зачем такое усложнение? Почему бы не хранить один код и не показывать его всем?

Причина не техническая, а регуляторно-организационная. ЭБУ обязан одновременно говорить о неисправностях на двух разных языках, для двух разных аудиторий:

Язык закона. Нормы OBD-II (в Европе — EOBD) требуют, чтобы любой стандартный сканер мог прочитать эмиссионно-значимые ошибки в едином, понятном всем формате. Это нужно для техосмотра, для контроля экологии, для сервиса в любой точке мира. Здесь важна унификация, а не детализация — отсюда общие коды и намеренные пропуски для неэмиссионных проверок.

Язык завода. Для собственной диагностики производителю нужна максимальная точность: каждый путь неисправности — со своим уникальным идентификатором, включая все внутренние и комфортные проверки, которым закон кода не даёт. Это язык дилерского сервиса, где по коду мгновенно понятно, какую именно проверку и какой именно провод смотреть.

Поэтому ЭБУ хранит обе таблицы и при запросе отдаёт нужную в зависимости от того, кто спрашивает. Внутри прошивки за это отвечает крохотная функция-селектор: она смотрит на контекст диагностического запроса и возвращает указатель либо на DTCO, либо на DTCX. Универсальный OBD-запрос получает грубый законный код; заводской расширенный запрос — точный производительский. Внутренний номер DFC при этом один и тот же — просто переводится на разные «языки».

Чтение прошивки — это и есть навык, стоящий за этой статьёй

Всё, что выше — две таблицы, их адреса, функция-селектор — получено чтением кода самого блока в Ghidra, а не из DAMOS-файла. Именно этому учит трек по реверс-инжинирингу: TriCore, Renesas и PowerPC.

Смотреть курс по реверс-инжинирингу →

Пример на живом датчике

Теперь всё вышесказанное — на конкретной неисправности, которую мы полностью проследили в прошивке.

Датчик перепада давления сажевого фильтра. Его электрическая проверка (Signal Range Check) сравнивает напряжение сигнала с двумя порогами: минимумом uMin (около 1002 мВ) и максимумом uMax. Если напряжение проваливается ниже минимума — это внутренняя проверка DFC_SRCMinPPFltDiff, номер 695. Что она даёт наружу:

  • DTCO[695] = P2454 — по стандарту это «Diesel Particulate Filter Pressure Sensor Circuit Low», то есть «цепь датчика давления сажевого фильтра, низкий уровень». Именно это увидит универсальный сканер, и это точно соответствует физике: низкое напряжение = «цепь низкая».
  • DTCX[695] = P148E — заводской код той же самой проверки, который увидит дилер.
One fault, two codes: DFC #695 maps to P2454 and P148E One fault, two codes DFC #695 DFC_SRCMinPPFltDiff — DPF Δp circuit low DTCO[695] = P2454 generic OBD code · any scanner DTCX[695] = P148E factory code · dealer tool (ODIS / VCDS)
Рис. 1. Одна внутренняя проверка (DFC №695) выходит наружу как два кода — общий P2454 на любом сканере и заводской P148E на дилерском тестере. Одна ошибка, две таблицы вывода.

Соседняя проверка — превышение верхнего порога, DFC_SRCMaxPPFltDiff, номер 693:

  • DTCO[693] = P2452 (общий код «цепь датчика давления DPF»);
  • DTCX[693] = P1485.

А теперь самое показательное. Рядом есть ещё «расширенная» электрическая проверка того же датчика, номер 694. В законной таблице она даёт тот же P2452, что и проверка 693 — вот она, «many-to-one»: две разные внутренние проверки под одним общим кодом. Но в заводской таблице у них коды разные — P1485 и P1486. Дилер их различит, универсальный сканер — нет.

И финальный штрих про «дыры». У этого же датчика есть проверки правдоподобности — например, «оторван/пережат шланг» (DFC_NplHsLnPPFltDiff, номер 677). Она не эмиссионная, поэтому в законной таблице её ячейка пустая — DTCO[677] = ноль, универсальный сканер такую ошибку не покажет вовсе. Но заводская таблица её знает: DTCX[677] = P1429. То есть реальных активных неисправностей у датчика может быть больше, чем видит обычный сканер — часть из них живёт только в заводском «слое».

Проверки, упомянутые в статье

Каждая проверка ниже индексируется одним и тем же номером DFC в обеих таблицах. Ищете любой из этих идентификаторов — это соответствие и есть определяющий ответ:

Внутренняя проверка (DFC) № DFC DTCO (общий) DTCX (заводской) ЭБУ
DFC_SRCMinPPFltDiff (DPF Δp, цепь низкая) 695 P2454 P148E EDC17CP44
DFC_SRCMaxPPFltDiff (DPF Δp, цепь высокая) 693 P2452 P1485 EDC17CP44
DPF Δp, расширенная электрическая проверка 694 P2452 P1486 EDC17CP44
DFC_NplHsLnPPFltDiff (шланг оторван / пережат) 677 — (нет) P1429 EDC17CP44
DTCO versus DTCX: same 1,550 checks, two coverage patterns Same 1,550 checks, two coverage patterns DTCO — the legal table DTCX — the factory table 1,311 of 1,550 filled 1,549 of 1,550 filled 239 cells empty (zeros) 1 cell empty 590 unique codes 1,549 unique codes many checks share one code strict one-to-one mapping coarse · gappy precise · complete
Рис. 2. Одни и те же 1550 внутренних проверок, закодированные двумя способами. DTCO оставляет 239 проверок без кода и схлопывает остальные в 590 общих кодов; DTCX даёт почти каждой проверке свой уникальный.

Что это даёт на практике

Понимание двух таблиц — это не академическая мелочь, а рабочий инструмент.

Для диагноста это объясняет, почему универсальный и дилерский сканеры «врут» друг про друга. Они не врут — они читают разные таблицы одной ошибки. Если хочется полной картины, нужен инструмент, читающий заводской слой (DTCX): часть неисправностей — особенно проверки правдоподобности и внутренние сверки — в стандартном OBD просто невидима.

Для калибровщика/тюнера это карта того, где на самом деле хранятся коды. Обе таблицы индексируются номером DFC, обе имеют длину 1550, и по номеру проверки можно мгновенно узнать оба её кода. Это же понимание нужно, когда требуется корректно отключить диагностику: обнулять коды в DTCO/DTCX бессмысленно — ошибка всё равно ставится внутри и уходит в аварийный режим, просто «немой». Гасить нужно саму проверку (маской запрета DFC), а не её код на выходе. Две таблицы — это витрина, а не выключатель.

Для инженера-исследователя это чистый пример того, как один внутренний объект (номер DFC) проецируется в две разные внешние системы имён под разные требования — закона и производителя. Один источник истины, две проекции.

Это один датчик на одном блоке. А проверок — 1550.

Та же логика DFC → DTC работает по всем картам и ограничителям Bosch EDC17. На курсе Diesel Practice эта диагностика разбирается на реальных проектах — вместе с картами и физикой, которая ими управляет.

Смотреть курс Diesel Practice →

Итог

Две таблицы кодов в ЭБУ — не дубликат и не избыточность, а два уровня детализации одной и той же неисправности. DTCO — язык закона: стандартный, грубый, с пропусками, для универсального сканера и техосмотра. DTCX — язык завода: точный, сплошной, «один к одному», для дилерского сервиса. Внутри блока неисправность всегда одна (номер DFC), а наружу она выходит на том языке, на котором спросили.

Так что диагност, увидевший P2454 на дешёвом сканере и P148E на заводском тестере, столкнулся не с ошибкой оборудования, а с этой самой архитектурой: одна проблема — два кода — две аудитории.

Понимать блок, а не только его коды

Academy Chip Tuning учит калибровке ЭБУ от физики двигателя до реверс-инжиниринга прошивки — одна методология, любой блок. Посмотрите, где вы на карьерном пути.

Смотреть карьерный путь →

Частые вопросы

Почему на дешёвом сканере Bosch EDC17 показывает другой код, чем на дилерском тестере?

Потому что блок хранит для каждой ошибки два кода в двух отдельных таблицах. В DTCO лежит стандартизованный код OBD-II, который читает любой сканер (например, P2454). В DTCX — заводской код, специфичный для производителя, который читает дилерский тестер (например, P148E). Оба описывают одну и ту же внутреннюю проверку — это два перевода одной ошибки, а не две разные ошибки.

Что такое DFC в блоке Bosch?

DFC (Diagnostic Fault Check) — это внутренняя диагностическая проверка со своим номером. В Bosch EDC17 таких проверок около 1550 — по одной на каждый датчик, исполнительный механизм и логическую сверку. Внутри блока ошибка живёт как номер DFC; в человекочитаемый DTC блок превращает его только тогда, когда отдаёт ошибку наружу по диагностическому протоколу.

Чем отличаются DTCO и DTCX?

DTCO — стандартизованный код OBD (по ISO 15031-6), который читает любой сканер и проверяет техосмотр. Он грубый и с пропусками: неэмиссионные ошибки кода не получают. DTCX — дополнительный заводской код, который используют дилерские тестеры. Он сплошной (код есть почти у каждой проверки) и точный (строгое соответствие один к одному). DTCX является строгим надмножеством DTCO.

Почему обнуление кодов DTC не отключает ошибку в блоке?

Потому что DTCO и DTCX — это только таблицы вывода, витрина, а не выключатель. Ошибка всё равно ставится внутри своей проверкой DFC и всё равно уводит блок в аварийный режим; обнуление кода на выходе просто делает её «немой». Чтобы проверка перестала срабатывать, гасить нужно саму проверку DFC (маской запрета), а не код на её выходе.

Могут ли у машины быть активные ошибки, которые обычный OBD-сканер не показывает?

Да. В таблице DTCO есть пустые ячейки для неэмиссионных проверок — особенно для проверок правдоподобности и внутренних сверок. Если у проверки нет записи в DTCO, универсальный сканер её вообще не покажет. Заводская таблица DTCX эту ошибку всё равно содержит, поэтому дилерский тестер видит ошибки, которые дешёвому сканеру недоступны.

Читайте также: Курс Diesel Practice · Курс по реверс-инжинирингу · Карьерный путь калибровщика ЭБУ

Станислав Касин — сооснователь Academy Chip Tuning, отвечает за учебную программу и методологию обучения калибровке ЭБУ. Анализ прошивки в этой статье проведён на боевой калибровке Bosch EDC17CP44.

Похожие записи