Service Interaction Protocol
Read Data By Periodic Identifier
Overview
“The ReadDataByPeriodicIdentifier service is used by the client to request periodic transmission of data record values of data identifiers from the server.”
Continuous Monitoring
- Real-time RPM/Speed logging
- Dynamic sensor calibration
- Oscilloscope-style data viewing
- Diagnostic logging sessions
Dependencies
Requires TesterPresent (0x3E) to keep the session alive, otherwise streaming stops on P3 timeout.
One-Shot vs Periodic
Unlike ReadDataByIdentifier (0x22), which returns a single value per request, 0x2A sets up a “subscription” where the ECU autonomously pushes data.

Visualizing the streaming nature of Periodic Reads vs standard one-shot reads.
Transmission Modes
The first parameter defines how fast the ECU should sample and send the data.
Mode | Name | Typical Frequency | Use Case |
|---|---|---|---|
| 0x01 | Slow Rate | 1-2 Hz | Temp, Battery Level |
| 0x02 | Medium Rate | 5-10 Hz | Vehicle Speed, O2 Sensors |
| 0x03 | Fast Rate | 20-100 Hz | Crank Sensor, Torque |
| 0x04 | Stop Sending | N/A | Explicit termination |
Message Format
Request Format
Byte | Field | Value | Description |
|---|---|---|---|
| 0 | SID | 0x2A | Read Data Periodic |
| 1 | Mode | 0x01-04 | Transmission rate |
| 2 | PDID #1 | 0xNN | Periodic Data ID |
| 3 | PDID #N | ... | Optional extra IDs |
Periodic Response
Note: The ECU sends multiple responses for a single request!
Byte | Field | Value | Description |
|---|---|---|---|
| 0 | Response SID | 0x6A | Positive Response |
| 1 | PDID | 0xNN | Identifier of the data |
| 2-N | Data | ... | The actual payload |
Examples
Start RPM Streaming (Medium Rate)
Request
2A 02 01> Start PDID 0x01 at Medium Rate
Periodic #1
6A 01 0B B8> RPM = 3000 (0x0BB8)
Periodic #2
6A 01 0B BA> RPM = 3002 (sent ~100ms later)
Stop Streaming
Request
2A 04 01> Stop PDID 0x01
Response
6A> Confirmation: Stopped
Negative Response Codes
Logic_Exceptions