El cable · rev B

Un cable que respeta las reglas del ALDL.

La línea de datos ALDL es un solo cable que cada módulo solo puede llevar a nivel bajo. La mayoría de los cables caseros empujan contra ella. Este no, y además soporta 12–24 V en el pin de datos.

La petición en la línea · 8192 baudiosF4 57 01 00 B4

Cada byte: un bit de inicio (bajo), ocho bits de datos empezando por el menos significativo y un bit de parada (alto), 122 µs por bit. La petición completa dura 6,1 ms; la unidad de control del motor responde con 67 bytes.

Por ahora no se venden cables ya montados. Construya uno con la lista de componentes de abajo, o use un cable FTDI estándar con el arreglo rápido del final de esta página.

esquema

El problema de la mayoría de los cables caseros

La línea ALDL de 8192 baudios de GM es un único cable de colector abierto: dentro del ECM (y del CCM, del ABS…) una resistencia de ~10 kΩ la sube a +5 V, y cada módulo la lleva a nivel bajo con un transistor para enviar un bit 0. En reposo = nivel alto. Todos pueden llevarla a nivel bajo; nadie puede forzarla a nivel alto.

El popular «cable de 20 dólares» une TXD y RXD del FT232R y los lleva directamente al pin M. TXD es una salida push-pull que fuerza la línea a nivel alto siempre que está en reposo, así que cada bit 0 del ECM se convierte en una pelea entre el transistor del ECM y la salida del FTDI. Según los componentes, el «nivel bajo» resultante queda en 0,5–1,5 V – justo en los umbrales del receptor – y aparecen errores de trama y basura, peor aún cuando el CCM está transmitiendo. Ese mismo cable también somete a esfuerzo la salida del ECM.

Otras dos trampas clásicas:

  • FT_Prog «Invert TXD/RXD» – correcto solo para adaptadores RS-232 (DB9) que llevan un transceptor inversor. En una placa FT232R TTL hace que TX quede en reposo a nivel bajo (con lo que mantiene todo el bus del coche en nivel bajo: el CCM registra entonces el código 41) y que RX lea los datos invertidos.
  • Placas de 3,3 V / puente VCCIO en 3,3 V – la línea es de 5 V; use E/S de 5 V.

Diseño recomendado (rev B)

Ref.ComponentePor qué
U1Placa FTDI FT232RL original, puente VCCIO = 5 V (o cable FTDI TTL-232R-5V)USB ⇄ UART TTL, lógica de 5 V, sin sabotaje del controlador
Q12N3904 NPN (SMD MMBT3904)inversor: TXD en reposo ALTO → Q1 conduce → Q2 cortado
Q22N3904 NPN, 40 V (SMD MMBT3904; también sirve PN2222A)excitador de línea de colector abierto: solo lleva la línea a BAJO, como todos los módulos de GM
Q3MOSFET N BSS138, 50 V (SOT-23) o BS170 (TO-92)aislador de RX: puerta a +5 V, fuente → RXD, drenador → DATA
R1150 Ω, 0,5 Wresistencia en serie de Q2
R210 kΩ RXD → +5 Vnivel de reposo de RX (en el banco, con el coche apagado)
R310 kΩbase de Q1
R4 + SW110 kΩ + interruptor entre A y Bhabilitación de diagnóstico solo para los ECM de 1982–88 (160 baudios); OFF para 1989+
R510 kΩ TXD → +5 VTXD en alto mientras el FTDI arranca o está desenchufado → línea libre
R610 kΩ colector de Q1 → +5 Vcorriente de base de Q2
R722 kΩbase de Q2: deliberadamente alta, limita la corriente de cortocircuito
C1100 nFdesacoplo de 5 V
D1TVS SMAJ24A, unidireccional – banda (cátodo) en DATA, ánodo en GNDsolo para picos (ESD, encendido); no conduce hasta 24 V
JP1selector de 3 posicionesM (1990–95), E (1982–88), E+M (1989)
J1clavija ALDL GM de 12 pines1995: DLC de 16 pines, datos en el pin 9, GND en 4+5

