Report DTC Snapshot Record By DTC Number (0x04): UDS 0x19 SID

UDS 0x19 Service: How Report DTC Snapshot Record by DTC Number (0x04) Works in Vehicle Diagnostics

Hello, fellow automotive tech enthusiasts! In this blog post, Report DTC Snapshot Record by DTC Number UDS 0x04. I’ll introduce you to one of the most insightful services in th

e UDS protocol Report DTC Snapshot Record by DTC Number (0x04) under UDS 0x19 Service. This sub-function allows a tester to retrieve snapshot records linked to specific DTCs, providing crucial context about when and how a fault occurred. These records capture real-time ECU data at the moment a Diagnostic Trouble Code was set, making them vital for debugging and repair. Whether you’re performing ECU validation, diagnostics, or software testing, this function offers in-depth fault analysis. I’ll walk you through what it is, how it works, and how to interpret the request and response messages. By the end, you’ll have a clear understanding of how to implement and use this UDS feature effectively. Let’s dive into UDS diagnostics!

Table of contents

Introduction to Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service

Hello, fellow automotive diagnostics enthusiasts! In this article, we’ll explore an important sub-function of the UDS (Unified Diagnostic Services) protocol Report DTC Snapshot Record By DTC Number (0x04), which is part of the 0x19 service. This function is used to retrieve specific snapshot records associated with a Diagnostic Trouble Code (DTC), giving engineers and technicians valuable insights into the conditions present when a fault was detected. These snapshots include key vehicle and ECU data, making fault analysis more precise and efficient. Whether you’re working in diagnostics, development, or testing, understanding this service is crucial for interpreting and troubleshooting vehicle issues. Let’s break down how this feature works and how to use it in real-world scenarios.

What Is the Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service?

The Report DTC Snapshot Record by DTC Number (0x04) is a sub-function of the 0x19 service in the UDS (Unified Diagnostic Services) protocol, used to retrieve detailed snapshot data for a specific Diagnostic Trouble Code (DTC). When a fault is detected, the ECU stores not only the DTC but also a snapshot of key parameters such as engine speed, temperature, or sensor values captured at the moment the fault occurred. By using sub-function 0x04, diagnostic tools can request this snapshot information by directly specifying the DTC number, making the process efficient and targeted. The ECU then responds with the DTC, its status, and the related snapshot record(s), which help technicians and engineers analyze, debug, and resolve vehicle issues more accurately and quickly. This service plays a vital role in both development and after-sales diagnostics in the automotive industry.

Why do we need Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service?

Here’s a detailed explanation of why Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service:

1. Accurate Fault Diagnosis

The Report DTC Snapshot Record by DTC Number (0x04) helps provide a precise understanding of the conditions when a fault occurred. When a DTC is triggered, it often doesn’t offer enough detail to pinpoint the cause of the issue. The snapshot data captured at the moment of the fault, such as sensor values or ECU states, allows technicians to fully analyze and understand the circumstances, leading to a quicker and more accurate diagnosis. This ensures that the repair process is based on relevant and specific data.

2. Targeted Data Retrieval

One of the key benefits of using sub-function 0x04 is that it allows the retrieval of specific snapshot records linked to a particular DTC. Instead of manually sifting through all available diagnostic data, technicians can directly request the snapshot associated with the fault code. This targeted approach makes the diagnostic process more efficient and saves valuable time, as only the relevant information is retrieved, enhancing both the speed and accuracy of vehicle diagnostics.

3. Efficient Troubleshooting and Repair

By retrieving a snapshot tied to the exact moment a DTC was triggered, automotive engineers can troubleshoot the fault more effectively. For example, if a sensor malfunctioned, the snapshot will contain its exact reading at the time of failure, helping the technician determine whether the sensor was indeed the problem or if another factor was involved. This enables a more focused approach to repairs, reducing the trial-and-error method often involved in diagnosing vehicle issues.

4. Post-Repair Validation

