ODX (Open Diagnostic Data Exchange)
ODX (ISO 22901-1, ASAM MCD-2 D) is the XML format that describes how an ECU speaks UDS: services, DIDs and routines. How it is structured and what testers do with it.
Updated This page as Markdown
In short
ODX (Open Diagnostic Data Exchange) is the XML-based data format standardised as ASAM MCD-2 D and ISO 22901-1 that describes the diagnostic interface of an ECU: which services it supports, the requests and responses, the data identifiers and routines and how to convert raw bytes into physical values. Diagnostic testers and flashing tools read it instead of hard-coding each ECU. For security testing it is the specification against which the real ECU behaviour is compared.
What is ODX?
ODX is a data model in XML that describes the diagnostic communication of an ECU so that tools can work with it without ECU-specific code. Its main content is organised in diagnostic layers that inherit from each other: PROTOCOL, FUNCTIONAL-GROUP, BASE-VARIANT and ECU-VARIANT, plus ECU-SHARED-DATA for common definitions. Each layer contains DIAG-SERVICE elements with their REQUEST, POS-RESPONSE and NEG-RESPONSE structures, and data object properties (DOPs) with computation methods that turn bytes into physical values and units.
For example, the ODX entry for a ReadDataByIdentifier service tells a tool that request 22 F1 8C reads the ECU serial number, that the response 62 F1 8C is followed by ASCII bytes, and in which sessions the service is allowed.
Where is it defined?
ASAM defines ODX as MCD-2 D; ISO 22901-1 publishes the data model as an international standard. The file types include .odx-d for diagnostic layers, .odx-c and .odx-cs for communication parameters and .odx-f for flash data. The UDS content it describes comes from ISO 14229-1.
What it means in practice
ODX is the closest thing to a specification of the diagnostic interface that a test team usually gets. It names data identifiers and routines, shows which ones are meant to be writable and which session or security level each service needs. That makes it the reference for two security questions: does the ECU enforce what the file says, and does the ECU expose anything the file does not mention?
We regularly see both kinds of gap. Data identifiers marked as read-only in the description accept writes, and services restricted to the extended session in the file answer in the default session. Undocumented identifiers are often leftovers from development that nobody reviewed.
How AutoST tests it
AutoST imports ODX and CDD files. The diagnostics engine uses them to name the data identifiers found during enumeration and to scan the routine identifiers the file lists, including write probing that checks whether write access is enforced as documented. Identifiers that answer but are not in the file appear as separate findings.
Common misunderstandings
ODX is a description, not a security policy. An ECU does not read its ODX file at runtime, so the file can be correct while the implementation is not. And not every supplier delivers complete ODX: a partial file still helps, but the enumeration has to fill the gaps.
FAQ
Frequently asked questions
What is the difference between ODX and PDX?
ODX is the data format, PDX is the container. A PDX file is a ZIP archive that packages several ODX files (diagnostic layers, communication parameters, flash data) together with an index, so a tool can load a whole ECU or vehicle description in one file.
What is the difference between ODX and CDD?
CDD is the proprietary format of the Vector CANdelaStudio tool. Both describe the same kind of information, and CANdelaStudio can export ODX. Many suppliers keep their master data in CDD and deliver ODX or PDX to the OEM.
Does an ODX file tell me everything an ECU can do?
No. It describes what the manufacturer documented. Real ECUs often answer data identifiers or services that the file does not list, and comparing the two is one of the most useful checks in a security test.
Sources
Related pages
- GlossaryPDX (Packaged ODX)A PDX file is a ZIP container that packages ODX diagnostic data (ODX-D, ODX-C, ODX-F and more) with a catalog, per ISO 22901-1. What is inside and how testers use it.
- GlossaryCDD (CANdela Diagnostic Description)A CDD file is the Vector CANdela description of an ECU diagnostic interface: sessions, services, DIDs, routines and security levels. What it holds and how testers use it.
- GlossaryDID (Data Identifier)A DID is the 16-bit identifier UDS uses to address a data record, read with 0x22 and written with 0x2E. Standard ranges from ISO 14229-1 Annex C and writable DIDs.
- GlossaryRID (Routine Identifier)A RID is the two-byte identifier that RoutineControl (0x31) uses to start, stop and query a routine in an ECU, from erase memory (FF00) to manufacturer tests.
- InsightsODX-driven testing: turn your diagnostic data into testsHow ODX and PDX files drive a sharper ECU security test: what a DIAG-LAYER names, how DIDs and routines come from the data, and why that beats brute force.
- PlatformYour ODX and CDD, turned into tests.AutoST imports ODX, PDX and Vector CDD files to name the DIDs it finds and run the right routines (0x31), with opt-in, clearly warned write-probing.
