Glossary entry

KWP2000 (Keyword Protocol 2000).

KWP2000 is the diagnostic protocol BMW used on E-series vehicles, from the mid-1990s through the end of the E-series in 2013. It runs over the K-line bus (single-wire, 10.4 kbit/s) or, on later E-series, the D-CAN pair of the K+DCAN cable (500 kbit/s). KWP2000 was BMW’s protocol of choice before the F-series moved to UDS over DoIP.

Glossary entryUpdated August 2026Open data

Overview

The protocol stack

KWP2000 sits at the application layer of the diagnostic stack. Below it: the physical layer (K-line or D-CAN), the data-link layer (the framing on the bus), and the service layer (the actual diagnostic operations). Beemuu’s src-tauri/src/protocol/kwp2000.rs handles the KWP2000 framing and service dispatch.

Single-frame requests

KWP2000 requests fit in a single 8-byte CAN frame (or a single K-line frame on older vehicles). There is no segmentation layer — if a request needs more than 8 bytes, KWP2000 doesn’t carry it. This is a hard limit; bigger requests use a different protocol.

Service identifiers

KWP2000 services are 1-byte local identifiers. For example, 0x90 is the local ID for VIN read on E-series DME; 0x80 is the read-fault-memory ID. Each module has its own service-ID mapping — the DME’s 0x90 is different from the EGS’s 0x90.

Timing

The default KWP2000 request deadline is 1 second. The v0.13.0 cycle added per-target deadlines (1 s default, 3 s “slow”) that scale with the FTDI VCP latency timer. A 1 ms latency timer doesn’t pay a 3 s penalty on a 1 s target.

Beemuu support

Beemuu supports KWP2000 over the K+DCAN cable’s D-CAN pair. The protocol module dispatches between KWP2000 (E-series) and UDS (F/G-series) based on the connected cable and the target module’s address.

FAQ

What is KWP2000?

The diagnostic protocol BMW used on E-series vehicles, predating UDS. Single-frame requests on the K-line or D-CAN bus.

Is KWP2000 the same as OBD-II?

No. OBD-II is the emissions-mandated subset (P0xxx codes, generic PIDs). KWP2000 is BMW-specific and covers the full diagnostic surface including BMW-specific codes and live data.

Does Beemuu support KWP2000 today?

Yes. Beemuu uses KWP2000 over K+DCAN for E-series modules. The protocol module is in src-tauri/src/protocol/kwp2000.rs.

Read the source.

Every glossary entry is a project-local definition. Open a PR if you have a correction or a new term to add.

Full glossaryContributing

Last updated: 2026-08-02 ยท Beemuu contributors