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.
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 Structure
Two bytes. The whole subtlety is bit 7 of the sub-function — the suppress flag.
◆ PROTOCOL ANATOMY
0x3E TESTER PRESENT
0x3E RESPONSE
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.
Suppress Positive Response (SPRMIB) Comparison
TesterPresent commonly suppresses positive replies during live diagnostics to preserve CAN bandwidth while resetting the S3 inactivity timer.
!Critical: NRC 0x7F bypasses suppression logic and will always broadcast.
Session & Keep-Alive
SID 0x3E TesterPresent Keep-Alive Matrix
Permissions by sub-function across diagnostic sessions. Select a row for details.
| Sub-function & Mode | DEFAULT 0x01 | EXTENDED 0x03 | PROGRAMMING 0x02 | Security |
|---|---|---|---|---|
| ✓ | ✓ | ✓ | — | |
| ✓ | ✓ | ✓ | — |
Executes normally regardless of security state. Resets the S3 session inactivity timer without triggering security challenges.
Resets the S3 session inactivity timer and maintains active security unlocked status by preventing session timeout reversion to Default.
| From Session | To Session | Transition Command | Security State Effect |
|---|---|---|---|
| Any Session (Unlocked) | Preserved Session | Maintains elevated session and preserves current security unlock state. | |
| Inactivity Window (> S3) | 0x01 Default | S3 timer expires; session reverts to Default and security locks immediately. |
Triggered when this service or requested resource requires an active security unlock that has not been granted.
Triggered during unlock attempts if the calculated key fails ECU cryptographic verification.
Enforced delay lockout if the maximum number of failed key submissions (typically 3) has been exceeded.
Service Dependencies
0x3E transmits periodic heartbeat frames to refresh the S3 server timer and prevent non-default sessions from dropping. Select a node to inspect interactions.
Keep-Alive Execution Sequence
S3 Timer Maintenance & Suppression Sequence
8 stepsHow 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
EXCEPTION_MATRIX_V3
Sub-function is not 0x00 (response required) or 0x80 (suppress response).
This negative response indicates a rejection while processing the Tester Present (SID 0x3E) request. Verify preconditions, session levels, and message formatting per ISO 14229.
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
Quick Reference & Best Practices
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)