Cómo funciona

  • TX – TXD en reposo está en ALTO, Q1 conduce y Q2 está cortado: la línea queda libre. Un bit 0 (TXD en BAJO) corta Q1, R6+R7 excitan la base de Q2 y Q2 lleva DATA a nivel bajo a través de R1. Dos inversiones = la misma lógica que el TX del FTDI, así que no se usa ninguna inversión de FT_Prog. Nivel bajo ≈ 0,1 V + R1 × corriente del bus (≈0,2–0,4 V con un pull-up del bus de 2–10 kΩ).

    Polaridad (idéntica en la rev A y en la rev B: ninguna de las dos invierte):

    Estado de la UARTTXDrev A: salida del 74LVC1G07rev B: Q1rev B: Q2Línea DATA
    reposo / bit de parada / bit 1ALTOalta impedancia (libre)conducecortadoALTO (pull-up del bus)
    bit de inicio / bit 0BAJOlleva a bajocortadoconduceBAJO

    Una sola etapa de transistor o de drenador abierto, por sí misma, sí invertiría (base en ALTO → línea en BAJO); el 74LVC1G07 contiene un búfer + drenador abierto (no invierte: el pequeño rombo de su símbolo indica la salida de drenador abierto, no es un círculo de inversión), y la rev B usa Q1 para anular la inversión de Q2. Una etapa inversora mantendría el bus en BAJO siempre que la UART estuviera en reposo: vea «Por qué importa la polaridad».

  • RX – Q3 es el clásico adaptador de nivel con MOSFET. Cuando algo lleva DATA a nivel bajo, el diodo interno de Q3 y después su canal llevan RXD a nivel bajo; cuando DATA está en alto (5 V o incluso 24 V), Q3 está cortado y R2 mantiene RXD a 5 V. Por eso RXD solo ve 0–5 V, y ve la línea real: cada byte que transmitimos vuelve (eco) y VetteALDL lo comprueba byte a byte.
  • Sin alimentación – con el USB desenchufado, Q1/Q2 no reciben corriente de base y la puerta de Q3 está a 0 V, así que el cable es realmente invisible para el coche (la rev A aún cargaba el bus a través de R3 y de la entrada RXD).
  • La prueba de lazo en el banco funciona sin el coche: Q2 lleva a nivel bajo el cable DATA libre y Q3 lo pasa a RXD.

Por qué importa la polaridad

Una UART en reposo está en ALTO (marca) y un byte empieza con un bit de inicio en BAJO; la línea ALDL también está en ALTO en reposo y los módulos la llevan a BAJO. Por eso la línea debe seguir directamente a TXD. Si una etapa invirtiera:

  • el bus quedaría en BAJO todo el tiempo que la aplicación no envía: el CCM pierde el ECM (código 41), el tablero pierde los datos del ECM y nadie puede comunicarse;
  • cada byte llegaría invertido al coche (bit de inicio en ALTO = sin bit de inicio), así que no se entendería nada;
  • «arreglarlo» con la opción «Invert TXD» de FT_Prog es frágil: antes de que el FTDI cargue su EEPROM (al enchufarlo, en un reinicio del USB, con el portátil desconectado) la línea volvería a quedar en BAJO.

El depurador de conexión lo detecta en el banco (paso 2: la línea está bloqueada en bajo / eco invertido) y a partir de la EEPROM (paso 1: «líneas invertidas»).

Qué pasa si llegan 12 V (o más) al pin de datos

El propio ECM nunca pone 12 V en la línea de datos ALDL (vea más abajo), pero sí pueden hacerlo un pin equivocado, una clavija desplazada un pin, el pin G de prueba de la bomba de combustible en los coches 1984–89, el pin 16 (batería) del DLC de 16 pines o una avería en el mazo de cables.

Tensión en DATARev BRev A (74LVC1G07 + diodo limitador)
12–16 V, en reposono conduce nada (Q2 40 V, Q3 50 V, D1 24 V de tensión de trabajo); R2 mantiene RXD a 5 Vel diodo limitador recibe amperios de una fuente de baja impedancia y se quema; U2 (máx. absoluto 6,5 V) recibe ~55 mA a través de R1 y se destruye
12–16 V mientras transmitela corriente de Q2 queda limitada por su corriente de base a ~15–40 mA; RX ve la línea bloqueada en ALTO → error de eco → la aplicación deja de enviarigual que arriba
24 V (arranque con pinzas)no conduce nada (tensión de trabajo de D1: 24 V)igual que arriba
picos > 27 VD1 los recorta (≤ 39 V a 10 A, por debajo de los 40 V de Q2)limitación a ~6–7 V

