Service Interaction Protocol
Tester Present
The heartbeat. 0x3E does one thing: reset the session (S3) timer. It carries no data, needs no security, and works in any session. The one subtlety is the suppress bit — 3E 80 resets the timer but asks the ECU to stay silent.
TesterPresent
the heartbeat- Service ID
- 0x3E
- Positive Response
- 0x7E
- Role
- Keep-alive — resets the S3 session timer
- Session
- Any session — no session check
- Security
- None required
- Sub-function
- 0x00 only (0x80 = same, suppress response)
- Suppress bit
- bit 7 → 3E 80 sends no response
- ISO ref
- ISO 14229-1:2020 §9 (Comm. mgmt)
Overview
“The client sends TesterPresent to indicate it is still present — preventing the server from automatically returning to the default session and stopping any active operations.”
When you enter a non-default session (0x10), the ECU starts an inactivity timer (S3, often ~5s). If no request arrives in time, it reverts to DEFAULT, drops any security unlock, and stops session-specific state. Every request resets that timer — 0x3E exists so you can reset it without doing anything else.
The S3 Timer
Watch the session timer count down. Send TesterPresent to reset it, flip on auto keep-alive to hold the session indefinitely, or let it expire and see the session drop to DEFAULT.
S3 Session Timer
The session times out after 5s of silence. Send TesterPresent to reset the timer — or let it expire and watch the session drop to DEFAULT.
Recent traffic
Send a TesterPresent — or wait and watch it time out.
Message Format
Two bytes. The whole subtlety is bit 7 of the sub-function — the suppress flag.
Message Frame Breakdown
Two bytes total. The whole subtlety is bit 7 of the sub-function — the suppress flag.
TesterPresent service identifier.
Suppress bit (0x80): 3E 00 → the ECU replies 7E 00; 3E 80 → the ECU resets the timer but sends no response. Use 0x80 for routine keep-alives to keep the bus quiet, and an occasional 0x00 when you actually want a liveness confirmation.
Service Dependencies
Service Dependencies
0x3E is the universal keep-alive — it holds the session open for every long operation. Select a node.
Starts the session and its S3 timer. 0x3E resets that timer without changing the session type.
How Often to Send
Session | Typical S3 / P2* | Recommended interval |
|---|---|---|
| Default (0x01) | 5,000 ms | 2,500 ms (S3 ÷ 2) |
| Extended (0x03) | 5,000–10,000 ms | S3 ÷ 2 |
| Programming (0x02) | often 30,000 ms+ | S3 ÷ 2 |
| Minimum practical | — | ~100 ms (avoid flooding the bus) |
Rule of thumb: send at S3 ÷ 2 on a fixed background schedule for the whole long operation — not only when the bus happens to be idle. Other requests reset the timer too, so 0x3E is only needed to cover the quiet gaps.
What TesterPresent Does NOT Do
It does not…
- Change the session type (use 0x10 for that)
- Restore a session that already lapsed
- Re-authenticate security on its own
- Require any session or security to be accepted
In this simulator
0x3E has no session or security check, so it never returns 0x11 or 0x22. A late 0x3E after a timeout simply succeeds (resetting the now-DEFAULT timer). Detect a lost session by re-checking it (e.g. 22 F1 86), not by an 0x3E error.
Negative Response Codes
NRC Decoder — SID 0x3E
This simulator emits only 0x12 and 0x13 — there is no session or security check. The greyed codes correct common misconceptions.
The only checks: missing sub-function → 0x13; sub-function ≠ 0x00 → 0x12; extra bytes → 0x13.
Troubleshooting Guide
Troubleshooting Guide
Click any issue to expand diagnosis and resolution.
ISO 14229-1 References
Standard: ISO 14229-1:2020 — TesterPresent sits in the Communication-management functional unit (§9), alongside DiagnosticSessionControl (0x10) and SecurityAccess (0x27).
Key points
- Request: 3E + sub-function (0x00, or 0x80 to suppress the response)
- Positive response 7E 00 (omitted when the suppress bit is set)
- Always exactly 2 bytes; resets the S3 session timer
- This simulator emits only NRC 0x12 (bad sub-function) and 0x13 (bad length) — no session/security NRCs