RM Control Systems uaEFI · rusEFI · TunerStudio
Aftermarket ECU
The plug-in standalone ECU that will run the supercharged 5VZ: what is settled, what is proposed, and what to ask RM.
- Conclusions and questions for RM
- Wiring decisions to revisit
- Full ECU notes
- 98 ECM pins vs the uaEFI board
Conclusions and questions for RM
The short version of everything in this folder (updated 2026-11-05). The details are in README.md, the wiring decisions in decisions.md, and the pin-by-pin table in pinout.md.
The ECU
- RM Control Systems uaEFI on adapter board V1.1. It runs rusEFI firmware and is tuned in TunerStudio. It fits inside the factory ECU case, and the factory E9–E12 plugs plug straight in.
- In hand. RM shipped it set up for a manual transmission (A/T control turned off) and for the Supra/2JZ 312cc injectors.
- The kit includes:
- the pin sheets;
- spare ECM terminals and one white wire already crimped. RM suggests that wire for a wideband gauge's signal;
- two loose pins taped next to the OBD2 diagram. These are for running CAN from the ECU to the factory OBD2 port, whose CAN cavities are empty from the factory.
- The board: the 97–98 4Runner / 98–2000 Federal Tacoma board. RM's pin sheets (v1.1, 9/30/2026) match the copy on RM's GitHub word for word.
- The stock 98 ECM stays as a plug-in limp-home backup. RM says that for 98 and later, the A/T and M/T ECMs are physically the same, with the same plugs and pinout. The M/T just leaves the A/T pins empty. Swapping back is unplug and plug.
- Track record (RM, 2026-10-20): about 20 sold, one failure. That customer cut wires in the factory harness and left the ends bare inside the loom. A 12 V wire shorted to sensor ground and damaged the adapter board; the main board survived. Lesson for this harness: insulate every de-pinned or cut end on its own. RM daily-drives his own 99 4Runner on one.
What RM has told us (messages, Sept–Nov 2026)
| Topic | RM's answer |
|---|---|
| Manual transmission | Transmission control is simply turned off; that's already done on this unit. "Even if you left it on, it wouldn't hurt anything." |
| EVAP | "It doesn't care about the evap canister." Purge can still be controlled in the tune if wanted. |
| Knock | RM started on knock but hasn't worked on it in a while. He recalls the stock knock sensors being "old tech" that "didn't really work all that great." There's no tested knock setup to copy. |
| Narrowband O2 | They're connected to the ECU, but RM hasn't tried using them. The tune could probably use them, but only to target 14.7 AFR. |
| Wideband | Two ways: (1) the ECU's onboard controller drives an LSU 4.9 directly, with a harness RM sells or one you make; (2) a wideband gauge (e.g. AEM) runs the sensor and sends its signal to an ECU input. Sensor: Bosch LSU 4.9, common part 17025. RM buys from RockAuto; the part numbers differ mainly in wire length. |
| O2 bung | An adapter converts the factory 2-bolt O2 flange to a screw-in sensor, so no welding is needed. RM's link: https://ebay.io/m/G0kMg2 |
| Spare terminals | RM buys them from Corsa Technic. Part numbers: MLC040II-SKT1 (Toyota 82998-24110) or MLC040II-SKT2 (82998-24120), as on the sheet. |
Conclusions so far
| Topic | Conclusion | Status |
|---|---|---|
| Fuel load | Factory MAF. The base tune uses it, and the Magnuson is draw-through (throttle body on the blower inlet), so the MAF sees all the air. | Decided |
| Injectors | The base tune is set for the Supra/2JZ 312cc injectors (RM). That matches the parts list: Denso 23250-46050, 312 cc at 43.5 psi, 13.4 Ω. Confirm the injector data in the tune is for that part. | Set by RM |
| MAP sensor | No separate sensor. Without one there's no boost reading. The boards have an MPXH6400 on-board MAP footprint, the spot with the orange sticker, which reads up to about 400 kPa. If it's fitted, one vacuum hose gives boost readings. Otherwise it's 3 terminals (E12-17, E11-4, E10-10). | Check on the board |
| Crank and cam sensors | Work with Toyota's shared sensor ground, with no harness changes (RM). | Answered by RM's docs |
| Fuel pump | FC (E10-18) is most likely wired inside the board to the uaEFI's "Fuel Pump Relay" output, B16. It isn't on either sheet, and it's the only output RM doesn't list. No wiring change needed. Expect a pump prime at key-on. | Inferred, ask RM |
| Wideband | Bosch LSU 4.9 (17025). Use the onboard controller, with RM's harness or 6 new E12 terminals, or a wideband gauge feeding an analog input. One sensor, after the banks merge and before the cat. A flange-to-screw-in adapter avoids welding. | Proposed |
| Narrowband O2 | Drop both. The wideband replaces the upstream one, and the downstream one only monitors the cat. RM confirms the narrowbands could only target 14.7 anyway. | Proposed |
| DLC1 diagnosis box | Remove it for clean wiring. Neither ECM needs it. Keep TE1 as a capped pigtail for the stock-ECM timing check. | Decided |
| OBD-II | CAN on DLC3 pins 6 and 14, from E9-25/26, as a twisted pair, using the two loose pins in the kit. Pin 7 K-line stays for the stock ECM. | Proposed |
| CAN gauge | Plugs into DLC3. Pick one that reads Haltech or MS Simplified Broadcast to see everything: RPM, temperatures, TPS, MAF, AFR, timing, knock, injector duty, trims, voltage. It can't show boost without a MAP sensor, and there's no vehicle speed. Use a 120 Ω terminator at each end of the bus. | Gauge not chosen |
| EVAP | No EVAP wiring. The purge valve, vapor valve and vapor sensor come off the engine, and their wires are de-pinned. Cut the vapor sensor's shared 5 V and ground on the sensor side only. The tank vents through a pressure-and-vacuum vented cap, or a vent line and rollover valve to a filter or canister. RM: the ECU doesn't care. | Decided |
| Knock | RM has no tested knock setup and doesn't trust the stock sensors. Plan: a conservative boost tune plus external knock monitoring (det cans) for the boosted pulls. Treat the ECU's knock input (one channel, bank switch, bore 93.5 mm) as an extra, not as protection. | Decided (user, 2026-10-20) |
| Catalytic converter | Recommend a high-flow cat. Removing it is a federal tampering issue, it smells, and it gains little power at this boost. | User's call |
Questions still open for RM
- Fuel pump: is FC (E10-18) wired to output B16 "Fuel Pump Relay"? Is Fuel Pump output = B16 set in the tune?
- +B at E12-19: do I need to add this feed? Is it the power for the onboard wideband heater? Is the factory +B at E12-23 still used?
- On-board MAP: is the MPXH6400 on-board MAP fitted on the 97–98 board, under the orange sticker? Do you supply a barb and a case fitting for the vacuum line?
- Check it yourself:
- Look: peel back the orange sticker. A fitted sensor shows a small port hole; an empty spot shows bare solder pads.
- TunerStudio (ECU powered, engine off): select "On-board MAP" as the MAP input. It should read atmospheric pressure: about 100 kPa at sea level, but only about 83 kPa at 5,400 ft.
- Gentle suck test on the port through a short hose. The reading should drop. Don't blow hard into it.
- If it works: run a vacuum line from the intake after the blower, through a firewall grommet, to the ECU. It only has to hold MP62 boost, about 6–8 psi [assumed; check the Magnuson manual].
- CAN termination: is there a 120 Ω terminator on CAN1 (E9-25/26) on the board? Is it switchable?
- CAN gauge: which broadcast format do you recommend for a dash or gauge? Does the firmware answer OBD-II requests over CAN, and which values?
- Starting with NSW empty: with the A/T neutral-start input (E9-14) left empty on a manual, does the cranking logic need a neutral or clutch input?
- Injector #5: the sheet shows "B2 Injector Output 2" for #5, the same name as #2. Is that a typo for output 5?
- Unlisted factory pins: are IGF (E9-12), TE1, the SIL K-line (E12-8) and TPC used at all?
- No vehicle speed: the 88 has a cable speedo, so SP1 and SP2 have no signal. Does anything in the tune (idle or fuel cut) need vehicle speed?
- Mac: any problem connecting from macOS? (Your guide covers the Windows driver only.) Which firmware is on this unit?
Answered by RM, removed from this list:
- manual-transmission setup (done on the unit);
- knock (no tested setup, so use external monitoring);
- the base tune's injectors (set for 312cc);
- whether the O2 sensors work (connected, but narrowband only);
- where to buy pins (Corsa Technic).
Wiring decisions to revisit
Proposed 2026-11-05 while planning the RM uaEFI. None of these are applied to the strip list or the adapter build list yet. Come back to each one, mark it ✅ decided or ❌ rejected, and then make the file changes listed under it.
Background for all of these: README.md (this folder), pinout.md, RM's .ini (firmware 2026.09.09).
D1. Wideband: Bosch LSU 4.9 on the uaEFI's onboard controller (status: proposed)
- What: build the wideband into the new harness, using 6 new terminals in E12:
| E12 pin | Sensor pin | Signal | Wire |
|---|---|---|---|
| 3 | 1 | IP | 20 AWG |
| 9 | 2 | VS/IP | 20 AWG |
| 4 | 3 | H− | 18 AWG |
| 18 | 4 | H+ | 18 AWG |
| 25 | 5 | CalR | 20 AWG |
| 20 | 6 | VS | 20 AWG |
- Also populate E12-19 (+B from the EFI relay); it's probably the heater feed (confirm with RM). Use a Bosch LSU 4.9 pigtail. Keep the signal wires bundled and away from the plug wires and coils.
- Mounting: one sensor, after the point where both banks merge and before the cat. At least 10° above horizontal with the wire end up, never on the bottom of the pipe.
- Tune:
enableOnboardWideband= true, sensor type LSU 4.9, heater strategy "Engine running". - Why: it reads the true mixture under boost, and closed-loop fuel correction can use it. A narrowband can't do either.
- Files to change when decided:
adapter-build-list.md(new wires),research/G-parts-list.md(LSU 4.9, pigtail, 7 terminals, bung),TODO.md.
- From RM (2026-11-04):
- Sensor: Bosch LSU 4.9, common part 17025. RM buys from RockAuto; the part numbers differ mainly in wire length.
- Harness: RM sells a harness for the onboard controller, or you make your own.
- Alternative: a wideband gauge (e.g. AEM) runs the sensor and sends an analog signal to the ECU. RM suggests the pre-crimped white wire in the kit for that signal, on an open analog input such as AUX1 (E9-32) or AUX2 (E9-21).
- Mounting without welding: an adapter converts the factory 2-bolt O2 flange to a screw-in sensor (RM's link: https://ebay.io/m/G0kMg2).
- Terminals: buy them from Corsa Technic.
D2. Drop both narrowband O2 sensors (status: proposed)
- What:
- De-pin OX1 (E10-13), OX2 (E10-19), HT1 (E11-11) and HT2 (E11-10). Tape and fold them back so it stays reversible.
- Remove the B1S1 and B1S2 sensors.
- Drop the post-cat bung.
- Optional: weld a second, plugged bung before the cat, for a narrowband if the stock ECM ever has to go back in. Without it, the stock ECM runs open loop with an O2 code, which is fine for limp-home.
- Why: the wideband replaces B1S1. B1S2 only monitors the cat for emissions codes. Dropping both also takes about 2 A of heater load off the +B bus.
- Files to change:
harness-strip-list.md(O2 line, and the "bung after the cat" note),research/G-parts-list.md(O2 sensor row, line 234; exhaust note, line 34),TODO.md(line 57 says a post-cat B1S2 bung is needed),conversion-wiring-table.md(+B bus load).
D3. Remove the DLC1 diagnosis box (status: ✅ decided 2026-11-05, user wants clean wiring)
- What: remove the box using the 2026-10-19 plan, now back in
harness-strip-list.md: - Cap each lead on the DLC1 side of its splice: W-L +B, IG− tach, E1.
- Keep TE1 (V-W, E11-5) as a short capped, labelled pigtail.
- Why it's safe: DLC1 is only a box of test terminals. Neither the stock ECM nor the uaEFI reads anything through it.
- What you lose:
- The plug-in TE1–E1 jumper. Instead, jump the TE1 pigtail to ground, or back-probe E11-5 ↔ E11-16. 5VZ timing isn't adjustable anyway, so that check only confirms 8–12° BTDC.
- A tach test terminal. The 88 dash tach still works.
- Files changed:
harness-strip-list.md.
D4. CAN OBD-II at DLC3 (status: proposed)
- What:
- E9-25 CAN1H → DLC3 pin 6, and E9-26 CAN1L → DLC3 pin 14.
- Use BD-SKT terminals (776001-1) in the DLC3 and 82998-24110/24120 in E9.
- Run it as a twisted pair, about 1 twist per inch.
- Keep the rest of the DLC3 wiring as planned: pin 4 body ground, pin 5 signal ground, pin 16 7.5 A constant, and pin 7 K-line (stock-ECM backup only).
- Tune: CAN1 at 500 kbps,
canReadEnabledandcanWriteEnabledon. - Files to change:
adapter-build-list.md(DLC3 row),conversion-wiring-table.md(DLC3 section),harness-strip-list.md(DLC3 row).
D5. CAN gauge that shows everything (status: proposed, gauge not chosen)
- What: pick a gauge that reads one of the uaEFI broadcast formats (setting
canNbcType): - most supported: Haltech, MS Simplified Broadcast;
- also available: AiM, MaxxECU, plus several OEM formats.
An OBD-II PID gauge (ScanGauge / UltraGauge) also works, but it shows fewer channels.
- Where it connects: DLC3, which has CAN H on pin 6, CAN L on pin 14, 12 V on pin 16 and ground on pins 4/5.
- Gauge with an OBD plug: just plug it in.
- Bare 4-wire gauge: put a male OBD-II plug on it, or use an OBD Y-splitter to keep the port free for a scanner, or hard-wire it behind the dash.
- Power: pin 16 is constant 12 V. If the gauge doesn't sleep on its own, power it from an ignition-switched fuse and take only CAN H/L and ground from the port.
- Termination: a 120 Ω resistor at each end of the bus, at the ECU end and at the gauge. With everything off, measure CAN H to L: 60 Ω is correct, 120 Ω means one end is missing a resistor, open means neither end has one. It's not known whether the uaEFI has one built in.
- To do: choose the gauge, then check which format it reads.
D6. EVAP: ✅ decided 2026-11-05: no EVAP wiring at all (option B on the engine; tank vents through a vented cap or a vent line, no wires)
- Decision (user): remove the purge valve, the vapor-pressure valve and the vapor sensor from the engine, using option B below. The tank vents with no wires, by one of these:
- a pressure-and-vacuum vented gas cap; or
- the tank vent line and rollover valve to a small filter or the 88 canister mounted high, with no purge.
Applied to harness-strip-list.md. The original proposal follows for reference.
- Keep the charcoal canister (the 88 one, with the 88 tank lines). The tank has to vent somewhere.
- Keep the purge valve EVP (E11-2), driven by the uaEFI: purge only at warm cruise, never at idle or in boost. Add a check valve in the purge line so boost can't push into the canister. Take the vacuum source from wherever the Magnuson manual says.
- Remove:
- the vapor pressure sensor, PTNK (E11-13);
- the vapor-pressure valve, TPC (E11-8).
They're only used for leak-detection codes. ⚠ The sensor shares VC (5 V) and E2 (sensor ground) with the TPS, MAF and ECT. Cut only on the sensor side of the splice.
- Files to change:
harness-strip-list.md(the EVAP line says "leave them plugged in"),research/G-parts-list.md(check valve),TODO.md.
- If you'd rather delete EVAP from the engine (option B, 2026-11-05):
- Wiring:
- De-pin EVP (E11-2, W-G), TPC (E11-8, P-B) and PTNK (E11-13, Y-B) at the ECM.
- Cut the two VSVs' power branch off the W-L +B bus on the VSV side of the splice.
- Cut the vapor sensor's VC (G-B) and E2 (BR-B) on the sensor side only, because the TPS, MAF and ECT share them.
- Remove the two VSVs, the sensor and their brackets. Magnuson moves rear-of-engine VSVs to the firewall anyway (research O), so this saves that job.
- Vacuum: cap the purge port on the intake with a cap that holds boost, or plug it with a short hose and a bolt plus clamp.
- Tank side: the tank still has to vent. Keep the 88 canister and the tank's rollover/check valve, with the canister's purge outlet left open or filtered. Without purge the canister fills up and then vents vapor: expect fuel smell on hot days. Never run an open vent line with no rollover valve on an off-road truck.
- Tune: canister purge off, and no input assigned to PTNK.
- It's emissions equipment, so the same federal tampering point as the cat applies.
- How the purge valve works, and the vented-cap option (2026-11-05):
- The ECU is optional here. The uaEFI can drive the purge valve: output B8 LS2 on E11-2, turned on in the tune. The engine runs the same without it. Purge only burns off stored vapor.
- Why it has 2 wires: it's a solenoid. One wire is constant switched +12 V from the W-L +B bus (EFI relay). The other goes to the ECU, which switches it to ground.
- Vented gas cap (option C): cap or remove the canister system and fit a cap that relieves both pressure and vacuum.
- Most stock caps only let air in. With a stock cap the tank builds pressure on hot days, and the return fuel from the DW200 loop adds heat.
- Downsides: fuel smell at the filler, and raw vapor vented to air.
- Cleaner alternative: keep the tank's own vent line and rollover valve, and end it at a small vent filter or the 88 canister mounted high. That needs no purge and no wires.
D7. Catalytic converter (status: open, user's call)
- Question: delete the cat? There's no emissions testing in the county (2026-10-18).
- What changes without it:
- The ECU doesn't care once D2 is done. There's no downstream O2 sensor and no cat monitor.
- Legal: federal law (Clean Air Act) bans removing a cat from a road vehicle no matter what the county tests. An engine swap is supposed to keep the emissions equipment of the newer engine. RM's own docs say the ECU is for off-road and competition use.
- Practical:
- It gets louder, with more drone.
- Raw exhaust smell, worst at a crawl off-road and with the windows down.
- Little to no power gain at MP62 boost on a 2.5" system.
- Recommendation: keep a high-flow cat (already on the parts list as 1 × cat, 2.5"; research/G line 313). Put the wideband before it.
D8. Fuel load: MAF or MAP (status: MAF, MAP sensor skipped for now, 2026-11-05)
- Skipping the MAP means no boost reading on the gauge or in the logs. The ECU only knows MAF airflow, its calculated load and the throttle position.
- Ways to get boost back later:
- The uaEFI's own MAP sensor. The
.inilists an "On-board MAP" input, so the uaEFI may have a MAP sensor on the board. Ask RM whether it's fitted on their board and whether a vacuum hose can reach it in the factory ECU case. That would mean a hose and no wiring. - An external MAP sensor: 3 terminals, E12-17 / E11-4 / E10-10.
- A separate mechanical boost gauge, which the ECU never sees.
- Start with the factory MAF. RM's base tune uses it (user, 2026-11-05).
- The Magnuson is draw-through: the throttle body sits on the blower inlet (research O). So the MAF, ahead of the throttle body, measures all the air that goes in, and the bypass valve recirculates after the MAF.
- MAF also corrects automatically for altitude, air temperature and future changes.
- Add a MAP sensor anyway, 2.5 or 3 bar, on E12-17 with 5 V from E11-4 and ground from E10-10. Teed into the intake after the blower. It logs boost and allows boost-based tables and limits.
- Only switch to speed-density if:
- logs show the MAF maxing out (near 5 V, or flat at the top of its range) at full boost; or
- you later go to much more boost.
Speed-density also needs an intake air temp sensor after the blower, because the factory IAT is in the MAF, ahead of it. It also takes a full VE table tune.
- Files to change:
research/G-parts-list.md(MAP sensor, 3 terminals),adapter-build-list.md(3 wires).
D9. Knock (status: ✅ decided 2026-10-20: conservative tune plus external knock monitoring)
- RM (2026-10-20): RM started on knock but hasn't worked on it in a while. He recalls the stock knock sensors being "old tech" that "didn't really work all that great." There are no sample logs or thresholds to copy.
- Decision (user): a conservative boost tune, with external knock monitoring (det cans or another audio knock detector) during the boosted pulls. The ECU's knock input is an extra, not the protection.
- What follows is the setup if you want to try the ECU's knock input anyway.
- The hardware: both 5VZ knock sensors are already installed (39 N·m, in the valley under the intake). The uaEFI has one knock input (D14), and a switch on the carrier board picks KNK1 (E10-15) or KNK2 (E10-14).
- Plan:
- Pick one sensor with the switch. Both sit in the valley between the banks, so each one hears the whole block, with the far bank somewhat weaker. Ask RM which they use (question 8). Leave the other sensor plugged in and unused. It's a ready spare, and it stays connected for the stock ECM.
- Don't wire the two sensors together onto one input unless RM says their board supports it.
- Set it up in rusEFI: cylinder bore 93.5 mm (5VZ STD; use the actual bore if it was bored oversize to fit the NPR pistons, research G). rusEFI uses it to work out the knock frequency. Then log knock level at idle and cruise to set the noise threshold before trusting it under boost.
- The real protection is a conservative boost tune, not the sensor:
- premium 91+ fuel;
- rich under boost (lambda about 0.78–0.82, AFR about 11.5–12:1) [assumed: common practice for supercharged gasoline engines, not from an FSM or RM];
- timing pulled with boost and with intake air temperature. The IAT is ahead of the blower, so it reads cooler than the charge actually is.
Use knock retard only as a safety net.
- When tuning on a dyno: have the tuner listen with audio knock detection (det cans). It catches what one sensor misses.
- Wiring: keep both knock wires' shields intact (EB1, shielded). Don't splice the shield into anything.
Full ECU notes
Notes for the aftermarket ECU that will run the supercharged 5VZ-FE: choosing it, wiring it, base-mapping it and tuning it.
The ECU
- RM Control Systems uaEFI on their adapter board V1.1. It's a plug-in replacement that uses the factory E9–E12 ECM plugs. The board is listed for the 1997–98 4Runner and 1998–2000 Tacoma 5VZ-FE, Federal (non-California) plugs.
- In hand. Configured by RM for a manual transmission (A/T control off) and the Supra/2JZ 312cc injectors (Denso 23250-46050). What RM has said in messages:
summary.md, "What RM has told us". - Tuning software: TunerStudio. Channel names are in
pinout.md. - RM's pin sheets (dated 9/30/2026):
- transcribed in
rm-uaefi-pins.json; - photos in
img/rm-uaefi-populated-pins.jpgandimg/rm-uaefi-open-pins.jpg. - Pin-by-pin comparison with the factory ECM:
pinout.md. Regenerate it withpython3 tools/ecu_pinout.py. - RM's warning: don't connect the ECU to a laptop that is plugged into the truck's 12 V charging port.
- The vendor's own description:
rm-announcement.md(forum post). - Docs: https://github.com/rmcontrolsystems/PNP-Adapter-Boards. Its v1.1 spec sheet matches the printed sheets word for word.
- What it is: the board carries a uaEFI, a rusEFI ECU. Firmware and the TunerStudio
.iniare versioned together in that repo (folders2026.08.09and2026.09.09). Always use the.inithat matches the firmware date on the ECU. - Price and support: $800 assembled, fits inside the factory ECU case, ships with a base tune. RM helps dial it in. For professional tuning, RM can recommend a tuner.
- Manual-transmission note: RM's post says a manual-trans board is still "almost ready" for the 1996 / 95–97 trucks. The 97–98 4Runner board has only one version, with the A/T circuits, and it works with the A/T pins left empty. Turn A/T control off in the tune so it doesn't look for shift solenoids.
Laptop setup (RM Getting Started guide, 2026-10-28)
- Cable: a USB-C cable that carries data. Many are charge-only.
- Driver: RM's guide gives the STM32 Virtual COM Port driver (STSW-STM32102). That's for Windows. On a Mac the ECU should show up as
/dev/cu.usbmodem…with no driver [assumed: the standard behavior for STM32 USB serial devices; not in RM's guide]. - Software: TunerStudio MS. RM recommends the registered version for VE Analyze Live and logging. EpicTuner is a free alternative.
- New project: Firmware → Detect → Accept. If it doesn't load the
.ini, download the one whose folder date matches the firmware. Pick the COM port, then Next. - Save the base tune right away (File → Save Tune As) before changing anything.
- Calibrate the TPS: Sensors → Throttle Position Sensor. Enter the closed and wide-open ADC values with the engine off.
- Optional dashboards: put
custom.iniin the project'sprojectCfgfolder and restart TunerStudio. Then load the Imperial or Metric.dashfile. - Spare terminals for the open cavities:
- ECM plugs: MLC040II-SKT1 (Toyota 82998-24110) or MLC040II-SKT2 (82998-24120).
- OBD2 port CAN pins: BD-SKT (776001-1).
Where things stand (from the rest of the repo)
- Now: the stock 98 A/T ECM runs the engine, and the MIL stays on for A/T codes (decided 2026-10-07,
TODO.md). The uaEFI only lights the MIL for what you configure, so the A/T codes go away. - Backup: the stock ECM stays as a plug-and-play limp-home backup (research P).
- Injectors: the 315cc Supra bluetops go in with this ECU. Until then, run the stock 5VZ injectors (23250-62030, ~240 cc), because the stock ECM would be about 30% rich on the bluetops (research P).
- Supercharger: the Magnuson MP62 comes with no tune, so this ECU has to provide the boost fuel and timing (research O).
- Fuel: DW200 pump and the stock regulator (
TODO.md). - Harness: stripped by de-pinning, not cutting, so any terminal can go back in (
harness-strip-list.md).
What RM's sheets show (2026-11-05)
Populated by RM (the board uses the factory wire):
- Engine: 6 injectors, IGT1–3 to the stock igniter, idle valve RSO/RSC, TPS, coolant temp, intake air temp, cam sensor G, knock sensors 1 and 2, both narrowband O2 sensors and their heaters, EVAP valve and tank pressure.
- MIL: W (E11-3).
- Switches and signals: STA, power steering switch, A/C request and A/C terminate, brake light, idle contact, speed sensors 1 and 2.
- A/T and transfer inputs: S1, S2, SL, the ATF temp sensor, NSW, L, 2, R, OD, PWR, 4WD, L4.
Open (needs terminals you add):
- MAP sensor: E12-17, with +5 V from E11-4 or E11-15 and sensor ground on E10-10 or E10-16.
- Bosch LSU 4.9 wideband, wired straight to the ECU: E12-3/4/9/18/20/25. Mating connector pin map: 1 IP, 2 VS/IP, 3 H−, 4 H+, 5 CalR, 6 VS.
- Spare ignition: outputs 4–6 (igniter or smart coils only).
- Other spares:
- 7th injector driver;
- 2 low-side outputs;
- H-bridge;
- AUX1/AUX2/TPS2/PPS1/PPS2 analog inputs;
- 2 ground-switched inputs;
- flex fuel input;
- CAN on E9-25/26 to OBD2 pins 6 and 14;
- separate cam VR− (G−) on E10-11.
Flags to settle with RM before wiring
- Crank sensor (NE+ E10-5, NE− E10-6): mostly answered. RM's post and repo say the board works with the factory crank and cam sensors and Toyota's shared sensor ground, with no harness changes. It isn't on the sheets because it has no TunerStudio channel. Only use G− (E10-11) if the cam's negative wire has been separated. Ours is still shared.
- Still unanswered: these factory pins aren't on the sheets:
- power and grounds: +B E12-23, BATT E12-14, E01/E02/E03, E1, E2, E3;
- sensor 5 V supply: VC E10-1;
- other functions: FC (fuel pump control) E10-18, IGF E9-12, TE1, SIL (OBD) E12-8, TPC.
FC is the one that matters. Best guess: it's hard-wired to the uaEFI's fuel pump output, B16. The evidence is RM's TunerStudio .ini (firmware 2026.09.09):
- The uaEFI's output list includes "B16 Low Side output 4 / Fuel Pump Relay (has flyback D5)".
- B16 is the only low-side output on the board that appears on neither of RM's sheets. Every other one (B1–B15, B17, B18) is assigned to a pin.
- The same pattern holds for the crank sensor. The input "C17 VR2-/HALL, best for normal 12+ tooth wheels" is also missing from the sheets, and NE is the only unlisted crank-type signal. That matches what RM says about crank compatibility.
- Conclusion: pins RM doesn't list are factory circuits wired straight through to a fixed uaEFI function, so FC (E10-18) → B16 [inferred, not confirmed by RM].
How the pump chain then works. No wiring change from the plan in adapter-build-list.md and conversion-wiring-table.md:
- uaEFI B16 grounds FC (E10-18). It does this for a prime at key-on, and whenever it sees the crank turning. It lets go about a second after the engine stops.
- FC → II3-26 → N5-8 → the 88 circuit opening relay, Fc coil (88–132 Ω, so only about 0.1–0.16 A for the output).
- The circuit opening relay closes → N5-1 (Fp) goes live → Relay B coil (86). Pin 85 goes through the kill switch to ground.
- Relay B → 20 A feed → DW200.
Two differences from the stock 98 ECM:
- You get a key-on prime. The stock ECM doesn't prime; it only runs the pump on the starter signal and crank pulses. rusEFI primes for a few seconds at key-on, so expect to hear the pump with the key on.
- The 88 relay's STA coil still runs the pump while cranking, even with the ECU output off. So "it starts and then dies when you let go of the key" means FC isn't being driven.
How to confirm on the bench (before trusting it in the truck):
- In TunerStudio, check that Fuel Pump output = B16.
- Use its Test button, or simply turn the key on.
- Meanwhile, put a meter on E10-18 (or N5-8) to ground. It should go to about 0 V during the prime, then back to battery voltage.
- MAF or MAP: answered. RM's post says it runs either the factory MAF or speed-density with an added MAP sensor. That means VG (E10-8) is used even though it's not on the sheet.
- The MAF sits ahead of the MP62, so it still sees all the air.
- A MAP sensor still helps for boost logging and boost-based tables. It has to read above 1 bar absolute, so use a 2.5 or 3 bar sensor teed into the intake after the blower.
- The base tune runs on the factory MAF (user, 2026-11-05). Start there; MAP is an add-on.
- +B: RM lists an open "+B, switched from the EFI relay" at E12-19. The factory +B is E12-23. Ask whether E12-19 is an extra feed you must add, or whether the sheet's numbering differs.
- Pins the strip list removed that the uaEFI can use (they're de-pinned, so they can go back in):
- PSW (E9-31): power steering idle-up. Worth keeping.
- ACT (E12-5): A/C cut at full throttle. Optional.
- NSW / L / 2 / R / S1 / S2 / SL / OIL / PWR / OD / L4: A/T only. Leave them out on the R150.
- SP1 and SP2 have no signal source on the 88. The 98's SP1 came from the 98 cluster, and SP2 from the A/T. The 88 speedo is cable-driven, so there's no vehicle speed unless you add a sensor. It's only needed for speed-based features.
- Knock: one knock input with a selector switch on the carrier board. It reads bank 1 or bank 2, not both.
- Typos on RM's sheet:
- Injector #5's channel prints as "B2 Injector Output 2", the same name as injector #2's.
- The Notes column on the Open-pins sheet sits one row high for E10 and E12;
rm-uaefi-pins.jsonrealigns it.
Check the injector channel mapping in TunerStudio.
Open questions
- [ ] RM to confirm FC (E10-18) → B16 fuel pump output (flag 2), and what +B at E12-19 is for (flag 4).
- [ ] Bench check: key-on prime pulls E10-18 to ground.
- [ ] Firmware version on the ECU when it arrives, and the matching
.ini. - [ ] Which MAP sensor (2.5 or 3 bar), and where it takes its vacuum and boost reference.
- [ ] Wideband: an LSU 4.9 sensor, its bung location, and running the 6 wires to E12.
- [ ] Injector data for the bluetops (dead times and flow at your fuel pressure).
- [ ] Trigger setup in TunerStudio for the 5VZ crank and cam patterns.
- [ ] Who tunes it: self-tune or a dyno shop.
Files
README.md: this page.rm-uaefi-pins.json: RM's sheets transcribed.rm-announcement.md: RM's forum post announcing the ECU.summary.md: conclusions, what RM has told us, and the questions still open (shown on the website).rm-messages.md: technical points and timeline from the messages with RM (not published to the site).decisions.md: wiring decisions to revisit (wideband, O2, DLC1, CAN, gauge, EVAP, cat, MAF/MAP).pinout.md: factory vs uaEFI, by plug and pin (generated).img/: photos of RM's sheets (metadata removed).
98 ECM pins vs the uaEFI board
Generated by tools/ecu_pinout.py from research/pins98.json (factory, EWD319U / RM580U) and ecu/rm-uaefi-pins.json (RM Control Systems sheets). Don't hand-edit; change the JSON and rerun.
- Swap is the decision from
harness-strip-list.md(made for the stock 98 ECM). - uaEFI: populated = RM wires this cavity; open = spare feature, you add a terminal (82998-24110 / 82998-24120); not listed = not on RM's sheets (see the flags in
README.md).
E9 (plug A)
| Pin | Factory | Factory function | Swap | uaEFI | uaEFI function | TunerStudio | uaEFI note |
|---|---|---|---|---|---|---|---|
| 1 | 4WD | 4WD-engaged input from the ADD indicator switch (via ED1-2 and II3-9), also lights the meter 4WD lamp | keep | populated | 4WD/AWD | MEGA_EPIC_D29 | 4WD indicator |
| 2 | L4 | Transfer L4 position detect switch D4 (A/T shift logic) | remove | populated | L4 | MEGA_EPIC_D25 | Transfer case low range |
| 3 | – | Not used | empty | open | Lowside output (with PWM) | B17 Low Side Output 3 | PWM ground output |
| 4 | – | Not used | empty | open | 7th injector | B9 MR Weak LS 1 | 7th injector negative here, positive to +B (12 V) |
| 5 | #60 | Injector No.6 drive | keep | populated | #60 | B1 Injector Output 6 | Injector #6 |
| 6 | #50 | Injector No.5 drive | keep | populated | #50 | B2 Injector Output 2 | Injector #5 |
| 7 | #40 | Injector No.4 drive | keep | populated | #40 | B3 Injector Output 4 | Injector #4 |
| 8 | #30 | Injector No.3 drive | keep | populated | #30 | B4 Injector Output 3 | Injector #3 |
| 9 | #20 | Injector No.2 drive | keep | populated | #20 | B5 Injector Output 2 | Injector #2 |
| 10 | #10 | Injector No.1 drive | keep | populated | #10 | B6 Injector Output 1 | Injector #1 |
| 11 | S1 | A/T shift solenoid No.1 | remove | populated | S1 | MEGA_EPIC_D39 | Shift solenoid 1 |
| 12 | IGF | Ignition confirmation signal from igniter I2-4 | keep | not listed | |||
| 13 | STA | Starter signal (cranking) via II1-6 | keep | populated | STA | MEGA_EPIC_D28 | Cranking signal |
| 14 | NSW | Park/neutral start signal (A/T), fed from 7.5A STA via II3-2 and P1 | remove | populated | NSW | MEGA_EPIC_D32 | Neutral safety switch |
| 15 | IGT3 | Ignition trigger 3 to igniter I2-5 | keep | populated | IGT3 | B12 Coil 3 | Ignition coil #3 |
| 16 | IGT2 | Ignition trigger 2 to igniter I2-6 | keep | populated | IGT2 | B14 Coil 2 | Ignition coil #2 |
| 17 | S2 | A/T shift solenoid No.2 (also spliced to II1-4 -> cruise ECU ECT) | remove | populated | S2 | MEGA_EPIC_D41 | Shift solenoid 2 |
| 18 | – | Not used | empty | open | Ignition output 4 | B11 Coil 4 | MUST be used with an igniter or smart coils |
| 19 | – | Not used | empty | open | Ignition output 5 | B13 Coil 5 | MUST be used with an igniter or smart coils |
| 20 | – | Not used | empty | open | Ignition output 6 | B10 Coil 6 | MUST be used with an igniter or smart coils |
| 21 | – | Not used | empty | open | AUX2 | C3 AUX2 | Analog input #2 (0-5 V) |
| 22 | RSC | Idle air control valve close coil (I1-3) | keep | populated | RSC | B18 Low Side Output 2 | Idle air control valve - close |
| 23 | RSO | Idle air control valve open coil (I1-1) | keep | populated | RSO | B7 Low Side Output 1 | Idle air control valve - open |
| 24 | IGT1 | Ignition trigger 1 to igniter I2-7 | keep | populated | IGT1 | B15 Coil 1 | Ignition coil #1 |
| 25 | – | Not used | empty | open | CAN1H | N/A | CAN high. To use the stock OBD2 port, pin BD-SKT (776001-1) into OBD2 pin 6 |
| 26 | – | Not used | empty | open | CAN1L | N/A | CAN low. To use the stock OBD2 port, pin BD-SKT (776001-1) into OBD2 pin 14 |
| 27 | SL | A/T lock-up solenoid | remove | populated | SL | MEGA_EPIC_D5 | TCC lockup solenoid |
| 28 | E03 | ECM power ground (heater circuit) to EC | keep | not listed | |||
| 29 | – | Not used | empty | open | TPS2 | C14 TPS2 | Throttle position sensor 2 (any 0-5 V analog input) |
| 30 | OIL | ATF temperature sensor A3 | remove | populated | OIL | MEGA_EPIC_ADC_12 | Automatic transmission fluid temperature |
| 31 | PSW | Power steering oil pressure switch P22 (idle-up). Removed 2026-10-19: 3VZ PS lines have no switch port | remove | populated | PSW | MEGA_EPIC_D27 | Power steering switch |
| 32 | – | Not used | empty | open | AUX1 | D1 AUX1 | Analog input #1 (0-5 V) |
| 33 | E02 | ECM power ground to EC | keep | not listed | |||
| 34 | E01 | ECM power ground (injectors) to EC | keep | not listed |
E10 (plug B)
| Pin | Factory | Factory function | Swap | uaEFI | uaEFI function | TunerStudio | uaEFI note |
|---|---|---|---|---|---|---|---|
| 1 | VC | 5 V sensor supply (TPS, vapor pressure sensor) | keep | not listed | |||
| 2 | – | Not used | empty | open | HB1+ | H-bridge 1 + | |
| 3 | – | Not used | empty | open | HB1- | H-bridge 1 - | |
| 4 | SP2- | A/T No.2 vehicle speed sensor V3 (-) | remove | not listed | |||
| 5 | NE+ | Crankshaft position sensor C2-1 (+) | keep | not listed | |||
| 6 | NE- | Crank/cam sensor common (-), C2-2 and C1-2 | keep | not listed | |||
| 7 | VTA | Throttle position sensor signal | keep | populated | VTA (TPS) | D13 TPS1 | Throttle position sensor |
| 8 | VG | Mass air flow meter signal | keep | not listed | |||
| 9 | SP2+ | A/T No.2 vehicle speed sensor V3 (+) | remove | populated | SP2+ | C18 VR1+ Discrete | Speed sensor 2 (selector switch on the board: 4Runner/Tacoma or T100) |
| 10 | – | Not used | empty | open | Sensor ground | N/A | For sensor grounds only |
| 11 | – | Not used | empty | open | G- | N/A | For separated negative VR leads in the factory harness. Connect camshaft VR- here |
| 12 | PWR | A/T pattern select switch (PWR) via II3-6 | remove | populated | PWR | MEGA_EPIC_D24 | ECT PWR button (automatic transmission) |
| 13 | OX1 | Heated O2 sensor bank 1 sensor 1 signal (shielded) | keep | populated | OX1 | MEGA_EPIC_A1 | Upstream narrowband O2 signal |
| 14 | KNK2 | Knock sensor No.2 via EB1-2 (shielded) | keep | populated | KNK2 | D14 Knock Input | Knock sensor bank 2 (selector switch on carrier board: KNK1 or KNK2) |
| 15 | KNK1 | Knock sensor No.1 via EB1-1 (shielded) | keep | populated | KNK1 | D14 Knock Input | Knock sensor bank 1 (selector switch on carrier board: KNK1 or KNK2) |
| 16 | – | Not used | empty | open | Sensor ground | N/A | For sensor grounds only |
| 17 | G+ | Camshaft position sensor C1-1 | keep | populated | G | C7 HALL3 | Cam signal |
| 18 | FC | Fuel pump control: grounds circuit opening relay coil via II3-26 | keep | not listed | |||
| 19 | OX2 | Heated O2 sensor bank 1 sensor 2 signal (shielded) | keep | populated | OX2 | MEGA_EPIC_A15 | Downstream narrowband O2 signal |
| 20 | THW | Engine coolant temp sensor via EC1-2 (G-Y on sensor side of EC1) | keep | populated | THW | D16 CLT Coolant | Engine coolant temperature |
| 21 | THA | Intake air temp (in MAF) | keep | populated | THA | D15 IAT | Intake air temperature |
| 22 | E2 | Sensor ground (TPS, MAF, ECT, vapor sensor, ATF temp); not chassis ground | keep | not listed |
E11 (plug C)
| Pin | Factory | Factory function | Swap | uaEFI | uaEFI function | TunerStudio | uaEFI note |
|---|---|---|---|---|---|---|---|
| 1 | – | Not used | empty | open | Flex | D5 FLEX | Flex fuel signal |
| 2 | EVP | EVAP VSV V7 | keep | populated | EVP | B8 LS2 | EVAP solenoid |
| 3 | W | Check engine (MIL) lamp drive via II1-2 to meter C11 | keep | populated | W | MEGA_EPIC_D43 | Check engine light |
| 4 | – | Not used | empty | open | 5V sensor | N/A | +5 V for sensors |
| 5 | TE1 | Diagnostic TE1 to DLC1-8. DLC1 removed 2026-10-19: keep this wire, cap its end where DLC1 was; jump it to engine ground (E1) for the timing check | keep | not listed | |||
| 6 | OIL-W | A/T oil temp warning lamp drive via II3-12 | remove | populated | OILW | MEGA_EPIC_D42 | A/T fluid overheat light |
| 7 | E3 | MAF sensor ground (M1-5) | keep | not listed | |||
| 8 | TPC | Vapor pressure sensor VSV V8 | keep | not listed | |||
| 9 | TFN | Transfer neutral position switch D5 (A/T) | remove | not listed | |||
| 10 | HT2 | O2 sensor B1S2 heater drive | keep | populated | HT2 | MEGA_EPIC_D12 | Downstream O2 heater |
| 11 | HT1 | O2 sensor B1S1 heater drive | keep | populated | HT1 | MEGA_EPIC_D13 | Upstream O2 heater |
| 13 | PTNK | Vapor pressure sensor signal | keep | populated | PTNK | MEGA_EPIC_ADC_14 | EVAP pressure |
| 15 | – | Not used | empty | open | 5V sensor | N/A | +5 V for sensors |
| 16 | E1 | ECM signal ground to EC | keep | not listed |
E12 (plug D)
| Pin | Factory | Factory function | Swap | uaEFI | uaEFI function | TunerStudio | uaEFI note |
|---|---|---|---|---|---|---|---|
| 1 | L | A/T P/N switch 'L' position input | remove | populated | L | MEGA_EPIC_D33 | Low gear selector (A/T) |
| 3 | – | Not used | empty | open | IP | N/A | Bosch LSU 4.9 wideband, connector pin 1 |
| 4 | – | Not used | empty | open | H- | N/A | LSU 4.9 heater -, connector pin 3 |
| 5 | ACT | A/C amplifier ACT (A/C on signal) via IJ1-1 | remove | populated | ACT | MEGA_EPIC_D49 | A/C terminate |
| 6 | OD2 | O/D main switch | remove | populated | OD2/ODLP | C9 BUTTON 3 | Overdrive lockout switch / light |
| 7 | OD1 | O/D cut from cruise ECU | remove | not listed | |||
| 8 | SIL | OBD-II serial data to DLC3-7 (shielded) | adapter | not listed | |||
| 9 | – | Not used | empty | open | VS/IP | N/A | LSU 4.9, connector pin 2 |
| 10 | 2 | A/T P/N switch '2' position input | remove | populated | 2 | MEGA_EPIC_D35 | 2nd gear selector (A/T) |
| 11 | IDLO | Idle signal to cruise ECU | remove | populated | IDL | MEGA_EPIC_D40 | Idle sensor |
| 12 | SP1 | Vehicle speed signal from combination meter | adapter | populated | SP1 | C5 HALL1 | Speed sensor 1 |
| 13 | – | Not used | empty | open | Lowside output (on/off) | MEGA_EPIC_D46 | On/off ground output |
| 14 | BATT | Constant battery (ECM memory) from 15A EFI | adapter | not listed | |||
| 15 | R | A/T P/N switch 'R' position input | remove | populated | R | MEGA_EPIC_D34 | Reverse (A/T) |
| 16 | AC1 | A/C on -> ECM idle-up request (active-low: below 2.0 V with A/C on at idle, 9-14 V off). Corrected 2026-10-12 (was labelled A/C cut) | adapter | populated | AC1 | MEGA_EPIC_D23 | A/C request |
| 17 | – | Not used | empty | open | MAP | D9 MAP | Manifold absolute pressure sensor (any 0-5 V analog input) |
| 18 | – | Not used | empty | open | H+ | N/A | LSU 4.9 heater +, connector pin 4 |
| 19 | – | Not used | empty | open | +B | N/A | Switched battery voltage from the EFI relay |
| 20 | – | Not used | empty | open | VS | N/A | LSU 4.9, connector pin 6 |
| 21 | – | Not used | empty | open | PPS1 | D6 PPS1 | Pedal position sensor 1 (any 0-5 V analog input) |
| 22 | – | Not used | empty | populated | ODMS | C9 BUTTON 3 | Overdrive lockout switch / light |
| 23 | +B | Switched +B from EFI relay | adapter | not listed | |||
| 24 | BK | Stop light switch signal (RM symbol STP) | adapter | populated | BK | MEGA_EPIC_D22 | Brake light |
| 25 | – | Not used | empty | open | CalR | N/A | LSU 4.9, connector pin 5 |
| 26 | – | Not used | empty | open | Digital input | MEGA_EPIC_D30 | Ground switched |
| 27 | – | Not used | empty | open | Digital input | MEGA_EPIC_D31 | Ground switched |
| 28 | – | Not used | empty | open | PPS2 | C4 PPS2 | Pedal position sensor 2 (any 0-5 V analog input) |