MBE 941 ECU Knowledge Base
Archive #35333705
941 MBE ECU Knowledge Base
A wiki page to share knowledge about the 941 MBE ECU.
I'm happy to share knowledge about how to communicate with the 941.
1. Technical Details
2. Versions
3. Current diagnostic software solutions
4. Communication
5. Simple python program to query ECU
Asking the ECU for any info takes a few lines of Python.
1. Technical Details
Serial type MBE ECUs Pin Out & Related Wiring Information from SBD Motorsport
The 941 ECU has an 8-bit bus
Each 8 bit memory locaton can be used to store a value from 0-256 or 0x00 - 0xFF
2. Versions
[ Juddder]The version number is an 8 digit code stored in the ECU EPROM and is referred to in the Original ECU Diagnostic software without the 3rd number (presumably to allow wildcard versions)
Known versions that are dumped are shown with the extra number in the brackets and the engine type at the end
- 9280240 = 928[x]0240 [v8]
- 9280270 = 928[1]0270 [v8]
- 9410034 = 941[x]0034 [v8]
- 9410035 = 941[1]0035 [v8]
- 9410090 = 941[x]0090 [s6]
- 9410100 = 941[x]0100 [s6]
- 9410101 = 941[3]0101 [s6]
- 9410101 = 941[3]0116 [s6]
Later ECU software appears to have additional logging such as BuzzLogger, SpeedLogger, WaterLogger etc. including an OilLogger, even on the V8 at version #941[1]0035
3. Current diagnostic software solutions
...
4. Communication
...
5. Simple python program to query ECU
The current state of each ECU parameter (Throttle position, Lambda sensors, etc..) is stored in the ECU at a specific memory location.
The ECU Diagnostic Software simply queries and displays these memory locations.
Communication with the ECU is a simple serial connection. All you need to do is open a socket with the correct baud rate and you can freely query any memory location you like. So, to ask the ECU for the contents of a memory location, you just write the desired memory location on the socket are read the response.
There are some extra files bundled with the Original ECU diagnostic software.
If you look in one that ends in .ECF you will see something like this:
\#Title,legend,units,max,min,command,SamplingInterval
WaterTemp,WaterTemp, C, 130.0, -30,C0
Throttle1,Throttle1, %, 100.0, 9.48,9C
Throttle2,Throttle2, %, 100.0, 9.48,94
What that says is: Throttle 1 is a percentage value ranging from 9.48% to 100% and it is stored in memory location 9C.
Or WaterTemp is a value ranging from -30 to 130.0 and is stored in memory location C0.
So, if you connect to your ecu and ask it for the contents of WaterTemp memory location "C0" and it gives you "BD" it means that the water temperature is 88.6 degrees. There is a table of values to reverse lookup the values stored for water temp.
Here is some example python code, that queries the ECU for its serial number and current water temperature.
It is example code only.
#!/usr/bin/python
import sys
import time
import serial
import string
# configure the serial connection.
ser = serial.Serial(
port='/dev/ttyS0',
baudrate=4800,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
ser.isOpen()
len = ser.inWaiting()
while len == 0:
len = ser.inWaiting()
if len == 0:
ser.write('\r')
time.sleep(0.1)
out = ser.read(len)
print "Serial Number of ECU:" + out
len = ser.inWaiting()
ser.write('\xC0') # RPM
while len == 0:
len = ser.inWaiting()
time.sleep(0.1)
out = ser.read(len)
while len !=0:
print "LOOK->%02X" %ord(out[len-1])
len -=1
sys.exit(0)