Los cables antiguos con «TX+RX unidos» y el arreglo rápido con BAT85 de más abajo no están protegidos: se forzarían 12 V en el pin TX del FTDI. Úselos solo en el pin correcto.

Cómo es la línea de datos dentro de los módulos del coche

La línea ALDL de 8192 baudios de GM (pin M, 1990–95; pin 9 en el DLC de 16 pines de 1995) no es la línea K/L europea ISO 9141 (12 V, usada p. ej. por Opel/Vauxhall; el Tech 1 tiene un cartucho KW2000 aparte para eso). Es un único cable bidireccional:

  • cada módulo (ECM, CCM, ABS, SIR, climatizador) tiene una salida de colector abierto (NPN) que lleva el cable a masa para enviar un bit 0 y lo libera para un bit 1;
  • el cable está conectado mediante pull-up a los 5 V regulados del ECM a través de una resistencia (del orden de 10 kΩ; el valor exacto para el 1227727 no está documentado en nuestras fuentes: mídalo si lo necesita, vea más abajo);
  • cada módulo también escucha en el mismo cable (una entrada de comparador/transistor), así que cada uno oye su propia transmisión: por eso el bus funciona como un «AND cableado» y por eso nuestro cable solo debe llevar la línea a nivel bajo.

La línea de 160 baudios (pin E, 1982–88) también es una salida de colector abierto de 5 V del ECM, pero solo transmite (pulsos) cuando está presente la resistencia de 10 kΩ entre A y B. Algunos otros sistemas de GM de esa época usaban una línea serie de 12 V (la autoprueba del Tech 1 incluso incluye «LOW SPEED 12 V SERIAL DATA»); la rev B también funciona con ellos, porque Q2 y Q3 toleran 40/50 V.

Para estimar el pull-up de su coche: contacto en ON, motor apagado, mida DATA (M) contra masa (A) con el cable desenchufado: unos 5 V (el tráfico del CCM hace que la lectura oscile). Después ponga una resistencia de 10 kΩ entre M y A y mida de nuevo: R_pullup ≈ 10 kΩ × (5 V − V) / V. Hágalo rápido: mientras la línea está cargada, el CCM puede perder el ECM y guardar el código 41, que después puede borrar.

Historia: rev A

La rev A usaba un búfer de drenador abierto 74LVC1G07, 4,7 kΩ hacia RX, un pull-up de 47 kΩ y un diodo limitador en la línea. Los dibujos anteriores al 2026-09-26 mostraban ese diodo invertido (ánodo en DATA = bus mantenido a ~0,6 V) y como un TVS de 5,0 V; ambas cosas están corregidas, y la rev B sustituye toda la etapa de entrada porque la rev A no soporta 12 V en el pin de datos.

Arreglo rápido para un cable existente con TX+RX unidos

Corte TX e intercale un diodo Schottky (BAT85/1N5817): banda (cátodo) hacia TXD, ánodo hacia la línea ALDL; ponga 4,7 kΩ en serie con RX; placa de 5 V; todas las inversiones de FT_Prog en OFF.

No está protegido contra 12 V en el pin de datos (el diodo dejaría pasar los 12 V al TX del FTDI): úselo solo en el pin correcto y construya la rev B para cualquier uso permanente.

ALDL de 12 pines (conector del coche, visto desde el habitáculo)

 F  E  D  C  B  A        A = masa            B = habilitación de diagnóstico (ECM)
 G  H  J  K  L  M        E = datos 160 baudios (1982–89)   M = datos 8192 (1990–95)
                         G–A = diagnóstico del tablero 1990–93 (NUNCA en 1984–89: G = bomba de combustible)

Procedimiento de prueba

  1. Banco: VetteALDL → Depurador de conexión, paso 1 (PC y controlador) y paso 2 (lazo): debe estar 100 % limpio.
  2. Coche, contacto en OFF: paso 3 – el cable de datos no debe estar en un pin de masa.
  3. Contacto en ON: paso 4 – se ve el tráfico del CCM y el ECM responde.
  4. Cualquier resultado en rojo → Sesiones y soporte → Crear paquete de soporte.