The 0x04 sub-function is also crucial for post-repair validation. After repairing a fault, technicians can use the same service to verify whether the DTC has been cleared and ensure that the ECU is no longer experiencing the same issue. The snapshot records provide proof that the problem was properly addressed and allow engineers to confirm that the system is functioning as intended before returning the vehicle to the customer.

5. Role in Development and Testing

In the development phase of automotive systems, the Report DTC Snapshot Record by DTC Number service is used for rigorous testing of ECU functionality. Engineers can simulate fault scenarios, trigger DTCs, and capture snapshot data to evaluate how well the system reacts to different types of failures. This information is invaluable for refining the design and improving the system’s fault tolerance, helping manufacturers develop more reliable and robust automotive systems.

6. Enhanced Diagnostic Tool Integration

The 0x04 sub-function plays a vital role in improving the integration of diagnostic tools with vehicle ECUs. By allowing diagnostic tools to request and process snapshot data related to a specific DTC, it ensures that the diagnostic equipment can interact with the vehicle’s system more intelligently. This capability enhances the tool’s ability to generate accurate reports, perform advanced analysis, and offer detailed feedback to technicians, leading to more effective and reliable vehicle service.

7. Improved Data Logging and Traceability

Another significant benefit of using the 0x04 service is that it supports better data logging and traceability during vehicle diagnostics. The snapshots not only provide insight into the state of the vehicle’s system at the time of a fault but also serve as a permanent record of the diagnostic event. This enables technicians and manufacturers to track historical data, analyze recurring faults, and maintain accurate logs for regulatory or warranty purposes, ensuring that any future issues can be more easily diagnosed and addressed.

Report DTC Snapshot Record By DTC Number (0x04)

A client requests DTCSnapshot record data by specifying a DTCMaskRecord and DTCSnapshotRecordNumber with the sub-function reportDTCSnapshotRecordByDTCNumber. The server retrieves the data for the given DTC if it matches and returns the record number.

  • DTCSnapshotRecordNumber and DTCStoredDataRecordNumber are separate.
  • For multiple records, use reportDTCSnapshotIdentification first, and reportDTCSnapshotRecordIdentification to identify records directly.
  • The server returns a DTCSnapshotRecord with data to reconstruct vehicle conditions if a failure is identified.

If DTCSnapshotRecordNumber is 0xFF, all records for the DTC are returned in ascending order. Invalid parameters result in a negative response, while a lack of data results in a positive response with only the DTCAndStatusRecord. DTCSnapshot data is cleared upon a successful ClearDiagnosticInformation request. Vehicle manufacturers define the rules for data deletion in case of memory overflow.

Syntax of Report DTC Snapshot Record By DTC Number (SBFID-0x04) of SID-0x19

Request Message Definition – Sub-Function = Report DTC Snapshot Record By DTC Number

Data byteParameter NameByte Value
#1Read DTC Information Request SID0x19
#2sub-function = [ report Type =              
report DTC Snapshot Record By DTC Number]
0x04
#3
#4
#5
DTC Mask Record[] = [                                       
DTC High Byte                                       
DTC Middle Byte                                       
DTC Low Byte ]
0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
#6DTC Snap shot Record Number0x00 – 0xFF
C: The presence of the DTC Mask Record record and the DTC Snapshot Record Number parameter is conditional upon the sub-function parameter being set to report DTC Snapshot Record By DTC Number.

SBFID (0x04) Request Message Data-Parameter of SID (0x19)

reportType: This parameter reflects bits 6 – 0 of the sub-function parameter from the client’s request message.

DTCMaskRecord [DTCHighByte, DTCMiddleByte, DTCLowByte]

