I had been told many years ago that the ECU probably used CANBus communication, but I was able to rule that out pretty much right off the bat. CANBus typically uses two signal lines that create a differential signal, with one line going high whenever the other line goes low, and vice versa.
And despite the 12V signaling, this wasn't really quite RS-232, either. RS-232 signals are traditionally +-12V, with the signal line swinging from positive to negative as it goes from high to low.
In fact, superficially, the signaling I was seeing resembled TTL communication, with idle state at the supply voltage and a 1-bit at 0V. However, TTL voltage is never more than 5V. Running 12V into a TTL receiver is usually considered poor form, and tends to result in the release of the all-important magic smoke that makes ICs work.
So, a mystery. And here's where I got lucky. I had been poking around on the interwebs in between bouts of soldering, looking for information on the GTS ECU, which is made by Magneti Marelli and is technically known as the MIU model. Magneti Marelli doesn't say
jack about this device on their public website, aside from mentioning that they make it. No documentation, no technical specs (aside from some marketing overview fluff), no nothing.
Just by chance, though, I stumbled on some mention of the MM MIU elsewhere on the internet, and this documentation labeled the pinout of the ECU that leads to the diagnostic port as the "K-Line". This one
single reference led me on a wild ride through the internet, discovering in-depth documentation of an industry specification known as K-Line, aka ISO-9141. It turns out that K-Line is one of the early automotive diagnostic protocols that were eventually bundled into the OBDII specifications found in all cars in the US since 1996. More specifically, K-Line uses signal states of 0V and battery voltage -- exactly what I was seeing.
Somewhere along the way, K-Line / ISO-9141 morphed into a more advanced standard known as
Key Word Protocol 2000 (often abbreviated KWP2000) and defined formally as ISO-14230. At the physical layer, the signaling mechanism of ISO-14230 is identical to ISO-9141, so "K-Line" is still an accurate term, depending on what layer of communication you're referring to.
Having established that the signal levels I was seeing were consistent with K-Line, I sat down with the trace I had captured to see if the data made any sense in that context. After fiddling around with some settings in the Logic application, I was able to have Logic decipher the bits with their Async Serial protocol analyzer, turning the bit signals into hex digits. After scratching my head for a few hours as to why the data didn't seem to make sense, I fiddled around with the Async Serial settings some
more (remember, I only just got the Logic 16 device, and haven't used it before) and then I was able to get a
new set of hex digits that actually made some sense.
And lo, a light shone down from above.
Now for the first time I was able to see the message from the DigiTek scanner to the ECU, and the response of the ECU back to the DigiTek scanner. The bytes I was seeing not only made sense, they conformed perfectly to the KWP-2000 communication protocol. So the ECU doesn't just use K-Line signaling, it uses the higher-level ISO-14230 protocol built on top of it. Perhaps not
all of ISO-14230, as it's a pretty big spec. But at least I now have an understanding of the sentence structure, even if I don't know all the vocabulary yet.
This changes my whole approach, in fact.
ISO-14230 is officially a part of the OBDII specification. Auto manufacturers since 1996 have been able to choose from among
five different protocols to fulfill their legally-mandated OBDII requirements. Because of its inclusion as one of these OBDII protocols, there is a fairly broad representation of parts that understand K-Line signaling or even the subtleties of the KWP2000 protocol built on top of it. At the low end, there are chips that will translate the 0-12V signals to and from TTL-level signals. At the high end, there are chips that do most of the packet-level communication for you, based on a serial connection.
One of these chips, in fact, has become somewhat legendary in the industry: the ELM327 chip speaks all flavors of protocol found in OBDII connectors, and thus is a popular choice for all manner of OBDII scanner tools. In fact, it's my understanding that
most OBDII scanners have at their heart either an ELM327 chip or a cheap knock-off of the ELM327 chip, made from v1.0 of the ELM product before they realized they needed to copy-protect the programming inside the chip.
Theoretically, I think I ought to be able to hijack a cheap OBDII <-> USB device, the kind that expects to be plugged into a computer so that software can drive the process. Most of these devices simply run the serial ELM327 output to a serial <-> USB converter and call it a day. Which is good, because I don't need or want a scan tool that attempts to drive the whole OBDII diagnostic process -- I want an easy way to hook my computer up to the ECU so that I can poke it and probe it and try out different parts of the ISO-14230 spec from the comfort of my keyboard.
To that end, I'm expecting delivery by tomorrow of an appropriate OBDII <-> USB interface and a sacrificial extension cable. Once I build a cable and get some drivers installed on my Mac, I should in theory be able to start figuring out the well-documented ELM327 communication protocol, which will allow me to send and receive data directly to the ECU on the other side.
In theory.