Sale ends todayGet 30% off any course (excluding packages)

Ends in --- --- ---

How to read Error Codes off ECU to Display in AIM?

CANBus Communications Decoded

Forum Posts



Tech Articles

Discussion and questions related to the course CAN Bus Communications Decoded

= Resolved threads


I am using a stock BMW E46 M3 ECU in a dedicated racecar, and want to display on the AIM dash when specific error codes / pcodes appear. I can't just have a warning when an codes / check engine triggers happen as some are permanent given this is a dedicated race car (i.e. ECU is never going to see post-CAT exhaust sensor). I have the ECU and AIM talking via CANBUS and have the specific values of the codes I want to trigger off (I can convert codes to specific alarms and ignore others). My question is how do I find the address of these codes on the CANBUS when I can't toggle the codes off and on?

Please provide an example of the codes you need to detect? If it's a sensor failure, can you disconnect a sensor? If it's a VANOS error, what happens if you disconnect Vanos solenoid or the position sensor? If it's an alarm like over temp, seems like you should be able to have your own alarm if the engine temp is over XXX then alarm.

The specific fault or reason for MIL is not broadcast on the E46 bus. There is a single bit for MIL, a single bit for the over temp light and a single bit for the oil light. To get the DTC you would have to request it using standard OBD2 commands.

Appreciate the responses. I can't just read the MIL as I will always have engine codes (DTC). I already have sensors for coolant pressure/temp, oil pressure/temp, and a number of other sensors.

I am looking for codes / DTC for things like Throttle Position Sensor (have 3), ignition coils (have 6), camshaft position sensor (have 2), crankshaft position sensor (have 2), mass air flow sensor, cylinder misfires, etc. What I would likely do is have an alarm if any of the codes on the "list" trigger, and then read the code via ODBII at the completion of the race. Currently I don't have a way without manually looking for it, know that I have had one of these codes trigger, which may not yet be noticable, but could cause further problems if not resolved or loss of performance during next race.

Therefore, per Adam's comment, how would I look to do this "using standard OBD2 commands"?

I have found the OBD-II page on Wikipedia helpful.


You will have to transmit a request to 0x7DF, and then receive the response on 0x7E8. Details are on the page linked. This could be difficult with Aim but you might be able to force it to do this periodically, and somehow decode the responses.

We usually reply within 12hrs (often sooner)

Need Help?

Need help choosing a course?

Experiencing website difficulties?

Or need to contact us for any other reason?