DTCMaskRecord is a 3-byte value representing a unique diagnostic trouble code (DTC) using DTCHighByte, DTCMiddleByte, and DTCLowByte. The DTC can be decoded in various ways:

  • ISO 15031-6: Identified by DTCFormatIdentifier = SAE_J2012-DA_DTCFormat_00
  • ISO 14229: Identified by DTCFormatIdentifier = ISO_14229-1_DTCFormat (manufacturer-defined)
  • SAE J1939-73: Identified by DTCFormatIdentifier = SAE_J1939-73_DTCFormat
  • ISO 11992-4: Identified by DTCFormatIdentifier = ISO_11992-4_DTCFormat
  • ISO 27145-2: Identified by DTCFormatIdentifier = SAE_J2012-DA_WWH-OBD_DTCFormat

DTCSnapshotRecordNumber

DTCSnapshotRecordNumber is a 1-byte value indicating the specific DTCSnapshot data record requested for a DTCMaskRecord via the reportDTCSnapshotByDTCNumber sub-function. 0x00 is reserved for legislated purposes. Values 0x01 to 0xFE are for manufacturer-specific use, and 0xFF requests all stored DTCSnapshot records at once.

Syntax of 0x19 SID Positive Response Message

Response Message Definition – Sub-Function = Report DTC Snapshot Record By DTC Number

SBFID (0x04) Response Message Data-Parameter of SID (0x19)

Data byteParameter NameByte Value
#1Read DTC Information +Ve Response SID0x59
#2Report Type = [                            
report DTC Snapshot Record By DTC Number ]
0x04

#3
#4
#5
#6
DTC And Status Record[] = [                                                                                      
DTC High Byte                                                  
DTC Middle Byte                                                  
DTC Low Byte                                                  
Status Of DTC ]  

0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
#7DTC Snapshot Record Number#10x00 – 0xFF
#8DTC Snapshot Record Number Of Identifiers#10x00 – 0xFF

#9
#10
#11
:
DTC Snapshot Record[]#1 = [                                                
data Identifier#1 byte#1 (MSB)                                                
data Identifier#1 byte#2 (LSB)                                                    
snapshot Data#1 byte#1                                                                      
:

0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
:
# 11+(p-1)
:
#r-(m-1)-2
#r-(m-1)-1
#r-(m-1)
:
#r
Snapshot Data#1 byte#p
                      :
Data Identifier#w byte#1 (MSB)
Data Identifier#w byte#2 (LSB)
Snapshot Data#w byte#1
                        :
snapshot Data#w byte#m ]
0x00 – 0xFF
:
0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
:
0x00 – 0xFF
:::
#tDTC Snapshot Record Number#x0x00 – 0xFF
#t+1DTC Snapshot Record Number Of Identifiers#x0x00 – 0xFF

#t+2
#t+3
#t+5
:
#t+5+(p-1)
:
DTC Snapshot Record[]#x = [
                                                     data Identifier#1 byte#1 (MSB)
                                                     data Identifier#1 byte#2 (LSB)
                                                     snapshot Data#1 byte#1
                                                                              :
                                                     snapshot Data#1 byte#p
                                                                               :

0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
:
0x00 – 0xFF
:
#n-(u-1)-2
#n-(u-1)-1
#n-(u-1)
:
#n
Data Identifier#w byte#1 (MSB)
Data Identifier#w byte#2 (LSB)
Snapshot Data#w byte#1
                                                   :
snapshot Data#w byte#u ]
0x00 – 0xFF
0x00 – 0xFF
0x00 – 0xFF
:
0x00 – 0xFF
 Here’s a condensed version:
C1: DTC Snapshot Record Number and the first data Identifier/snapshot Data pair are included if at least one DTC Snapshot record is available.
C2/C4: Multiple data Identifier/snapshot Data pairs can be present in a single DTC Snapshot Record, especially when a single data Identifier references a part of data or a block of data.
C3: DTC Snapshot Record Number and the first data Identifier/snapshot Data pair are included only when all records are requested to be reported (DTC Snapshot Record Number set to 0xFF), and more than one record is available.

reportType: This parameter reflects bits 6 – 0 of the sub-function parameter from the client’s request message.

