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