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
Factory service document2A87 / P0015 — Exhaust VANOS, mechanism (factory fault doc)Opens in your account's service knowledge — sign-in required.Enablement is a longer list — every gate the DME closes before it will blame the mechanism:
| Gate | Factory condition |
|---|---|
| System voltage | above 10 V |
| Engine state | start completed, engine running |
| Adaptations | no travel-limit adaptation fault on that cylinder bank (neither after power failure nor otherwise) |
| Sensor reference | 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.
Community ranking on N54/N55, paraphrased:
- Contaminated or slow exhaust VANOS solenoid — same sludge story as 2A82, exhaust side. The solenoid service path 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 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 cam position actual vs target — persistent lag on the exhaust cam under load is visible well before the MIL.
Why is 2A87 more trustworthy than 2A82?
The enablement gates are stricter — no travel-limit adaptation fault, camshaft flank recognized, VANOS position between 70 and 120 degrees, oil temperature below 120 or 134 degrees by engine speed. The DME excludes every confound before blaming the mechanism, so a 2A87 that survives the gates is a real position-tracking failure.
Can I drive with code 2A87?
It flags a real position-tracking failure rather than noise, so treat it as fix-before-hard-pulls. The cheap rungs first — oil service, solenoid swap test — before any VANOS hardware conversation.
- 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
- ReferenceThe code reader's companion: tools, codes, and what the data means