DTCAndStatusRecord: This parameter record includes one or more groupings of DTCHighByte, DTCMiddleByte, DTCLowByte, and statusOfDTC, based on the following formats:

Supported DTC Formats:

  • ISO_14229-1_DTCFormat
  • SAE_J2012-DA_DTCFormat_00
  • SAE_J1939-73_DTCFormat
  • SAE_J2012-DA_DTCFormat_04
  • ISO_11992-4_DTCFormat
  • DTCHighByte, DTCMiddleByte, DTCLowByte: Together represent a unique identification number for a specific diagnostic trouble code.
    • DTCHighByte and DTCMiddleByte: Represent the circuit/system being diagnosed.
    • DTCLowByte: Indicates the type of fault (e.g., sensor open circuit, sensor shorted to ground). Definitions found in ISO 15031-6 [12].

Formats Supported:

  • SAE_J2012-DA_DTCFormat_00
  • ISO_14229-1_DTCFormat
  • SAE_J1939-73_DTCFormat
  • ISO11992-4DTCFormat
  • SAE_J2012-DA_DTCFormat_04

DTCSnapshotRecordNumber: This parameter is either the echo of the DTCSnapshotRecordNumber specified by the client in the reportDTCSnapshotRecordByDTCNumber request, or the actual DTCSnapshotRecordNumber of a stored DTC snapshot record.

DTCSnapshotRecordNumberOfIdentifiers: This single-byte parameter indicates the number of dataIdentifiers in the immediately following DTCSnapshotRecord. A value of 0x00 signifies that an undefined number of dataIdentifiers are included in the corresponding DTCSnapshotRecord, typically used when the record contains more than 255 dataIdentifiers.

DTCSnapshotRecord: The DTCSnapshotRecord contains a snapshot of data values captured at the time of the system malfunction.

Syntax of 0x19 SID Negative Response Message

Response Message Definition – Sub-Function = Report DTC Snapshot Record By DTC Number

Data byteParameter NameByte Value
#1Read DTC Information –Ve Response SID [ byte#1 ]0x7F
#2Requested SID [ byte#1 ]0x19
#3Negative Response Code [ byte#1 ]NRC

Example of Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service

Below are the Examples of Report DTC Snapshot Record by DTC Number (0x04) in UDS 0x19 Service:

Example of Request Message Frame Format of SBFID-0x04 for SID-0x19

ReadDTCInformation, sub-function = reportDTCSnapshotRecordByDTCNumber, request message flow

Message directionClient → Server
Message TypeRequest
Data ByteDescription (all values are in hexadecimal)Byte Value
#1Read DTC Information Request SID0x19
#2Sub-Function = ReportDTCSnapshotRecordByDTCNumber,                 
Suppress Pos Rsp Msg Indication Bit = FALSE
0x04
#3
#4
#5
DTCMaskRecord [ DTCHighByte ]
DTCMaskRecord [ DTCMiddleByte ]
DTCMaskRecord [ DTCLowByte ] 
0x12
0x34
0x56
#6DTCSnapshotRecordNumber0x02

Example of Positive Response Message Frame Format of SBFID-0x04 for SID-0x19

ReadDTCInformation, sub-function = reportDTCSnapshotRecordByDTCNumber, positive response

