Oh boy an OEM ECU tuning thread!
Creating a TunerPro ADX file presents a rather substantial challenge, it’s not really possible without patching the ECU firmware to spit out useful data. Assuming you can patch the ECU to output data in a useful way, you then need to know where the data you’re interested in resides in RAM. This is the real killer, to figure this out requires you to disassemble binary code in the CPU itself and infer from the code what RAM values do what.
Before I pulled my engine for a rebuild I had some rudimentary logging patches and ADX files working if you saw the YouTube link I posted in the FB group, but through a combination of lack of time and loss of interest I haven’t really developed it beyond that.
The way datalogging works on OBD1 Honda ECUs (including the NSX ECU) is through the onboard serial communication lines. Civic/Integra ECUs have these in an easily accessible header on the board but the NSX ECU pins are just routed to test points on the ECU board and headers must be installed manually. This process is detailed in sr5guys original thread. You can connect the ECU to TunerPro RT using a standard USB-to-UART cable like this:
https://www.adafruit.com/product/954
By default, the NSX ECU just dumps a bunch of crap out the serial port constantly, IIRC it has a list of 60 something addresses that it spits out, some of it is useful data but most of it isn't. To actually get useful output for tuning, the list of data dump addresses must be updated to include useful data.
When he refers to memory addresses, he is referring to the addresses of various engine parameters within the ECU itself, for example the throttle position might be at address 0xDEAD and the calculated load might be at address 0xBEEF and so forth. Once these addresses are identified, the ECU can be programmed to output their values in a serial stream and a TunerPro ADX file can be created to read the stream through the serial cable I linked above.
The Ostrich has no datalogging interface, but it does have address tracing, meaning it will show you what addresses in the tables the ECU is accessing at any given time.
The Moates Demon does have datalogging capability and that is what I was using in my ECU. The Moates datalogging interface is poorly documented and doesn't work all that well though so you are much better off just using a 2nd USB cable like I linked above. The demon also has analog inputs that can be used for wideband O2 sensor inputs.
That said, just buying the USB cable won't get you very far. You still have to find the list of addresses in the ROM chip, disassemble the code to figure out how they are written out, extract the internal CPU ROM code from the main processor, and then disassemble that to try to figure out the RAM addresses. Sr5guy spent 5-10 years working on this, it is not an easy or quick process.
Last I talked to sr5guy, time permitting, he was planning on selling a rather fancy tuning solution for NSX and Legend ECUs at some point.
Hi [MENTION=33247]MotorMouth93[/MENTION]! Welcome to the party lol. Honestly, I have so much mechanical work to do on the car at this point that I would just pay for the tuning solution. But, it is also really fun learning how to do this myself. I purchased this book and read it cover to cover:
https://www.amazon.com/Engine-Management-Advanced-Greg-Banish/dp/1932494421. While I already knew come of the material, it really filled in the blanks on the fundamentals. I re-read the [MENTION=16606]sr5guy[/MENTION] thread again (so much great content in there!) and Matt has an ADX file for datalogging that he did not release with the definition. He also uses a NVRAM flash memory solution in place of the Ostrich that allows real-time emulation and parameter changes via direct connection to the MCU. It looks like he re-programmed the MCU itself (amazing) to handle both the datalogging and ROM write functions, so you don't even need the Ostrich or Demon. However, he never released that hardware and it's unclear if he ever will. So, I'm going to focus on creating an ADX file that will give us enough info for good tuning using an Ostrich or Demon hardware solution. If you want to collaborate, let me know! I firmly believe that a C30A with cams, injectors, headers and an enlarged intake tract is capable of a factory-reliable 120 hp/liter. My roadblock now is the tuning solution, so... here I am.
It seems I am taking up the NSX tuning mantle from Prospeed LOL.
The following nodes on the ECU board will allow serial data collection from the MCU:
(
JP21 MCU SI Transmit [TXD]) (
L5 MCU SI Receive [RXD]) (
G6 Ground)
MotorMouth93, you said you were getting limited datalogging off of the ECU- do you know if I need the ground lead for the USB ALDL cable you linked? Some Honda tuning forums have indicated just the TXD and RXD wires are required for datalogging in TunerPro RT. If I solder some header pins to these nodes, we can at least start seeing the data streams. Does the ECU board require any resistors or jumpers to enable datalogging, or is it always running in the background? I ask because most B-series ECUs require jumpers and capacitors to enable datalogging through the 4-pin header. Even if I can get the connection working, it's probably going to be a bunch of random numbers unless we can figure out where the PID addresses are. If you think the USB direct to laptop datalogging method is better than the demon, then I will go that way. It seems cleaner anyway. You would then have three USB inputs into, right? (1) Datalog ALDL cable from ECU (2) Ostrich from EPROM socket (3) Wideband O2. Matt mentioned "hijacking" an unneeded ECU pin (A/C Pressure, for example) to feed the wideband data, but isn't it easier to hook the wideband controller directly to the laptop via an ALDL USB cable and use TunerPro to display the output?
Matt identified 3 separate serial data streams coming from the ECU:
1. Bi-directional full duplex - send it a memory address and it responds with a value (
extremely difficult to use/modify)
2. 14 byte one-way stream read from a list of (modifiable) memory addresses in the ROM.
3. 66 byte one-way stream read from a list of (modifiable) memory addresses in the ROM. (
slow updates - about once per second)
Matt also figured out how to modify the streams to any number of bytes he wanted, and predicted that even a 30 byte stream would still have enough update resolution to be useful for tuning. That's way beyond my ability, so I will try to use the default 14 byte stream, as I think it can display enough information to permit adequate tuning of the car, especially if you break up the tuning session into "FUEL" and "TIMING" phases. Using the 14 byte stream, which updates about once per millisecond, we can monitor up to 14 different PIDs, assuming we can find the addresses for the data and the formulas needed to convert the raw numbers to real world values.
Of course, all I will get is the MCU vomiting numbers at me and without the adx file to tell TunerPro how to read the streams, it's gonna be tough to get a working dashboard. Still, Matt provided some clues for us:
Coolant Temp (CTS) --> 0xFCDF --> Formula for Deg F = (x - 40)
RPM (RPM) --> 0xFC52 --> Formula = (x*28)
Intake Temp (IAT) --> 0xFCCF
Calculated Load (LOAD) --> 0xFCB2
Here are the data items I think we would need to tune the car properly. Ideally, you would tune fuel first using a wideband and then tune timing. A lot of the fuel tuning could be done on the street driving around, but final adjustments and timing would require a dyno that can apply a static load and rpm to the car so you can tune each cell.
[[
FUEL]]
RPM
Load
Coolant Temp
Intake Temp
STFT
LTFT
Open/Closed Loop Status
Final Inj Pulsewidth
Accel Enrich Inj Pulsewidth
Manifold Pressure
Inj Duty Cycle
Current Fuel Map
[[
TIMING]]
RPM
Load
Coolant Temp
Intake Temp
Base Timing
Final Timing
Knock Correction
Current Timing Map
Lots of great information here! I recently installed Bosch 18 hole 315cc injectors in my car which has headers, test pipes and allegedly a Dali chipped ECM. So far the car is performing flawlessly with a smooth idle and instant starts even after reconnecting the battery which is kept disconnected while it's parked in the garage, and just by the not so calibrated seat of my pants it feels like it's improved power. Hopefully after the NSXPO I'll have time to get it on a dyno to see how it's actually performing and how the ECU is handling it.
That's great! I'd be interested to see your LTFT and STFT data, as I bet the ECU is trimming pretty hard in closed loop- those injectors are about 25% larger than the stockers! Also, I would expect that your open loop AFRs are rich, which is safe. Though, we think that the ECU applies the last LTFT to the WOT map, so I wonder if that trims it back closer to the factory AFR for open loop? If you gather data on this, please share it!