If the BMW Check Engine Light (CEL) is, or has been, on there will be stored codes pointing to what is wrong. It is critically important that these codes be read with the proper diagnostic system. That means a dealer or very well equipped BMW indie shop. The entire car needs to be scanned, especially on later cars as there are a lot of electronics and they interact. Examples of proper diagnostic systems would include:
BMW’s DIS/TIS (“GT-1”)… (’07 and older)
BMW’s newer systems, known by various names: ISIS, ISTA and ICOM
SnapOn systems with the proper BMW S/W
Matco Launch with the proper BMW S/W
Understand that the fault codes are not necessarily to be taken literally. In many cases a particular fault code just tells you what the car is unhappy about, not necessarily what the real cause is. And that is where the experience and skills of a pro are important in interpreting what the codes could mean.
While P codes below 1000 are federally mandated, the codes above that are left to the vehicle manufacturer to define. They frequently vary by model, year, and engine. BMW diagnostic systems don’t use P codes, but the generic OBD do. Generic OBD code readers can’t scan everything and they frequently produce invalid or misleading results because they don’t have tables for the variants in codes for the various model, year, and engine. So that is usually a meaningless exercise.
In states that require emissions testing it isn’t uncommon for part of the test to include a scan for codes. In that case the car will fail if any codes are found. Which means that the fault(s) must be fixed, the DME cleared of codes, and the car driven long enough for the DME to go “ready” which requires that all of the conditions of the “Federal Test Procedure (FTP) Driving Cycle” have been satisfied. The car won’t pass testing until the DME is in a “ready” state.