GM ALDL Protocol

Assembly Line Diagnostic Link — GM proprietary pre-OBD-II diagnostic system with deep protocol-level technical details.

Period1980 - 1996

What is ALDL?

ALDL (Assembly Line Diagnostic Link, also ALCL — Assembly Line Communications Link) is GM's proprietary on-board diagnostics system. Originally designed for factory assembly line testing, it uses a custom serial protocol that varies between ECU models — each ECU/memcal combination produces a different data stream format.

160 Baud ALDL — Signal-Level Protocol

The 160 baud stream is NOT standard RS-232. It uses a proprietary pulse-width encoding where each bit is represented by voltage transitions within a fixed 6.25 ms bit time. The data line idles HIGH (0V or 5V/12V depending on ECU).

Bit Timing (per bit = 6.25 ms)

Phase        Time        Description
──────────────────────────────────────────────────
T0 → T1      0.5 ms      Start delay (rising edge)
T1 → T3      4.75 ms     Data valid window
  Logic 1:   Line stays HIGH (no transition)
  Logic 0:   Line driven LOW then back HIGH
T3 → T4      1.0 ms      Stop time (line driven low)
──────────────────────────────────────────────────
T0 → T4      6.25 ms     Total bit time (160 baud)
Sample point: Between T1-T3 (1.5-2.3 ms into bit)

Key difference from RS-232: In standard serial, a logic 1 is represented by voltage level. In ALDL 160 baud, a logic 1 means NO transition occurs (line stays high), while a logic 0 means the line transitions low then back high within the bit time. This is why you cannot connect ALDL directly to a UART — the encoding is incompatible.

Data Byte Format

Each byte = 9 bits total:
  ┌─────┬────┬────┬────┬────┬────┬────┬────┬────┐
  │ P   │ b7 │ b6 │ b5 │ b4 │ b3 │ b2 │ b1 │ b0 │
  │start│ MSB                          LSB  │stop│
  └─────┴────────────────────────────────────┘
  P = Start bit (always 0 — line transitions low)
  Byte time = 9 × 6.25ms = 56.25 ms
  Transmission order: MSB first

Frame Structure

Frame = SYNC character + 20-25 data bytes

SYNC = 0xFF (11111111) — 9 consecutive logic-1 bits
  This unique pattern cannot occur in normal data
  because start bits are always 0.

Frame timing (20-byte example):
  21 bytes × 9 bits × 6.25 ms = 1,181 ms
  + inter-frame delay ≈ 1.25 seconds total refresh

Data content varies by ECU/memcal — GM has NO
standard frame format. Each ECM defines its own
byte assignments.

Voltage Levels

ECU Type         Idle Voltage   Low Voltage   Notes
──────────────────────────────────────────────────────
12V systems      +12V (battery)  0V           Early VN/VP Commodore
  (CEL = 12V)    CEL OFF when    CEL ON when
                  line is HIGH    line is LOW

5V systems       +5V (TTL)       0V           US models 1987+
  (CEL separate)  CEL on          CEL on
                  separate pin    separate pin

160 Baud Data Definitions (1986 VN Commodore)

Byte  Name        Description               Scaling
──────────────────────────────────────────────────────────
 1   MW2         Mode Word 2               Bitfield
 2   PROMIDA     PROM ID (MSB)              Raw
 3   PROMIDB     PROM ID (LSB)              Raw
 4   ISSPMP      IAC motor position         Raw
 5   COOLDEGA    Coolant temperature        °C = (n×0.75) − 40
 6   FILTMPH     Vehicle speed              MPH
 7   AD-MAP      MAP sensor voltage         0-255 = 0-5.00V
 8   NTRPMX      Engine RPM                 RPM = n × 25
 9   ADTHROT     TPS voltage                0-255 = 0-5.00V
10   INJFLOW     Injector flow rate         100 = 8.3 g/h
11   MAT         Manifold air temp          °C = (n×0.75) − 40
12   MALFFLG1    Malfunction flag word 1    Bitfield
13   MALFFLG2    Malfunction flag word 2    Bitfield
14   MALFFLG3    Malfunction flag word 3    Bitfield
15   BLM         Block Learn Multiplier     Fuel trim
16   ADO2AF      Oxygen sensor voltage      0-255 = 0-5.00V
17   MCUINST     MCU input status           Bitfield
18   ADBAT       Battery voltage            Volts × 10
19   INTEGR      Integrator                 Fuel integrator
20   OUTPUT      Output word                Bitfield

