Il problema della maggior parte dei cavi fai-da-te
La linea ALDL GM a 8192 baud è un unico filo open-collector: dentro l'ECM (e nel CCM, nell'ABS …) una resistenza da ~10 kΩ la tira a +5 V e ogni modulo la porta bassa con un transistor per inviare un bit 0. A riposo = alta. Tutti possono solo portarla bassa; nessuno può forzarla alta.
Il popolare «cavo da 20 dollari» unisce TXD e RXD dell'FT232R e li collega direttamente al pin M. TXD è un'uscita push-pull che forza la linea alta ogni volta che è a riposo, quindi ogni bit 0 inviato dall'ECM diventa una lotta tra il transistor dell'ECM e l'uscita dell'FTDI. A seconda dei componenti, il «basso» che ne risulta si ferma a 0,5–1,5 V – proprio sulle soglie del ricevitore – e ottieni errori di framing e dati spuri, tanto più quando il CCM chiacchiera sul bus. Lo stesso cavo mette sotto sforzo anche l'uscita dell'ECM.
Altre due trappole classiche:
- FT_Prog «Invert TXD/RXD» – corretto solo per gli adattatori RS-232 (DB9) che hanno un transceiver invertente. Su una scheda FT232R TTL fa stare TX a riposo basso (tenendo giù l'intero bus dell'auto – il CCM registra allora il codice 41) e RX legge dati invertiti.
- Schede a 3,3 V / ponticello VCCIO su 3,3 V – la linea è a 5 V; usa I/O a 5 V.
Progetto consigliato (rev B)
| Rif. | Componente | Perché |
|---|---|---|
| U1 | Breakout FTDI FT232RL originale, ponticello VCCIO = 5 V (oppure cavo FTDI TTL-232R-5V) | USB ⇄ UART TTL, logica a 5 V, nessun sabotaggio da parte del driver |
| Q1 | 2N3904 NPN (SMD MMBT3904) | invertitore: TXD a riposo ALTO → Q1 conduce → Q2 interdetto |
| Q2 | 2N3904 NPN, 40 V (SMD MMBT3904, va bene anche PN2222A) | driver di linea open-collector – porta la linea solo BASSA, come ogni modulo GM |
| Q3 | N-MOSFET BSS138 50 V (SOT-23) oppure BS170 (TO-92) | isolatore RX: gate a +5 V, source → RXD, drain → DATA |
| R1 | 150 Ω, 0,5 W | resistenza in serie a Q2 |
| R2 | 10 kΩ RXD → +5 V | livello di riposo di RX (al banco, auto spenta) |
| R3 | 10 kΩ | base di Q1 |
| R4 + SW1 | 10 kΩ + interruttore tra A e B | abilitazione diagnostica solo per gli ECM 1982–88 (160 baud), OFF dal 1989 in poi |
| R5 | 10 kΩ TXD → +5 V | TXD alto mentre l'FTDI si avvia o è scollegato → linea libera |
| R6 | 10 kΩ collettore di Q1 → +5 V | corrente di base per Q2 |
| R7 | 22 kΩ | base di Q2 – volutamente alta, limita la corrente di cortocircuito |
| C1 | 100 nF | disaccoppiamento dei 5 V |
| D1 | TVS SMAJ24A, unidirezionale – fascia (catodo) su DATA, anodo su GND | solo per i picchi (ESD, accensione); fino a 24 V non conduce |
| JP1 | selettore a 3 posizioni | M (1990–95), E (1982–88), E+M (1989) |
| J1 | spina ALDL GM a 12 pin | 1995: DLC a 16 pin, pin dati 9, GND 4+5 |
Come funziona
- TX – TXD a riposo è ALTO, Q1 conduce, Q2 è interdetto: la linea è libera. Un bit 0 (TXD BASSO) interdice Q1, R6+R7 pilotano la base di Q2 e Q2 porta DATA bassa attraverso R1. Due inversioni = la stessa logica del TX dell'FTDI, quindi nessuna inversione in FT_Prog. Livello basso ≈ 0,1 V + R1 × corrente del bus (≈0,2–0,4 V con un pull-up del bus da 2–10 kΩ).
Polarità (identica nella rev A e nella rev B – entrambe non invertenti):
Stato UART TXD rev A: uscita 74LVC1G07 rev B: Q1 rev B: Q2 Linea DATA riposo / bit di stop / bit 1 ALTO alta impedenza (libera) conduce interdetto ALTA (pull-up del bus) bit di start / bit 0 BASSO porta bassa interdetto conduce BASSA Uno stadio a singolo transistor o open-drain, da solo, invertirebbe (base ALTA → linea BASSA); il 74LVC1G07 contiene buffer + open drain (non invertente: il piccolo rombo sul suo simbolo indica l'uscita open-drain, non è un cerchietto di inversione), e la rev B usa Q1 per annullare l'inversione di Q2. Uno stadio invertente terrebbe il bus BASSO ogni volta che l'UART è a riposo – vedi «Perché la polarità è importante».
- RX – Q3 è il classico traslatore di livello a MOSFET. Quando qualcosa porta DATA bassa, prima il diodo intrinseco di Q3 e poi il suo canale portano bassa RXD; quando DATA è alta (5 V o anche 24 V), Q3 è interdetto e R2 tiene RXD a 5 V. RXD vede quindi sempre e solo 0–5 V, e vede la linea reale, così ogni byte che trasmettiamo torna indietro (eco) e VetteALDL lo controlla byte per byte.
- Non alimentato – con l'USB scollegato Q1/Q2 non ricevono corrente di base e il gate di Q3 è a 0 V, quindi il cavo è davvero invisibile all'auto (la rev A caricava ancora il bus tramite R3 e l'ingresso RXD).
- Il loopback al banco funziona senza auto: Q2 porta basso il filo DATA scollegato, Q3 lo passa a RXD.
Perché la polarità è importante
Un'UART a riposo sta ALTA (mark) e un byte inizia con un bit di start BASSO; anche la linea ALDL a riposo è ALTA e i moduli la portano BASSA. Quindi la linea deve seguire direttamente TXD. Se uno stadio invertisse:
- il bus resterebbe BASSO per tutto il tempo in cui l'app non trasmette – il CCM perde l'ECM (codice 41), il quadro strumenti perde i dati dell'ECM e nessuno può più comunicare;
- ogni byte arriverebbe all'auto invertito (bit di start ALTO = nessun bit di start), quindi non verrebbe capito nulla;
- «correggere» il problema con «Invert TXD» di FT_Prog è fragile: prima che l'FTDI carichi la sua EEPROM (inserimento, reset USB, portatile scollegato) la linea verrebbe di nuovo portata BASSA.
La Diagnosi connessione se ne accorge al banco (passo 2: linea bloccata bassa / eco invertita) e dalla EEPROM (passo 1: «linee invertite»).
Cosa succede se 12 V (o più) arrivano al pin dati
L'ECM di per sé non mette mai 12 V sulla linea dati ALDL (vedi sotto), ma può succedere con un pin sbagliato, una spina inserita sfalsata di un pin, il pin G di prova della pompa carburante sulle auto 1984–89, il pin 16 (batteria) del DLC a 16 pin o un guasto del cablaggio.
| Tensione su DATA | Rev B | Rev A (74LVC1G07 + diodo di clamp) |
|---|---|---|
| 12–16 V, a riposo | non conduce nulla (Q2 40 V, Q3 50 V, D1 24 V di stand-off); R2 tiene RXD a 5 V | il diodo di clamp assorbe ampere da una sorgente a bassa impedenza e brucia; U2 (max. assoluto 6,5 V) riceve ~55 mA attraverso R1 e muore |
| 12–16 V durante la trasmissione | corrente di Q2 limitata dal pilotaggio di base a ~15–40 mA; RX vede la linea bloccata ALTA → errore di eco → l'app smette di trasmettere | come sopra |
| 24 V (avviamento con i cavi) | non conduce nulla (stand-off di D1: 24 V) | come sopra |
| picchi > 27 V | D1 limita (≤ 39 V a 10 A, sotto i 40 V di Q2) | clamp a ~6–7 V |
I vecchi cavi con «TX+RX uniti» e la modifica rapida con BAT85 descritta sotto non sono protetti: i 12 V finirebbero nel pin TX dell'FTDI. Usali solo sul pin giusto.
Com'è fatta la linea dati dentro le centraline dell'auto
La linea ALDL GM a 8192 baud (pin M, 1990–95; pin 9 sul DLC a 16 pin del 1995) non è la K-line/L-line europea ISO 9141 (12 V, usata ad es. da Opel/Vauxhall – per quella il Tech 1 ha una cartuccia KW2000 separata). È un unico filo bidirezionale:
- ogni modulo (ECM, CCM, ABS, SIR, climatizzatore) ha un'uscita open-collector (NPN) che porta il filo a massa per inviare un bit 0 e lo rilascia per un bit 1;
- il filo è tirato ai 5 V stabilizzati dell'ECM tramite una resistenza (dell'ordine di 10 kΩ; il valore esatto per il 1227727 non è documentato nelle nostre fonti – se ti serve misuralo, vedi sotto);
- ogni modulo inoltre ascolta sullo stesso filo (un ingresso a comparatore/transistor), quindi ognuno sente la propria trasmissione – per questo il bus funziona come un «AND cablato» (wired-AND) e per questo il nostro cavo deve solo portare la linea bassa.
La linea a 160 baud (pin E, 1982–88) è anch'essa un'uscita open-collector a 5 V dell'ECM, ma trasmette (a impulsi) solo quando è presente la resistenza da 10 kΩ tra A e B. Alcuni altri sistemi GM dell'epoca usavano una linea seriale a 12 V (l'autotest del Tech 1 prevede perfino «LOW SPEED 12 V SERIAL DATA»); la rev B funziona anche con quelle, perché Q2 e Q3 sopportano 40/50 V.
Per stimare il pull-up della tua auto: quadro acceso, motore spento, misura DATA (M) verso massa (A) con il cavo scollegato – circa 5 V (il traffico del CCM la fa oscillare). Poi metti una resistenza da 10 kΩ tra M e A e misura di nuovo: R_pullup ≈ 10 kΩ × (5 V − V) / V. Fai in fretta – mentre la linea è caricata il CCM può perdere l'ECM e memorizzare il codice 41, che potrai cancellare dopo.
Storia: rev A
La rev A usava un buffer open-drain 74LVC1G07, 4,7 kΩ verso RX, un pull-up da 47 kΩ e un diodo di clamp sulla linea. I disegni precedenti al 26 settembre 2026 mostravano quel diodo al contrario (anodo su DATA = bus tenuto a ~0,6 V) e come TVS da 5,0 V; entrambi gli errori sono stati corretti, e la rev B sostituisce l'intero stadio d'ingresso perché la rev A non sopravvive a 12 V sul pin dati.
Modifica rapida per un cavo esistente con TX+RX uniti
Taglia il TX, inserisci un diodo Schottky (BAT85/1N5817): fascia (catodo) verso TXD, anodo verso la linea ALDL; metti 4,7 kΩ in serie all'RX; scheda a 5 V; tutte le inversioni di FT_Prog disattivate (OFF).
Non è protetta contro 12 V sul pin dati (il diodo lascerebbe passare i 12 V verso il TX dell'FTDI) – usala solo sul pin giusto e costruisci la rev B per qualsiasi soluzione permanente.
ALDL a 12 pin (presa dell'auto, vista dall'abitacolo)
F E D C B A A = massa B = abilitazione diagnostica (ECM)
G H J K L M E = dati 160 baud (1982–89) M = dati 8192 (1990–95)
G–A = diagnosi quadro strumenti 1990–93 (MAI sulle 1984–89: G = pompa carburante)
Procedura di collaudo
- Al banco: VetteALDL → Diagnosi connessione, passo 1 (PC e driver) e 2 (loopback) – deve essere pulito al 100 %.
- In auto, quadro spento: passo 3 – il filo dati non deve essere su un pin di massa.
- Quadro acceso: passo 4 – traffico del CCM visibile, l'ECM risponde.
- Qualcosa in rosso → Sessioni e assistenza → Crea pacchetto di supporto.