So, Here are a few DIYs:
Reading fault codes - taken from: BMW E36 Blog
Did you know that your BMW 3 Series has an internal diagnostic program built into the computer? Not many people know about this. On the BMW 3 Series, there is a way that you can diagnose common engine problems without having to purchase a code tool or take it to the dealer to have it scanned. This is one of those neat little features of the Service Indicator Computer; the series of lights directly under the tachometer and speedometer that remind you to change the oil and perform service. In this tech article, I will provide you with the procedure for checking the fault codes and what the codes mean. This guide will help you to diagnose any possible problems with your car.Here's a similar description taken from: DTMPower BMW Forum
This article is written for both the BMW E30 and E36 3 Series cars (up to 95) and should work on both models where a Service Indicator Computer is used. I will go over the small differences between the early and late cars, as they differ slightly. Keep in mind that this procedure will not work on early cars with Motronic 1.1.
Now on the E30 models, get in the car and put the key in the ignition and turn it to the second turn or [ON] position, but do not start the car. Now, press the accelerator pedal all the way to the floor, then let it release all the way back. Now repeat the depress/release cycle 4 more times fairly quickly, but not too fast. It may take some time to get this timing down correct. It should only take you a few seconds to do this. What this does is activate the wide-open throttle switch and the idle switch 5 times. This then sends a signal to the Motronic ECU to send fault codes to the Service Indicator Light.
On the E36 models, the procedure works the same way, but the timing at which you press/release the gas pedal is faster than on the E30. Just keep at it, and you will eventually get the correct speed.
Watch the [Check Engine] light. It should blink once, and then start blinking a series of four numbers. For instance, say this is a sequence you see: the light blinks once, then twice, then four times and lastly four times. If you read it correctly this means that the SI light is reading out the code 1244 (faulty camshaft sensor) The codes appear as a series of flashes for each digit. The flashes indicating one digit are about one second apart, the next digit will appear after a couple seconds interval. If there are no faults in the car, the computer will flash out the number 1444.
Pre '96 you can use the pedal trick. As seen on Pelican's website:
"To read codes for an OBD I car, you start by turning the ignition key on (do not start the engine) and pressing the gas pedal to the floor five times within a period of five seconds. If you proceeded correctly, then the check engine lamp will light on for five seconds, then blink off, then blink on for 2.5 seconds, and then go off for another 2.5 seconds. After this, the computer will start to show you the trouble fault codes that are stored.
The codes are given by short flashes of the check engine light, followed by short pauses. The codes are all four digit numbers. For example, the trouble fault code for monitoring the battery voltage level is 1231. This would show up flashing as "flash - pause - flash - flash - pause - flash - flash - flash - pause - flash." I suggest having a pen and paper handy when you do this, as the codes have a tendency to flash faster than you would think.
If there is more than one fault code stored, then each code will be separated by a 2.5 second pause. When there are no more codes to be read, the computer will give the code 1000, which is one short flash, and then the light will remain off. Then the check engine light will flash a half-second and then turn off. To read the codes again, simply turn the ignition key off and on again and repeat the procedure with the gas pedal (five times within five seconds)."As a follow up on the last quote, I took a look on the "Pelican's" site (Pelican Parts) - Here's what I found:
All BMWs from 1984 use a sophisticated Bosch engine management system called Motronic. The Motronic system (also called the Digital Motor Electronics or DME) is hands down the best overall fuel injection system that you can use when you consider price and performance. Ignition timing and fuel delivery are all controlled by a digital map that is recorded in a removable chip within the main fuel injection (DME) computer. The computer takes input from a variety of sensors that are located on the engine – cylinder head temperature, altitude (ambient air pressure), crank angle, throttle position, exhaust gas oxygen (mixture), ambient air temperature, and mass air flow. The DME chip is programmed from the factory with certain performance characteristics (mostly conservative) so that the engine will react well under a host of varying conditions.And then, I found this info: Resseting the fault codes:
As with any electronic device, components can fail, triggering problems with the system. The BMW Motronic system is designed to react to these failures and indicate them to the driver, so that they can be fixed. If one of the computer's sensors is not working properly, then the computer may not be able to successfully identify the current state of the engine and choose the appropriate fuel mixture or timing advance level. When this happens, the fuel mileage drops, engine performance suffers, emissions increase, and the car typically illuminates the 'check engine' light.
In order to accurately find the sensor and fix the problem, you will need to find out which error code is being triggered by the computer. Pre-1995 BMWs were equipped with what is known as OBD I (On Board Diagnostics Level I). Stating in 1996, they were equipped with a more advanced version called OBD II, which was mandated by the US government, in order to standardize automotive repair and diagnostics. The OBD system is responsible for monitoring and checking all of the fuel injection sensors and systems in the vehicle, and turns on the 'check engine' lamp if it finds a problem or irregularity with one of them. The computer lodges a Diagnostic Trouble Code (DTC) in the main computer until it is read and reset. Disconnecting the battery does not reset the codes - they need to be manually reset.
For BMWs equipped with OBD I, you can read the codes using a system that is built into the car. For OBD II compliant cars (1996 and later), the codes can only be read using a scan tool (more on this later).
When you are finished reading the codes, you can reset the computer and clear them all out. Make sure that the last code (1000) has occurred, and then press down on the gas pedal for more than 10 seconds. This should clear out the memory of the DME. Repeat the fault code reading process, and the computer should generate code 1444, which means that there are no faults stored.For the end of this article, here's a list of fault codes, and some notes about the problem:
1000 End of output - no more fault codes:
This code shows the end of the stream of error codes, and tell you that the computer is finished showing them to you.
1444 No more faults:
This code shows that all faults have been fixed. Required to erase the computer's memory.
1211 DME Motronic Computer Fault:
This may indicate a problem with the DME computer. Most problems result in a dead computer that cannot give out codes, so this particular code is not seen too commonly. If the code does appear, start and rerun the test for about one minute. If the code reappears, then chances are that you need to replace your DME computer.
1215 Mass Air Flow Sensor Fault:
The mass air flow sensor measures the amount of air that is currently being drawn into the engine. A big hole in one of your fuel injection intake boots may cause the car to stall and generate this code.
1216 Throttle Position Switch Fault:
The later model Motronic systems used a potentiometer to measure throttle position and adjust fuel levels appropriately. If the 'pot' is not giving off the proper values, it will produce this code.
1218 DME Computer Output, Group #1,
1219 DME Computer Output, Group #2:
These two codes can be generated when there is a ground fault short circuit from B+ at one of the two DME Output Amplifier Stages. This code is not typically seen by itself, and is usually generated with a host of other codes. Possible problems may be O2 sensor heater relay, fuel evap system problem, EKP relay, ignition coil problem, a faulty idle speed actuator, etc. If you get this code, disconnect the DME and let it sit for 15 minutes, then recheck the codes. If it persists, and no other problems are found, then it is probably an internal DME problem. If the code goes away, then ignore it and call it an intermittent error.
1221 Oxygen Sensor (primary),
1212 Oxygen Sensor (secondary):
The O2 sensor measures the mixture of the car. This code is generated if the sensor is unplugged or broken. Sensor values are read when the engine warmer than 70°C, and should be within 0.02 and 0.85 volts. Negative values indicate that the sensor needs to be replaced, and slow fluctuation indicate that the sensor is clogged with soot. Cars with catalytic converters that have been removed may push this code.
1222 Oxygen Sensor Lean/Rich Detect (primary),
1213 Oxygen Sensor Lean/Rich Detect (secondary):
If the signal from the O2 sensor indicates a very lean or very rich mixture for more than 10 seconds, then the computer generates this code. It could mean a faulty O2 sensor, or a problem with another component.
1223 Coolant Temperature Sensor:
Measures the temperature of the coolant inside the engine block. Used to determine if the engine is warm or cold. Check the wiring and the expected resistance value of the sensor.
1224 Intake Air Temperature Sensor:
Measures the temperature of air entering into the engine's fuel injection system, and adjusts the mixture accordingly. Colder air is more dense than warmer air and needs to be compensated for.
1225 Knock Sensor #1,
1226 Knock Sensor #2,
1227 Knock Sensor #3,
1228 Knock Sensor #4:
The knock sensor is used to detect pre-ignition that can damage the engine. If the knock sensor is triggered, it will back off the timing of the car, reducing the 'pinging.' A fault is generated if there is an open circuit, a ground fault, or if the sensor sends multiple signals that don't correspond to proper engine operation.
1231 Battery Voltage / DME Relay Monitor:
Monitors the condition of the battery and charging system, and produces a fault if a component goes out of specification or fail.
1232 Throttle Idle Position Switch:
On older Motronic systems, this switch was used along with the wide open position switch as a primitive throttle position switch.
1233 Throttle Wide Open Switch:
1234 Speedometer "A" Signal:
This code is generated when the engine is under load, over 2500 RPM and no discernable speedometer signal can be detected for more than 10 seconds. Check the wiring harness, and also the instrument console.
1237 A/C Compressor cutoff:
The compressor is automatically turned off when accelerating from low speed under full throttle. This code indicates a fault in the cut-out circuit or its wiring.
1241 Mass Airflow Sensor:
Codes 1241 and 2241 can be incorrectly generated on 1992 and later models. The actual fault is a improperly operating idle air valve, and the need for an updated EPROM. See BMW bulletins for more details.
1242 A/C Compressor Signal:
This code is generated if there is a ground fault (short circuit) or if the system detects that the compressor unit is disconnected.
1243 Crankshaft Position Sensor:
This code is triggered when the crank angle sensor is disconnected, or generates a signal that is not accurate when compared to the other engine sensors.
1244 Camshaft Position Sensor:
Displayed when the signal from the camshaft pulse generator is out of spec or absent. May indicate a problem with the injector side of the DME output stage.
1245 AEGS Intervention - Electronic Transmission:
Many BMWs are equipped with electronic transmissions. If the transmission encounters a major problem, it will generate an emergency message, and your on-board computer should show "TRANSMISSION EMERGENCY PROGRAM." Ignition timing will retard when this program is run.
1247 Ignition Secondary Monitor
1251 Fuel Injector #1 (single or group),
1252 Fuel Injector #2 (single or group),
1253 Fuel Injector #3,
1254 Fuel Injector #4,
1255 Fuel Injector #5,
1256 Fuel Injector #6,
1257 Fuel Injector #7,
1258 Fuel Injector #8:
Check the injector or injector group for proper wire harness connectivity. Also check the injectors for a clear, wide stream pattern. Code 1283 (Fuel Injector Output Stage) may also be triggered in conjunction with this code.
1261 Fuel Pump Relay Control:
This code is generated when there is a break or ground fault in the circuitry associated with the DME fuel pump relay. Check pin #3 of the DME or the output stage in the DME (DME version M1.3 only).
1262 Idle Speed Control:
This shows up if the idle speed actuator shows a ground fault, or if the car stalls from an idle above 600 RPM.
1263 Fuel Tank Evaporative System (EVAP):
The fuel tank evaporative system has a purge control valve that generates this code if there is a short circuit or open connection (DME version M1.3 only).
1264 Oxygen Sensor Heating Element:
This code is triggered if there is an open circuit or a short within the oxygen heating element circuit. Check the O2 heating element relay and also the air pump relay.
1265 Check Engine Lamp:
If the lamp in the dashboard burns out or shorts to ground, then this code is generated.
1266 VANOS System:
Check the wiring or the relay associated with the VANOS system (variable camshaft adjustment).
1267 Air Pump Relay Control:
Check the air pump relay and wiring (were applicable).
1271 Ignition Coil #1,
1271 Ignition Coil #2,
1271 Ignition Coil #3,
1271 Ignition Coil #4,
1271 Ignition Coil #5,
1271 Ignition Coil #6,
1271 Ignition Coil #7,
1271 Ignition Coil #8:
An open-circuit or ground fault in the ignition wiring has occurred with an ignition coil. Place a timing light on the ignition wires and check for a signal. Also check the wires for faults, and check the spark plugs too.
1281 DME Memory Unit Supply:
This indicates a fault with the internal memory of the DME computer. This is sometimes caused by low battery voltage. Delete the codes, and disconnect the DME for 15 minutes. Then reconnect, let the car idle for five minutes, and then drive over 30 mph for more than five minutes. Recheck the codes - if it occurs again, the DME is faulty and should be replaced.
1282 Fault Code Memory:
This code occurs when the DME generates a set of conflicting codes. Disconnect the DME for 15 minutes, reconnect, and then simulate a fault code, like unplugging the air flow sensor or idle actuator. If the code reoccurs, then you will need to replace the DME.
1283 Fuel Injector Output Stage:
This code is generated when there is a short circuit or open connection between the wiring from the DME to an injector or injector stage.
1284 Knock Control Test Pulse:So, this is almost all the info I could find on BMW Fault codes. It's very usefull, and I'll check my cars for codes in the afternoon.
The ECU periodically checks the knock sensor circuitry by sending a test pulse through the system. This code indicates that a test was performed, but no pulse was registered. Check the wiring and knock sensors.
I didn't write this information. I found it on various sites. The info is fairly consistent, so my guess is that it's true. I do not take any responsibility if you mess up your car following this article. Do it on your own risk.