GM ALDL interface

steve ravet steve at imes.com
Sun Dec 7 03:47:50 GMT 1997


Ludis Langens wrote:

> steve ravet <steve at imes.com> wrote:
> >There are at
> >least 2 flavors of ALDL, one is aobut 160 baud and the other is 8192
> >baud.  The second is a TTL level rs-232 signal, the first one is strange
> >and will not connect to a serial port.
>
> Not necessarily so, read on.

> First some background info:  Bits in the 160 baud stream are encoded as
> different length pulses.  A "zero" is sent as a low pulse with a duration
> of around 24/65517.1875 seconds (~366 uS).  A "one" is sent as a pulse of
> around 288/65517.1875 seconds (~4.4 mS).  The interval from the start of
> one pulse to the start of the next pulse is 412/65517.1875 seconds (~6.3 mS).
> In other words, the actual data rate is really around 159.02 baud.  (This
> timing data applies to _some_ of the 160 baud ECMs, it might not apply to
> _all_ of them.)
>

If you search the archives you will find a post made by me, that details the 160
baud data format.  I'll summarize again.  Here's the waveform:

-----     ---------------
     |   |          |    |
      --------------
    t0   t1   t2   t3   t4

t0 makes the start of a BIT (not byte).
t2 is the sample point.  high voltage=0, low voltage=1
t3 is the end of the bit
t4 is the start of the next bit.

if the bit is a zero, t1 indicates the transition point.  The important timings
are:

t0-t4=6.25 msec
t0-t2=1.5 msec to 2.3 msec
t3-t4=.5 msec minimum

> My basic idea is to set the UART to a baud rate that receives a full byte
> (or more) per every ALDL bit.  The start of each ALDL pulse acts as an async
> start bit.  The low interval of the pulse is received as a variable number
> of async zero bits.  The baud rate could be set such that:
>
>  a) A long ("one") pulse is received as a start bit and 8 zero bits - i.e.,
>     a NUL byte.  A short pulse should then be received as just a (slightly
>     short) start bit - i.e., a 0xff.

Now THAT is a clever idea.  The maximum byte length would be 5.75 msec.  At 8
data bits, one stop bit, you would need a baud rate of 1739.  A baud rate divisor
of 66 on the PC gives you a baud rate of 1745 which is close enough.  If you had
a level shifter to generate the proper voltage levels, and used this baud rate,
you would receive one byte from the serial port for every ALDL bit.  As noted
above, a "one" bit would result in a byte of all zeros, and a "zero" bit would
result in a bit with at least some ones in it (non zero).

The rest of the format is this:

9 one bits in a row indicate the start of a frame.  subsequent bytes all begin
with a zero start bit, and 8 data bits.  The frame is variable length, and
continues until another sequence of 9 ones in a row is received, indicating the
start of the next frame.  The zero start bit means that 9 consecutive ones cannot
be received as part of the data.

The meaning of each byte in the frame is unknown, and probably differs per ECM.

Thanks for the idea,  Ludis!  I plan on trying that out.

--steve

--
Steve Ravet
steve at imes.com
International Meta Systems
www.imes.com





More information about the Diy_efi mailing list