BMW fault code 2A87 / P0015 (N54, N55): exhaust VANOS mechanism — the cam-position code with narrower conditions
2A87 (SAE P0015) flags the exhaust VANOS unit failing to reach commanded position. The factory conditions are stricter than 2A82 — here's what that tells you.
2A87 is the exhaust-side VANOS mechanism code (SAE P0015 — camshaft timing over-retarded, bank 1). Same family as 2A82, but the factory document is stricter about when it can set — which changes how much you should trust it when it does appear.
What the factory document says
ISTA · factory document2A87 / P0015 — Exhaust VANOS, mechanism (factory fault doc)Opens in your account's service knowledge — sign-in required.Enablement is a longer list: system voltage above 10 V; start completed, engine running; no travel-limit adaptation fault on that cylinder bank (neither after power failure nor otherwise); camshaft flank recognized; specified VANOS position between 70° and 120°; engine temperature 0–110 °C; oil temperature below 120 or 134 °C depending on engine speed. In other words, the DME excludes every confound — bad adaptations, sensor reference loss, overheated oil — before blaming the mechanism. A 2A87 that survives those gates is a real position-tracking failure, not noise.
What usually actually causes it
Community ranking on N54/N55, paraphrased:
- **Contaminated or slow exhaust VANOS solenoid** — same sludge story as 2A82, exhaust side. The [solenoid service path](../vanos-solenoid-service-guide) applies directly.
- **VANOS unit wear** — the "mechanism" in the title. Exhaust units fail a bit differently (seal wear shows under hot, thin oil first — which is why the oil-temperature gate exists).
- **Oil neglect** — old oil, low level, wrong viscosity. Cheap to rule out.
- **Chain/tensioner wear** making the position window unreachable — usually with [2A82](../fault-code-2a82) alongside, and cold-start rattle as the tell.
The fix path
- Oil service first if overdue, then clear and drive a full warm cycle.
- Swap intake and exhaust solenoids; if the code becomes 2A82, replace that solenoid.
- Both cams coding + rattle → inspect chain, tensioner, and guides before buying VANOS hardware.
- If you tune or flash, [datalog](../reading-your-datalog) cam position actual vs target — persistent lag on the exhaust cam under load is visible well before the MIL.
- ReferenceBMW fault code 2A82 / P0012 (N54, N55): intake VANOS position — the solenoid code that hides a cheap fix
- GuidesVANOS solenoid service: replacement, cleaning, and the misfire codes
- GuidesReading your datalog: RPM, boost, AFR
- ReferenceBMW fault code P0300 / 29CC (N54, N55): random misfires — what it means, what actually causes it