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. | Componente | Por qué |
|---|---|---|
| U1 | Placa 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 |
| Q1 | 2N3904 NPN (SMD MMBT3904) | inversor: TXD en reposo ALTO → Q1 conduce → Q2 cortado |
| Q2 | 2N3904 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 |
| Q3 | MOSFET N BSS138, 50 V (SOT-23) o BS170 (TO-92) | aislador de RX: puerta a +5 V, fuente → RXD, drenador → DATA |
| R1 | 150 Ω, 0,5 W | resistencia en serie de Q2 |
| R2 | 10 kΩ RXD → +5 V | nivel de reposo de RX (en el banco, con el coche apagado) |
| R3 | 10 kΩ | base de Q1 |
| R4 + SW1 | 10 kΩ + interruptor entre A y B | habilitación de diagnóstico solo para los ECM de 1982–88 (160 baudios); OFF para 1989+ |
| R5 | 10 kΩ TXD → +5 V | TXD en alto mientras el FTDI arranca o está desenchufado → línea libre |
| R6 | 10 kΩ colector de Q1 → +5 V | corriente de base de Q2 |
| R7 | 22 kΩ | base de Q2: deliberadamente alta, limita la corriente de cortocircuito |
| C1 | 100 nF | desacoplo de 5 V |
| D1 | TVS SMAJ24A, unidireccional – banda (cátodo) en DATA, ánodo en GND | solo para picos (ESD, encendido); no conduce hasta 24 V |
| JP1 | selector de 3 posiciones | M (1990–95), E (1982–88), E+M (1989) |
| J1 | clavija ALDL GM de 12 pines | 1995: 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 UART TXD rev A: salida del 74LVC1G07 rev B: Q1 rev B: Q2 Línea DATA reposo / bit de parada / bit 1 ALTO alta impedancia (libre) conduce cortado ALTO (pull-up del bus) bit de inicio / bit 0 BAJO lleva a bajo cortado conduce BAJO 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 DATA | Rev B | Rev A (74LVC1G07 + diodo limitador) |
|---|---|---|
| 12–16 V, en reposo | no conduce nada (Q2 40 V, Q3 50 V, D1 24 V de tensión de trabajo); R2 mantiene RXD a 5 V | el 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 transmite | la 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 enviar | igual que arriba |
| 24 V (arranque con pinzas) | no conduce nada (tensión de trabajo de D1: 24 V) | igual que arriba |
| picos > 27 V | D1 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
- Banco: VetteALDL → Depurador de conexión, paso 1 (PC y controlador) y paso 2 (lazo): debe estar 100 % limpio.
- Coche, contacto en OFF: paso 3 – el cable de datos no debe estar en un pin de masa.
- Contacto en ON: paso 4 – se ve el tráfico del CCM y el ECM responde.
- Cualquier resultado en rojo → Sesiones y soporte → Crear paquete de soporte.