Here is my reverse engineering work on the Bendix 2.5L Electronic Control Unit found in 86-90 Renix Jeeps. This self contained unit is in charge of running the engines Renix Throttle Body Fuel Injection System as well as other engine Sub-Systems. The ECUs data stream output is available which we can use for datalogging and diagnostics.
The 2.5L was the first installment of the Renix Fuel Injection System in Jeeps and it’s a bit of an oddball even for Renix. Schematics are fuzzy but mentions the TX Pin supposably moves according to the vehicles transmission type and swaps places with the correlated transmission pin. The 1990 FSM mentions for A/T, Pin 1 is TX Data and Pin 3 is Park/Neutral Switch; but for M/T, Pin 1 is Upshift Light and Pin 3 is TX Data.
In my testing, I am able to get data from Pin 1 on either transmission type, BUT on Manuals the logic level will be pulled to battery voltage when the shift light is active so the labeling seems to sort of check out. Another oddity is for M/T, Pin 3 must be pulled low to complete the signal, but for A/T only Pin 1 is required just like the later 4.0L systems.
TX output is found on Pin 18 of the ECU which connects to Pin D2-1 in the 15 pin Renix Diagnostic Adapter found in the engine bay. For Manual Transmission equipped vehicles, ECU Pin 12 to Pin D2-3 also plays a role in this data connection.
This is some sort of open collector output circuit to vehicle ground, so the Receiver pulls the line high and the ECU will pull the line low to transmit. Due to possibly a protection circuit, logic low does not read zero as it sits closer to 1.1v instead, making it difficult to read in without signal modifications. A buffer with a high logic low tolerance is need, or use a voltage divider to cut down the signal until switching will occur. This gives us an inverted signal that will need to be flipped to be read with standard UART.
Data Protocol:
This ECU unit uses a standard Bendix Data Protocol which is as follows:
– Protocol: UART, Inverted Logic
– Baud: 62,500
– Frame Length: 30 Bytes
– Frame Start: value 0 is sent
– Frame End: value 255 is sent
– Special Case: data bytes must send duplicate 255 value to differentiate from Frame End. Duplicate value must be discarded to maintain proper framing.
Data Framing
Byte Order | Reading | Math | Dump |
Start Byte | 0 | ||
Byte 0 | Program Version | HEX | 32 |
Byte 1 | Vehicle Calibration | HEX | 98 |
Byte 2 | Starter Signal Park/Neutral Switch A/C Select Switch Throttle Switch A/C Thermostat | Bit 0 Bit 1 Bit 2 Bit 3, 4 Bit 5 | 88 |
Byte 3 | MAP Sensor | # / 51.2 = [0 – 4.98V] # / 9.13 + 3.1 = [3.1 – 31″hg] | 76 |
Byte 4 | CTS | # * 1.125 – 40 = [-40 – 247F] | 141 |
Byte 5 | IAT | # * 1.125 – 40 = [-40 – 247F] | 142 |
Byte 6 | Battery Voltage | # / 31.875 + 8 = [8 – 16V] | 197 |
Byte 7 | o2 Sensor mV | # * 4.34 = [0 – 1,107mV] | 229 |
Byte 8 | RPM Low Byte | 30,000,000 / # = [30,000 – 457] | 56 |
Byte 9 | RPM High Byte | 16 bit Number = (#9, #8) | 161 |
Byte 10 | Injector Pulse Low Byte | # / 1000 = [0 – 65.5ms] | 170 |
Byte 11 | Injector Pulse High Byte | 16 bit Number = (#11, #10) | 8 |
Byte 12 | TPS | # / 51.2 = [0 – 4.98V] # / 2.55 = [0 – 100%] | 14 |
Byte 13 | Spark Advance ºBTDC | DEC | 10 |
Byte 14 | M1? No Change Noticed | 0 | |
Byte 15 | M2? Slow Increase | 126 | |
Byte 16 | Baro Pressure Manifold Vacuum | # / 51 = [0 – 5V] # / 9.13 + 3.1 [3.1 – 31″hg] Baro – Byte 3 | 225 |
Byte 17 | M3? Engine Bit Values Engine Run Flag Closed Loop Attempt? Power Steering Switch Dup | Bit 0 Bit 4 Bit 6 | 25 |
Byte 18 | Loop Status Power Steering Switch Exhaust Mixture | Bit 1, 6 Bit 4 Bit 7 | 192 |
Byte 19 | M4? No Change Noticed | 0 | |
Byte 20 | M5? No Change Noticed | 0 | |
Byte 21 | EGR A/C Clutch | Bit 3 Bit 6 | 58 |
Byte 22 | M6? ISM Offset Value | 1 | |
Byte 23 | ISM Cold Enrichment Offset | # / 2.55 | 3 |
Byte 24 | Short Term Fuel Trim | DEC | 181 |
Byte 25 | M8? RPM Idle Offset | 91 | |
Byte 26 | Long Term Fuel Trim | DEC | 128 |
Byte 27 | M9? IAT Offset | 6 | |
Byte 28 | M10? No Change Noticed Frame Checksum? | 128 | |
Stop Byte | 255 |
NOTES:
– Most of the Math was Reverse Engineered from the MT2500 1099 Cartridge
– I’ve noticed that the 1099 Cartridge math has been a tad off on a few accounts for 2.5L
– I have tried to cross reference with some MS1700 cartridges but resolution can be corse
Bit Logic Breakdowns
NOTE:
– Values that have been observed to change are marked with a “?”
– Values that have not been observed to change will display their normal Value.
– Values that have been confirmed as direct readings will show ECU Pin Label.
Byte 2 | FALSE | TRUE |
Bit 0 | C29 Starter Signal Off | C29 Starter Signal On |
Bit 1 | C12 Park/Neutral – Yes | C12 Park/Neutral – No |
Bit 2 | C30 A/C Select Off | C30 A/C Select On |
Bit 3 | C25 TPS Closed | C25 TPS Partial |
Bit 4 | TPS WOT | TPS Partial |
Bit 5 | C34 A/C Thermostat No | C34 A/C Thermostat Yes |
Bit 6 | 1 | 1 |
Bit 7 | 0 | 0 |
Notes: – Partial takes priority if Bit 3 & 4 are equal – When bench testing, Bits 3 & 4 are true. When Pin 25 is grounded Bit 3 turns false – Bit 0 similar to Byte 17 Bit 0 – Bit 1 reads false on M/T |
Byte 17 | FALSE | TRUE |
Bit 0 | Engine Off | Engine RPM Detected |
Bit 1 | ? | ? |
Bit 2 | ? | ? |
Bit 3 | ? | ? |
Bit 4 | Closed Loop Not Attempted? | Closed Loop Attempted? |
Bit 5 | 0 | 0 |
Bit 6 | P/S Sw Dup Off | P/S Sw Dup On |
Bit 7 | 0 | 0 |
Notes:
– I consider this Mystery Byte 3 as it is undocumented
– Bit 0 similar to Byte 2 Bit 0
– Bit 6 similar to Byte 18 Bit 4
Byte 18 | FALSE | TRUE |
Bit 0 | ? | ? |
Bit 1 | Bit 6 | Decel LP |
Bit 2 | ? | ? |
Bit 3 | 0 | 0 |
Bit 4 | C8 P/S Switch Off | C8 P/S Switch On |
Bit 5 | ? | ? |
Bit 6 | Open LP | Closed LP |
Bit 7 | Exhaust Lean | Exhaust Rich |
Notes: – Decel takes priority over Bit 6 when true – Bit 4 similar to Byte 17 Bit 6 – Bit 5 similar to Bit 7 |
Byte 21 | FALSE | TRUE |
Bit 0 | 0 | 0 |
Bit 1 | 1 | 1 |
Bit 2 | 0 | 0 |
Bit 3 | EGR Off? | EGR On? |
Bit 4 | Fuel Pump Off? | Fuel Pump On? |
Bit 5 | 1 | 1 |
Bit 6 | A/C Clutch Off | A/C Clutch On |
Bit 7 | Spark/Fuel Off? | Spark/Fuel On? |
Notes: – Bit 5 is used for EGR on MT2500, always true 2.5L Short Drive Log – Bit 3 suspected to be actual EGR Bit – Bit 4 Seems to be fuel pump related – Bit 7 pulses a lot while engine is running |
ECU Pinout Breakdown
Connector Cavity | ECU Circuit | Data Stream Relation |
1 | Power Ground | |
2 | Power Ground | |
3 | Ignition | |
4 | Battery | |
5 | EGR Control | |
6 | Fuel Pump Relay | |
7 | Latch Relay | |
8 | Power Steering Input | Byte 18, Bit 4 |
9 | – | |
10 | System Ground | |
11 | Engine Speed Input | |
12 | Start Signal (-) / ECU Serial Data – Manual | Byte 2, Bit 1 |
13 | TPS Ground | |
14 | Air Temperature Input | Byte 5 |
15 | Coolant Temperature Input | Byte 4 |
16 | 5 Volt Supply (TPS/MAP) | |
17 | MAP Ground | |
18 | Upshift Indicator / ECU Serial Data – Auto |
Connector Cavity | ECU Circuit | Data Stream Relation |
19 | B+ Latch | |
20 | – | |
21 | Injector Control | |
22 | A/C Clutch Control | |
23 | ISCA (Retract) | |
24 | ISCA (Extend) | |
25 | Closed Throttle Input | Byte 2, Bit 3 |
26 | – | |
27 | Timing Output | Bytes 9, 8 |
28 | Engine Speed Input | |
29 | Start Signal (+) | Byte 2, Bit 0 |
30 | A/C Select | Byte 2, Bit 2 |
31 | TPS Input | Byte 12 |
32 | Temperature Sensors Ground | |
33 | MAP Input | Byte 3 |
34 | A/C Request | Byte 2, Bit 5 |
35 | Oxygen Sensor Input | Byte 7 |
NOTES:
– When bench testing, o2 reading follows MAP reading. 0 – 3 o2 to 0 – 255 MAP
– When bench testing, pin 35 o2 is sensitive enough to pick up touch noise