MALFFLG1 Bit Definitions

Bit  Code  Fault
──────────────────────────────
 0   24   Vehicle speed sensor
 1   23   MAT sensor low
 2   22   Throttle position low
 3   21   Throttle position high
 4   15   Coolant sensor low temp
 5   14   Coolant sensor high temp
 6   13   Oxygen sensor
 7   12   No reference pulse (not running)

Mode Selection (Resistor-Based)

The ECU reads the resistance between Pin B (diagnostic) and Pin A (ground) to determine which mode to enter. This is measured by the ECU's internal A/D converter.

Resistance      Mode              ALDL Output
─────────────────────────────────────────────────────
> 20KΩ          Normal            No diagnostic data
10KΩ            ALDL mode         160 baud sensor data
3.9KΩ           Backup mode       Limited data stream
≤ 500Ω          Factory test      Full diagnostic data

PWM vehicles (shorting Pin B to A):
  0.5 second time frame, ground time determines mode:
  0-35.7 ms     Normal
  35.8-107.1 ms ALDL Mode 1
  107.2-178.6ms ALDL Mode 2
  ... up to Mode 6 + Diagnostic Mode

8192 Baud ALDL — Bidirectional Protocol

The 8192 baud system uses standard RS-232-like serial encoding (UART compatible) at 8192 baud. Unlike 160 baud, this is bidirectional — the scan tool can send commands to the ECU. The physical layer uses 5V TTL levels.

8192 Baud Data Stream (1986 TPI 5.0/5.7L)

Byte  Name        Description               Scaling
──────────────────────────────────────────────────────────
 1   PROMIDA     PROM ID (MSB)              Raw
 2   PROMID+1    PROM ID (LSB)              Raw
 3   MALFFLG1    Malfunction word 1         Bitfield
 4   MALFFLG2    Malfunction word 2         Bitfield
 5   MALFFLG3    Malfunction word 3         Bitfield
 6   MALFFLG4    Malfunction word 4         Bitfield
 7   MALFFLG5    Malfunction word 5         Bitfield
 8   COOLDEGA    Coolant temperature        °C = (n×0.75)−40
 9   COOLTSU     Coolant temp at start      Same as byte 8
10   ADTHROT     TPS (A/D counts)          % = n/2.56
11   NTRPMX      Engine RPM (MSB)           16-bit word
12   NEWRFPER    Ref pulse period (MSB)     16-bit word
13   NEWRFPER+1  Ref pulse period (LSB)     16-bit word
14   FILTMPH     Vehicle speed MPH (MSB)    16-bit word
15   FILTMPH+1   Vehicle speed MPH (LSB)    MPH + MPH/256
16   ATIO        RPM/MPH ratio              Raw
17   ADO2AF      O2 sensor voltage          0-255 = 0-5V
18   ALDLCNTR    Fuel correction            6.25ms units
19   ADMAT       Manifold air temp          °C = (n×0.75)−40
20   FLTLV8      Calculated load (MSB)      16-bit LV8
21   FLTLV8+1    Calculated load (LSB)      LV8 + LV8/256
22   SAP         Spark advance (MSB)        deg×2.8444
23   SAP+1       Spark advance (LSB)        ±32768 range
24   OBINJ       Injector pulse width (MSB) 0.0153ms/count
25   OBINJ+1     Injector pulse width (LSB) 0-65536 range
26   FAVAL       Fuel/air ratio (MSB)       6553.6/E
27   FAVAL+1     Fuel/air ratio (LSB)       E = A/F ratio
28   ACUMFUEL    Accumulated fuel (MSB)      Running total
29   ACUMFUEL+1  Accumulated fuel (LSB)      Running total
30   TIME        Engine run time (MSB)       Seconds
31   TIME+1      Engine run time (LSB)       0-65536 secs
32   EGRDC       EGR duty cycle              %
33   PURGDC      Purge duty cycle            %
34   FANDC       Cooling fan duty cycle      %
35   ADBAT       Battery voltage             0.1V/bit
36   PPSW        Fuel pump power status      Bitfield
37   DISPFLOW    MAF value (MSB)             g/sec
38   DISPFLOW+1  MAF value (LSB)             g/sec + frac
39   AIRFLOW     Unlimited MAF               g/sec

Hardware Interfaces

Simple 160 Baud Interface (1 Transistor)

The simplest ALDL reader uses a single PNP transistor (BC557 or 2N2907) as a level converter between ALDL voltage levels and RS-232 CTS input.

