Unified Diagnostic Services


Unified Diagnostic Services is a diagnostic communication protocol used by electronic control units in automotive electronics. UDS is defined by ISO 14229 and evolved from ISO 14230, which is now largely obsolete. UDS specifies functionality at the session, presentation, and application layers of the OSI model. Because of this, it can operate on different physical and data link layers such as CAN, LIN, Ethernet, FlexRay, and K-Line. In practice, UDS is most commonly used over CAN via Diagnostic over CAN, defined in ISO 15765.
The term "unified" refers to the fact that UDS is an international standard rather than a manufacturer-specific protocol. Today, nearly all Tier 1 suppliers implement UDS in ECUs developed for automotive original equipment manufacturers (OEMs). UDS is also integrated into larger software architectures, including AUTOSAR.
Modern vehicles have a diagnostic interface for on-board diagnostics, which makes it possible to connect a computer or diagnostics tool, which is referred to as tester, to the communication system of the vehicle. Thus, UDS requests can be sent to the controllers which provide responses. This makes it possible to interrogate the fault memory of the individual control units, to update them with new firmware, have low-level interaction with their hardware, or to make use of special functions to attempt to understand the environment and operating conditions of an ECU to be able to diagnose faulty or otherwise undesirable behavior.

Services

SID

Diagnostic Message

There are two types of diagnostic messages transmitted using UDS protocol:
  • Request
  • Response

Request Message

Request messages are transmitted by a Client towards one or more Servers.
Service Identifier is the first byte in each request message.

Response Message

Response messages are transmitted by Servers to a Client.
The first byte in the response message is usually Response Service Identifier value.

Positive Response Message

Format of each positive response message is specific for the diagnostic service it relates to.

Negative Response Message

Negative Response Codes
Negative Response Codes carry the information for request message rejection.
ValueName
0x10generalReject
0x11serviceNotSupported
0x12SubFunctionNotSupported
0x13incorrectMessageLengthOrInvalidFormat
0x14responseTooLong
0x21busyRepeatRequest
0x22conditionsNotCorrect
0x24requestSequenceError
0x25noResponseFromSubnetComponent
0x26FailurePreventsExecutionOfRequestedAction
0x31requestOutOfRange
0x33securityAccessDenied
0x34authenticationRequired
0x35invalidKey
0x36exceedNumberOfAttempts
0x37requiredTimeDelayNotExpired
0x38secureDataTransmissionRequired
0x39secureDataTransmissionNotAllowed
0x3AsecureDataVerificationFailed
0x50Certificate verification failed, Invalid Time Period
0x51Certificate verification failed, Invalid Signature
0x52Certificate verification failed, Invalid Chain of Trust
0x53Certificate verification failed, Invalid Type
0x54Certificate verification failed, Invalid Format
0x55Certificate verification failed, Invalid Content
0x56Certificate verification failed, Invalid Scope
0x57Certificate verification failed, Invalid Certificate
0x58Ownership verification failed
0x59Challenge calculation failed
0x5ASetting Access Rights failed
0x5BSession key creation/derivation failed
0x5CConfiguration data usage failed
0x5DDeAuthentication failed
0x70uploadDownloadNotAccepted
0x71transferDataSuspended
0x72generalProgrammingFailure
0x73wrongBlockSequenceCounter
0x78requestCorrectlyReceived-ResponsePending
0x7ESubFunctionNotSupportedInActiveSession
0x7FserviceNotSupportedInActiveSession
0x81rpmTooHigh
0x82rpmTooLow
0x83engineIsRunning
0x84engineIsNotRunning
0x85engineRunTimeTooLow
0x86temperatureTooHigh
0x87temperatureTooLow
0x88vehicleSpeedTooHigh
0x89vehicleSpeedTooLow
0x8Athrottle/PedalTooHigh
0x8Bthrottle/PedalTooLow
0x8CtransmissionRangeNotInNeutral
0x8DtransmissionRangeNotInGear
0x8FbrakeSwitchNotClosed
0x90shifterLeverNotInPark
0x91torqueConverterClutchLocked
0x92voltageTooHigh
0x93voltageTooLow
0x94ResourceTemporarilyNotAvailable