Most BMW check engine lights point to a handful of common problems. Knowing which codes come up most frequently — and what they actually mean — helps you make smart decisions before handing your car to a shop.
1. P0171 and P0174 – System Too Lean
Most common on inline-6 BMWs. Engine is getting too much air or not enough fuel.
Common Causes
- Cracked intake boots
- Vacuum leaks
- Failed PCV/CCV valve
- Dirty MAF sensor
- Weak fuel pump
A smoke test finds vacuum leaks fast — don't let a shop throw parts at it without proper diagnosis.
2. P0300–P0306 – Misfire Codes
A flashing check engine light means misfires — pull over immediately. P0300 = random/multiple cylinders; P0301–P0306 = specific cylinder.
Common Causes
- Worn spark plugs
- Failed ignition coils (extremely common on N54/N55)
- Vacuum leaks
- Carbon buildup on intake valves
- Low fuel pressure
Warning: a flashing light means unburned fuel is entering the exhaust and overheating the catalytic converter — a $2,000+ repair to avoid.
3. 2A82 and 2A87 – VANOS Timing Faults
Intake (2A82) or exhaust (2A87) camshaft timing out of spec. Symptoms include rough idle, loss of low-end power, hesitation around 3,000 RPM, and a diesel-like rattle on startup.
Common Causes
- Dirty or failed VANOS solenoids
- Low oil pressure from sludge
- Worn VANOS seals
- Contaminated oil
- Failed check valves
These codes sometimes appear and disappear — dirty oil is often the culprit.
4. P0128 – Coolant Below Thermostat Temperature
Engine isn't reaching proper operating temperature fast enough. Symptoms: temp gauge stays low, heater blows lukewarm air, reduced fuel economy.
Common Causes
- Failed thermostat (stuck open)
- Faulty coolant temp sensor
- Low coolant
- Thermostat housing leak
Arizona note: this code appears less often in Tucson because desert heat masks failing thermostats — but cooling system failures happen faster in extreme heat.
5. P0012 and P0015 – Camshaft Position Timing
Camshaft position is over-retarded on the intake (P0012) or exhaust (P0015) side. Symptoms: hard starting, rough running, reduced power, poor economy.
Common Causes
- Low oil level or pressure
- Stretched timing chain
- Failed camshaft position sensor
- VANOS solenoid issues
- Oil passage sludge
6. 29F4 and 29F5 – Catalytic Converter Efficiency
Converter not cleaning exhaust gases efficiently on Bank 1 (29F4) or Bank 2 (29F5).
Common Causes
- Actual converter failure
- Upstream problems (misfires or rich running)
- Failed O2 sensor
- Exhaust leaks before sensor
Always diagnose upstream problems first — replacing a converter without fixing what killed it means replacing it again.
7. P0420 and P0430 – Catalyst System Efficiency Below Threshold
Generic OBD-II version of catalytic converter efficiency codes. Before assuming converter failure, check for exhaust leaks and verify O2 sensors are functioning correctly — a bad downstream sensor can trigger these codes falsely.
Common Causes
- Actual catalytic converter failure
- Exhaust leaks upstream of sensor
- Failed downstream O2 sensor
- Rich-running engine damaging converter
8. 29E0 and 29E1 – Fuel Mixture Control
BMW-specific codes: the engine computer can't maintain proper air-fuel mixture on Bank 1 (29E0) or Bank 2 (29E1).
Common Causes
- Vacuum leaks
- MAF sensor issues
- Fuel delivery problems
- O2 sensor faults
9. P0442, P0455, P0456 – EVAP System Leaks
Small (P0456), medium (P0442), or large (P0455) leak in the evaporative emissions system. Check the gas cap first — it might just be loose.
Common Causes
- Loose or faulty gas cap
- Cracked EVAP hose
- Failed purge valve
- Charcoal canister issues
10. P0340 – Camshaft Position Sensor Circuit
Sensor signal is faulty or absent. Symptoms: hard starting, rough running, possible no-start.
Common Causes
- Failed camshaft position sensor
- Wiring damage
- ECU problems (rare)
What to Do When the Light Comes On
- Steady light = address it soon; flashing light = pull over now
- Get codes read with a proper BMW scanner, not a generic one
- Don't clear codes without diagnosis — the light will return
- Codes point in a direction but don't always identify the exact failed part