Message directionServer → Client
Message TypeResponse
Data ByteDescription (all values are in hexadecimal)Byte Value
#1Read DTC Information +Ve Response SID0x59
#2Report Type = Report DTC Snapshot Record By DTC Number0x04
#3
#4
#5
#6
DTC And Status Record [ DTC High Byte ]
DTC And Status Record [ DTC Middle Byte ]
DTC And Status Record [ DTC Low Byte ]
DTC And Status Record [ Status of DTC ]
0x12
0x34
0x56
0x24
#7DTC Snapshot Record Number0x02
#8DTC SnapshotRecordNumberOfIdentifiers0x01
#9
#10
dataIdentifier [ byte#1 ] (MSB)
dataIdentifier [ byte#2 ] (LSB)
0x47
0x11
#11
#12
#13
#14
#15
DTC Snapshot Record [ data#1 ] = ECT
DTC Snapshot Record [ data#2 ] = TP
DTC Snapshot Record [ data#3 ] = RPM
DTC Snapshot Record [ data#4 ] = RPM
DTC Snapshot Record [ data#5 ] = MAP
0xA6
0x66
0x07
0x50
0x20

Example of Negative Response Message Frame Format of SBFID-0x04 for SID-0x19

ReadDTCInformation, sub-function = reportDTCSnapshotRecordByDTCNumber, negative response

Message directionServer → Client
Message TypeResponse
Data ByteDescription (all values are in hexadecimal)Byte Value
#1Read DTC Information –Ve Response SID [ byte#1 ]0x7F
#2Requested SID [ byte#1 ]0x19
#3Negative Response Code [ byte#1 ]NRC
// Below example shows how to use the UDS commands over the CAN data field as per the DoCAN
// Example for Positive Response for SID-0x19
Request: Client --> Server
02 19 04
Positive Response: Server --> Client
15 59 04 12 34 56 24 02 01 47 11 A6 66 07 50 20
// Example for Negative Response for SID-0x19
Request: Client --> Server
03 19 04
Negative Response: Server --> Client
03 7F 19 13

Understanding UDS 0x19 Service – 0x04 Sub-function (Report DTC Snapshot Record by DTC Number)

The 0x04 sub-function of UDS Service 0x19 allows the diagnostic tester (client) to request snapshot records stored in the ECU, but only for a specific DTC (Diagnostic Trouble Code). This helps technicians retrieve detailed context about a particular fault in the vehicle, such as engine speed, temperature, or sensor values at the time of the fault.

✅ Example: Positive Response for SID 0x19 – 0x04

Request: Client --> Server
02 19 04
  • 02: Number of data bytes in the CAN frame (excluding the PCI byte).
  • 19: Service ID (0x19 = Read DTC Information).
  • 04: Sub-function (Report DTC Snapshot Record by DTC Number).

This message requests snapshot records for a specific DTC from the ECU.

Positive Response: Server --> Client
15 59 04 12 34 56 24 02 01 47 11 A6 66 07 50 20
  • 15 – Total length of data.
  • 59 – Positive response (0x40 + 0x19 = 0x59).
  • 04 – Echo of sub-function requested (0x04).
  • 12 34 56 – DTC value.
  • 24 – Status availability mask (or similar data format identifier).
  • 02 01 47 11 A6 66 07 50 20 – This is the snapshot data (freeze frame) related to the DTC. It may include:
    • Engine RPM
    • Vehicle speed
    • Sensor readings
    • Timestamp or operating conditions when the DTC was logged

This information helps service technicians reproduce, trace, and analyze the fault conditions that triggered the DTC.

❌ Example: Negative Response for SID 0x19 – 0x04

Request: Client --> Server
03 19 04
  • 03: Number of data bytes.
  • 19: Service ID.
  • 04: Sub-function.

Here, the client is again requesting snapshot data for a specific DTC, but something went wrong.

Negative Response: Server --> Client
03 7F 19 13
  • 7F: Negative Response.
  • 19: Original service ID that caused the error.
  • 13: NRC (Negative Response Code) – in this case, 0x13 = Invalid Format.

This means the request was not in the correct format (possibly missing required parameters like the actual DTC number), and the ECU rejected it.

Why This Matters in Vehicle Diagnostics?
  • Using 0x04 helps pinpoint exact DTC events.
  • Positive/Negative responses guide the tester to correct request formatting.
  • Ideal for advanced ECU diagnostics, snapshot tracking, and real-time fault investigation.

Discover more from PiEmbSysTech

Subscribe to get the latest posts sent to your email.

Leave a Reply

Scroll to Top

Discover more from PiEmbSysTech

Subscribe now to keep reading and get access to the full archive.

Continue reading