Problem z większością kabli domowej roboty
Linia ALDL GM 8192 bodów to jeden przewód typu otwarty kolektor: wewnątrz ECM (oraz CCM, ABS …) rezystor ~10 kΩ podciąga go do +5 V, a każdy moduł ściąga go w dół tranzystorem, żeby nadać bit 0. Spoczynek = stan wysoki. Każdy może linię tylko ściągać w dół; nikomu nie wolno wymuszać na niej stanu wysokiego.
Popularny „kabel za 20 dolarów” łączy TXD i RXD układu FT232R razem i podpina je wprost do pinu M. TXD to wyjście przeciwsobne (push-pull), które w spoczynku aktywnie wymusza stan wysoki, więc każdy bit 0 z ECM zamienia się w przepychankę między tranzystorem ECM a wyjściem FTDI. Zależnie od elementów wynikowy „stan niski” wypada na 0,5–1,5 V – dokładnie na progach przełączania odbiorników – i pojawiają się błędy ramki oraz śmieci, tym gorsze, im więcej nadaje CCM. Taki kabel dodatkowo przeciąża wyjście ECM.
Dwie kolejne klasyczne pułapki:
- „Invert TXD/RXD” w FT_Prog – poprawne tylko w przejściówkach RS-232 (DB9), które mają odwracający układ nadawczo-odbiorczy. Na płytce TTL z FT232R sprawia, że TX w spoczynku ma stan niski (trzyma w dole całą magistralę auta – CCM zapisuje wtedy kod 41), a RX czyta odwrócone dane.
- Płytki 3,3 V / zworka VCCIO na 3,3 V – linia pracuje na 5 V; używaj wejść i wyjść 5 V.
Zalecany projekt (rev B)
| Symbol | Część | Po co |
|---|---|---|
| U1 | Płytka z oryginalnym FTDI FT232RL, zworka VCCIO = 5 V (albo kabel FTDI TTL-232R-5V) | USB ⇄ UART TTL, logika 5 V, brak sabotażu ze strony sterownika |
| Q1 | 2N3904 NPN (SMD MMBT3904) | inwerter: TXD w spoczynku HIGH → Q1 przewodzi → Q2 zatkany |
| Q2 | 2N3904 NPN, 40 V (SMD MMBT3904, pasuje też PN2222A) | nadajnik linii z otwartym kolektorem – potrafi tylko ściągnąć linię w stan LOW, jak każdy moduł GM |
| Q3 | N-MOSFET BSS138 50 V (SOT-23) albo BS170 (TO-92) | separator RX: bramka na +5 V, źródło → RXD, dren → DATA |
| R1 | 150 Ω, 0,5 W | rezystor szeregowy Q2 |
| R2 | 10 kΩ RXD → +5 V | poziom spoczynkowy RX (na stole, przy wyłączonym aucie) |
| R3 | 10 kΩ | baza Q1 |
| R4 + SW1 | 10 kΩ + przełącznik między A i B | włączenie diagnostyki tylko w ECM z lat 1982–88 (160 bodów), WYŁ. dla 1989+ |
| R5 | 10 kΩ TXD → +5 V | TXD w stanie wysokim, gdy FTDI startuje albo jest odłączony → linia wolna |
| R6 | 10 kΩ kolektor Q1 → +5 V | prąd bazy dla Q2 |
| R7 | 22 kΩ | baza Q2 – celowo duża wartość, ogranicza prąd zwarcia |
| C1 | 100 nF | odsprzęganie 5 V |
| D1 | TVS SMAJ24A, jednokierunkowa – pasek (katoda) na DATA, anoda na GND | tylko na szpilki napięcia (ESD, zapłon); do 24 V nie przewodzi |
| JP1 | przełącznik 3-pozycyjny | M (1990–95), E (1982–88), E+M (1989) |
| J1 | wtyk ALDL GM 12-pin | 1995: złącze DLC 16-pin, dane na pinie 9, GND 4+5 |
Jak to działa
- TX – TXD w spoczynku ma stan HIGH, Q1 przewodzi, Q2 jest zatkany: linia jest wolna. Bit 0 (TXD LOW) zatyka Q1, R6+R7 podają prąd na bazę Q2, a Q2 ściąga DATA w dół przez R1. Dwie inwersje = ta sama logika co TX układu FTDI, więc nie używamy żadnej inwersji w FT_Prog. Poziom niski ≈ 0,1 V + R1 × prąd magistrali (≈0,2–0,4 V przy rezystorze podciągającym magistrali 2–10 kΩ).
Polaryzacja (taka sama w rev A i rev B – obie wersje nie odwracają sygnału):
Stan UART TXD rev A: wyjście 74LVC1G07 rev B: Q1 rev B: Q2 Linia DATA spoczynek / bit stopu / bit 1 HIGH wysoka impedancja (linia wolna) przewodzi zatkany HIGH (podciągnięcie magistrali) bit startu / bit 0 LOW ściąga w dół zatkany przewodzi LOW Pojedynczy tranzystor albo stopień z otwartym drenem sam w sobie odwracałby sygnał (baza HIGH → linia LOW); 74LVC1G07 zawiera bufor + otwarty dren (bez inwersji – mały romb na jego symbolu oznacza wyjście z otwartym drenem, a nie kółko inwersji), a rev B używa Q1, żeby znieść inwersję Q2. Stopień odwracający trzymałby magistralę w stanie LOW przez cały czas spoczynku UART – zob. „Dlaczego polaryzacja ma znaczenie”.
- RX – Q3 to klasyczny konwerter poziomów na MOSFET-cie. Gdy cokolwiek ściąga DATA w dół, dioda podłożowa Q3, a potem jego kanał ściągają w dół RXD; gdy DATA ma stan wysoki (5 V albo nawet 24 V), Q3 jest zatkany, a R2 trzyma RXD na 5 V. RXD widzi więc zawsze tylko 0–5 V i widzi rzeczywisty stan linii, dlatego każdy nadany przez nas bajt wraca (echo), a VetteALDL sprawdza go bajt po bajcie.
- Bez zasilania – przy odłączonym USB Q1/Q2 nie dostają prądu bazy, a bramka Q3 ma 0 V, więc kabel jest dla auta naprawdę niewidoczny (rev A nadal obciążała magistralę przez R3 i wejście RXD).
- Pętla zwrotna na stole działa bez auta: Q2 ściąga w dół niepodłączony przewód DATA, a Q3 przekazuje to do RXD.
Dlaczego polaryzacja ma znaczenie
UART w spoczynku ma stan HIGH (mark), a bajt zaczyna się bitem startu LOW; linia ALDL też w spoczynku ma stan HIGH, a moduły ściągają ją w stan LOW. Linia musi więc wprost podążać za TXD. Gdyby jeden stopień odwracał sygnał:
- magistrala byłaby trzymana w stanie LOW przez cały czas, gdy aplikacja nie nadaje – CCM traci kontakt z ECM (kod 41), zegary tracą dane z ECM i nikt nie może się porozumieć;
- każdy bajt docierałby do auta odwrócony (bit startu HIGH = brak bitu startu), więc nic nie zostałoby zrozumiane;
- „naprawianie” tego opcją „Invert TXD” w FT_Prog jest kruche: zanim FTDI wczyta swój EEPROM (włożenie wtyczki, reset USB, odłączony laptop), linia znów byłaby ściągnięta w stan LOW.
Tester połączenia wyłapuje to już na stole (krok 2: linia zablokowana w stanie niskim / odwrócone echo) i w EEPROM (krok 1: „odwrócone linie”).
Co się dzieje, gdy na pin danych trafi 12 V (albo więcej)
Sam ECM nigdy nie podaje 12 V na linię danych ALDL (zob. niżej), ale może to zrobić zły pin, wtyczka przesunięta o jeden pin, testowy pin G pompy paliwa w autach 1984–89, pin 16 (akumulator) w 16-pinowym DLC albo usterka wiązki.
| Napięcie na DATA | Rev B | Rev A (74LVC1G07 + dioda ograniczająca) |
|---|---|---|
| 12–16 V, spoczynek | nic nie przewodzi (Q2 40 V, Q3 50 V, D1 – napięcie pracy 24 V); R2 trzyma RXD na 5 V | dioda ograniczająca pobiera ampery ze źródła o małej impedancji i się spala; U2 (maks. absolutne 6,5 V) dostaje przez R1 ~55 mA i ginie |
| 12–16 V podczas nadawania | prąd Q2 ograniczony prądem bazy do ~15–40 mA; RX widzi linię zablokowaną w stanie HIGH → błąd echa → aplikacja przestaje nadawać | jak wyżej |
| 24 V (odpalanie z kabli) | nic nie przewodzi (napięcie pracy D1 24 V) | jak wyżej |
| szpilki > 27 V | D1 ogranicza napięcie (≤ 39 V przy 10 A, poniżej 40 V dla Q2) | ograniczenie na ~6–7 V |
Stare kable „TX+RX razem” i opisana niżej szybka przeróbka z BAT85 nie są zabezpieczone: 12 V trafiłoby wprost do pinu TX układu FTDI. Używaj ich tylko na właściwym pinie.
Jak linia danych wygląda wewnątrz modułów auta
Linia ALDL GM 8192 bodów (pin M, 1990–95; pin 9 w 16-pinowym DLC z 1995) to nie europejska linia K/L według ISO 9141 (12 V, używana np. przez Opla/Vauxhalla – Tech 1 ma do niej osobny cartridge KW2000). To jeden dwukierunkowy przewód:
- każdy moduł (ECM, CCM, ABS, SIR, klimatyzacja) ma wyjście z otwartym kolektorem (NPN), które ściąga przewód do masy, żeby nadać bit 0, i zwalnia go przy bicie 1;
- przewód jest podciągnięty do stabilizowanego napięcia 5 V z ECM przez rezystor (rzędu 10 kΩ; dokładnej wartości dla 1227727 nie podają nasze źródła – jeśli jej potrzebujesz, zmierz ją, zob. niżej);
- każdy moduł również słucha na tym samym przewodzie (wejście z komparatorem albo tranzystorem), więc każdy słyszy własną transmisję – dlatego magistrala działa jak „wired-AND” i dlatego nasz kabel może linię tylko ściągać w dół.
Linia 160 bodów (pin E, 1982–88) to także wyjście ECM z otwartym kolektorem na 5 V, ale ECM nadaje na niej (impulsy) tylko wtedy, gdy założony jest rezystor 10 kΩ między A i B. Niektóre inne układy GM z tamtych lat używały szeregowej linii 12 V (autotest Tech 1 ma nawet pozycję „LOW SPEED 12 V SERIAL DATA”); rev B działa także z nimi, bo Q2 i Q3 wytrzymują 40/50 V.
Jak oszacować rezystor podciągający w swoim aucie: zapłon WŁĄCZONY, silnik wyłączony, zmierz DATA (M) względem masy (A) przy odłączonym kablu – ok. 5 V (ruch CCM sprawia, że odczyt migocze). Potem wepnij rezystor 10 kΩ między M i A i zmierz ponownie: R_pullup ≈ 10 kΩ × (5 V − V) / V. Rób to krótko – przy obciążonej linii CCM może stracić kontakt z ECM i zapisać kod 41, który potem możesz skasować.
Historia: rev A
Rev A używała bufora z otwartym drenem 74LVC1G07, 4,7 kΩ na wejściu RX, rezystora podciągającego 47 kΩ i diody ograniczającej na linii. Rysunki sprzed 2026-09-26 pokazywały tę diodę odwrotnie (anoda na DATA = magistrala trzymana na ~0,6 V) i jako TVS 5,0 V; oba błędy są poprawione, a rev B zastępuje cały stopień wejściowy, bo rev A nie przeżywa 12 V na pinie danych.
Szybka przeróbka istniejącego kabla z TX+RX połączonymi razem
Przetnij TX i wstaw diodę Schottky'ego (BAT85/1N5817): pasek (katoda) w stronę TXD, anoda w stronę linii ALDL; szeregowo z RX wstaw 4,7 kΩ; płytka na 5 V; wszystkie inwersje w FT_Prog WYŁĄCZONE.
Brak zabezpieczenia przed 12 V na pinie danych (dioda przepuściłaby 12 V do TX układu FTDI) – używaj takiego kabla tylko na właściwym pinie, a do stałego użytku zbuduj rev B.
12-pinowe złącze ALDL (gniazdo w aucie, widok od strony kabiny)
F E D C B A A = masa B = włączenie diagnostyki (ECM)
G H J K L M E = dane 160 baud (1982–89) M = dane 8192 (1990–95)
G–A = diagnostyka zegarów 1990–93 (NIGDY w 1984–89: G = pompa paliwa)
Procedura testowa
- Na stole: VetteALDL → Tester połączenia, krok 1 (komputer i sterownik) i 2 (pętla zwrotna) – muszą być w 100 % czyste.
- W aucie, zapłon WYŁĄCZONY: krok 3 – przewód danych nie może być na pinie masy.
- Zapłon WŁĄCZONY: krok 4 – widać ruch CCM, ECM odpowiada.
- Cokolwiek na czerwono → Sesje i wsparcie → Utwórz pakiet zgłoszeniowy.