Circuit: ALDL Data → PNP Transistor → PC Serial CTS

ALDL Pin E (data) ──→ Emitter (PNP transistor)
ALDL Pin A (GND)  ──→ Collector + LED + R → PC CTS (pin 8)
PC DTR (pin 4)    ──→ Provides bias voltage
PC GND (pin 5)    ──→ ALDL Pin A

How it works:
1. ALDL HIGH (12V/5V): Transistor OFF → CTS reads LOW (RS232 = 0)
2. ALDL LOW (0V): Transistor ON → CTS reads HIGH (RS232 = 1)
3. Software measures time between CTS transitions to decode bits

Software: ALDLLOG.exe (DOS) or WinALDL (Windows)
Bit rate: Set serial port to 1600 baud or higher
Sample point: Detect transitions, reconstruct 160 baud data

8192 Baud Interface (MAX232)

For bidirectional 8192 baud communication, use a MAX232 level converter IC. This converts 5V TTL to proper RS-232 voltage levels and combines TX/RX data lines through a diode/resistor network.

ALDL Pin E (160 baud) → CTS (PC serial, no switching needed)
ALDL Pin M (8192 baud) → MAX232 T1IN → T1OUT → PC RX
PC TX → MAX232 R1IN → R1OUT → ALDL Pin M
ALDL Pin B (diag) → MAX232 T2IN → T2OUT → ALDL Pin M
                       (for mode selection via PC)

The MAX232 handles:
- Bidirectional 8192 baud data (TX/RX on same wire)
- Mode selection (pulling Pin B to ground via PC)
- No mechanical switching required

Arduino/ESP32 Interface (Modern)

Arduino ALDL Reader (160 baud):
  - Connect ALDL Pin E to Arduino digital pin (with voltage divider for 12V)
  - Connect ALDL Pin A to Arduino GND
  - Use micros() to measure time between transitions
  - Decode bit timing: if gap > 4ms = logic 1, else logic 0
  - Reconstruct bytes from 9-bit frames (start + 8 data)
  - Output via Serial to PC

Arduino ALDL Reader (8192 baud):
  - Connect ALDL Pin M to Arduino SoftwareSerial RX
  - Set baud rate to 8192 (non-standard — SoftwareSerial supports it)
  - Send commands, receive responses
  - Parse 64-byte data frames

ESP32/Teensy:
  - Hardware serial at 8192 baud
  - Bluetooth output for wireless monitoring
  - Real-time data display on phone app

Common GM ECUs

ECU Model      Baud   Voltage  Vehicles
──────────────────────────────────────────────────
1227040        160    5V       TBI trucks (87-91)
1227289        160    5V       TBI cars (87-91)
1227727        160    12V      TPI Camaro/Firebird
1227808        160    12V      VN/VP Commodore (AU)
1227808        8192   5V       TPI 5.0/5.7L (86+)
16167197       8192   5V       LT1 (93-97)
16197427       8192   5V       Vortec trucks (96-97)
12200411       8192   5V       Gen III LS1 (97+)

All use 12-pin ALDL connector (Delco #12020043)
Pin A = GND, Pin B = Diagnostic, Pin E = 160 baud
Pin H = +12V ignition, Pin M = 8192 baud (if equipped)

ALDL vs OBD-II

Feature         ALDL                OBD-II
──────────────────────────────────────────────────
Baud rate       160 / 8192          9600-500000
Encoding        Custom pulse-width  Standard UART/CAN
Connector       5/6/10/12-pin       16-pin SAE J1962
Protocols       GM-proprietary      J1850/ISO/CAN
DTCs            Flashing CEL        Standard P-codes
LiveData        ECU-specific PIDs   Standard PIDs
Scan tools      GM Tech 1/2 only    Universal
Direction       160: RX only        Bidirectional
                8192: Bidirectional
ECU definition  Required per ECU    Standardized
Connectors vary by model/year       Always SAE J1962

Timeline

1980GM introduces ALDL — first mass-produced on-board diagnostic system
1981160 baud unidirectional ALDL deployed across GM lineup
198212-pin ALDL connector (Delco part #12020043) becomes standard
19858192 baud bidirectional ALDL introduced on TPI 5.0/5.7L
19868192 baud ALDL expanded — enables actuator tests and ECU reprogramming
1988CARB (California Air Resources Board) OBD-I regulations take effect, requiring basic malfunction indicator lamp and fault code storage
1994GM introduces OBD 1.5 (early OBD-II) on select models
1996OBD-II mandated federally — ALDL era ends