Kabel · rev B

Kabel, który gra według reguł ALDL.

Linia danych ALDL to jeden przewód, który każdy moduł może tylko ściągać w dół. Większość kabli domowej roboty się z nią przepycha. Ten nie – i wytrzymuje 12–24 V na pinie danych.

Zapytanie na przewodzie · 8192 baudF4 57 01 00 B4

Każdy bajt: jeden bit startu (niski), osiem bitów danych od najmniej znaczącego, jeden bit stopu (wysoki) – 122 µs na bit. Całe zapytanie trwa 6,1 ms; komputer silnika odpowiada 67 bajtami.

Gotowych kabli na razie nie sprzedajemy. Zbuduj własny według listy części poniżej – albo użyj zwykłego kabla FTDI z szybką przeróbką opisaną na końcu tej strony.

schemat

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)

SymbolCzęśćPo co
U1Pł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
Q12N3904 NPN (SMD MMBT3904)inwerter: TXD w spoczynku HIGH → Q1 przewodzi → Q2 zatkany
Q22N3904 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
Q3N-MOSFET BSS138 50 V (SOT-23) albo BS170 (TO-92)separator RX: bramka na +5 V, źródło → RXD, dren → DATA
R1150 Ω, 0,5 Wrezystor szeregowy Q2
R210 kΩ RXD → +5 Vpoziom spoczynkowy RX (na stole, przy wyłączonym aucie)
R310 kΩbaza Q1
R4 + SW110 kΩ + przełącznik między A i Bwłączenie diagnostyki tylko w ECM z lat 1982–88 (160 bodów), WYŁ. dla 1989+
R510 kΩ TXD → +5 VTXD w stanie wysokim, gdy FTDI startuje albo jest odłączony → linia wolna
R610 kΩ kolektor Q1 → +5 Vprąd bazy dla Q2
R722 kΩbaza Q2 – celowo duża wartość, ogranicza prąd zwarcia
C1100 nFodsprzęganie 5 V
D1TVS SMAJ24A, jednokierunkowa – pasek (katoda) na DATA, anoda na GNDtylko na szpilki napięcia (ESD, zapłon); do 24 V nie przewodzi
JP1przełącznik 3-pozycyjnyM (1990–95), E (1982–88), E+M (1989)
J1wtyk ALDL GM 12-pin1995: 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 UARTTXDrev A: wyjście 74LVC1G07rev B: Q1rev B: Q2Linia DATA
    spoczynek / bit stopu / bit 1HIGHwysoka impedancja (linia wolna)przewodzizatkanyHIGH (podciągnięcie magistrali)
    bit startu / bit 0LOWściąga w dółzatkanyprzewodziLOW

    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 DATARev BRev A (74LVC1G07 + dioda ograniczająca)
12–16 V, spoczyneknic nie przewodzi (Q2 40 V, Q3 50 V, D1 – napięcie pracy 24 V); R2 trzyma RXD na 5 Vdioda 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 nadawaniaprą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 VD1 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

  1. Na stole: VetteALDL → Tester połączenia, krok 1 (komputer i sterownik) i 2 (pętla zwrotna) – muszą być w 100 % czyste.
  2. W aucie, zapłon WYŁĄCZONY: krok 3 – przewód danych nie może być na pinie masy.
  3. Zapłon WŁĄCZONY: krok 4 – widać ruch CCM, ECM odpowiada.
  4. Cokolwiek na czerwono → Sesje i wsparcie → Utwórz pakiet zgłoszeniowy.