FlashLite EFI ECM

Nowadays several of the GM ECMs are cracked to the point where all you have to do is download the appropriate tools (diy_efi.org, if you haven't been there already) and spend some time reading the archives and editing the tables in the ECM.

The GM ECMs used to cost about $200 at the junkyard - and you had to have an exchange ECM! And for some bizarre reason, no local junkyard would sell a wiring harness. They're all in some sort of "auto salvage association", which translates as price fixing and strange sales policies.

Back in 1997 the only way I could get enough bits to play with one of the GM setups was to buy a whole car, which was out of my price range. I was lamenting the state of affairs while talking to my buddy Jay Klahr, who set me up with a workmate of his named Brian May, who was interested in designing something different. So Brian gathered up a bunch of information about microcontrollers and the three of us sat down in his living room and evaluated the brochures.

There were some insanely powerful and cheap controllers out there, with wads of I/O and clock cycles to burn. Unfortunately almost all of them were dependent on proprietary compilers or "development environments"; that killer $75 controller might require a $600 software package to do anything with. For OEMs this was probably no problem; for onesey-twosies it was out of line.

There were some decent controllers with reasonable I/O and a decent price, but they were mostly Motorola based and programmable only in assembler. I don't know Motorola assembler and I wasn't able to justify spending the time to become proficient in it. The boards all required cross-assembling the binaries and burning EPROMS, which would be time-consuming, and I'd need an EPROM burner too.

There was one board that jumped out from the rest - the JK Microsystems FlashLite. It was a tiny card with an NEC V25 (8088 compatible) at 8MHz, and it was basically an XT on a card - the hardware looked like an IBM XT, it had an IBM compatible BIOS, and DOS in ROM, with 512Kb of RAM and 512Kb of Flash memory configured to look like an "A:" floppy. Any reasonably well behaved program that would run on an IBM XT with 512Kb would happily run on the FlashLite. The only problem was the price: a whopping $300, plus another $50 for the analog I/O board.

Jay volunteered to foot the bill, Brian volunteered to do the expansion board we'd need to use it for injection, and I was to write the code. Um, I'm not done yet...


This is the JK Microsystems FlashLite, the analog I/O option board, and the driver board designed and built by Brian May. I made the case out of aluminum plate. The injector driver transistors aren't mounted in this image. I laid the housing down on the scanner, so it's not in great focus.




Here's part of the manual for the FlashLite...



Here's half of Brian's documentation for the daugherboard...



...and here's the other half.


Here's my $500 Hilborn intake manifold being sacrificed to the cause. When it all gets finished it'll go on Tyrannosaurus RX.

We didn't know it at the time, but it would have been *much* easier to do the software if we'd used one-shot timers to drive the injector signals. Then we could just sent the injector-on value to the timer and forget about it. The way the board is designed, I have to turn the injector on and off with separate events - in realtime - with the code executing in about 1.5 milliseconds. Fortunately the code is pretty fast.



Here's my development environment of choice - Turbo Pascal version 3.02a, circa 1987.

Turbo 3 takes 39Kb of disk space, 42Kb with the optional error message file. That's 42,000 *bytes*. And that includes a full editor-type "development environment", debugger, and linker. It runs nicely in 128Kb of RAM; I don't remember what the absolute requirement is any more; something like 89Kb. Too bad it's long obsolete and unavailable; they'll have to pry my copy from my cold, dead fingers. Borland put Turbo C up on their web site as freeware, but they're hanging onto Turbo Pascal.




"Flash cards" with the ECM algorithms outlined. Top-down programming, eh?

I'll post some of the code when I have time to make it a little more functional.