Uvod: K-Linija na steroidima
KWP2000 (ISO 14230) je dijagnostički protokol koji je krajem devedesetih nasledio i značajno unapredio stariji ISO 9141. Iako koristi istu fizičku žicu i isti OBD pin 7, donosi potpuno novi protokolski sloj sa jasnim adresiranjem ECU modula, formalizovanim sesijama, dijagnostičkim servisima i puno bržom inicijalizacijom. Upravo zato je KWP2000 postao standard u velikom broju vozila proizvedenih između 1998. i 2008. godine, pre nego što je CAN preuzeo ulogu glavnog dijagnostičkog interfejsa.
KWP2000 je dominirao u prelaznom periodu: kasne devedesete i prva polovina 2000-ih. Tipično ga srećemo na:
- VW/Audi/Škoda/Seat – Golf 4/5, Passat B5/B5.5 i slične platforme pre potpunog prelaska na CAN,
- Opel vozila do sredine 2000-ih,
- Fiat/Alfa/Lancia iz istog perioda,
Sa stanovišta fizičkog sloja, KWP2000 i ISO 9141 su praktično isti. Prava razlika je u softveru – načinu na koji se poruke pakuju, adresiraju, tempiraju i organizuju u sesije.
Brzina komunikacije KWP2000 preko K-linije
Iako ISO 14230 formalno dopušta da se brzina komunikacije posle inicijalizacije dogovori između testera i ECU-a (u rasponu od približno 1,2 kbit/s do 10,4 kbit/s), u praksi se KWP2000 preko K-linije gotovo uvek odvija na fiksnih 10,4 kbit/s. Ta brzina je postala industrijski standard zato što je univerzalno podržana, stabilna i dovoljno brza za potrebe dijagnostike. Drugim rečima: protokol je varijabilan po specifikaciji, ali je 10,4 kbit/s postala njegova de facto radna brzina.
KWP2000 u OSI referentnom modelu: gde se tačno uklapa
KWP2000 je striktno dijagnostički protokol. U pogledu OSI modela, on pokriva:
- Fizički sloj (Layer 1) – K-linija kao serijski prenos na 12 V,
- Data link sloj (Layer 2) – struktura poruke, adresiranje, tajming, greške,
- „Diagnostic Services“ (Layer 7) – konkretni servisi tipa readDataByLocalIdentifier, startDiagnosticSession, accessTimingParameter itd.
Standard vrlo jasno kaže: arhitektura podrazumeva jednog klijenta (tester) i više servera (ECU-a) na jednoj dijagnostičkoj magistrali. Komunikacija između servera (ECU-a) nije deo ovog standarda – KWP2000 je zamišljen kao „jedna telefonska linija“ između testera i svakog ECU-a ponaosob, a ne kao mreža gde ECU-i stalno čavrljaju jedni s drugima.
KWP2000 kao aplikativni sloj (OSI Layer 7): gde se krije prava „inteligencija” protokola
Tehničari uglavnom KWP2000 doživljavaju kao „protokol preko K-linije”, ali to je samo deo priče. Najvažnije za razumevanje je da se KWP2000 najvećim delom zapravo nalazi na aplikativnom sloju (OSI Layer 7) – tamo gde se definiše logika dijagnostike: šta ECU ume, kako odgovara, koje servise podržava, kada odbija zahtev i kako se ponaša u različitim sesijama.
Drugim rečima: Layer 1 i Layer 2 samo prenose bajtove. Kao i kod ISO-9141. KWP2000 se „dešava” na Layeru 7.
SID – Service Identifier: srce aplikativnog sloja
Prvi bajt svakog data segmenta je SID (Service Identifier). To je komanda koja ECU-u govori šta tačno treba da uradi.
Najvažniji SID-ovi u praksi:
0x10– startDiagnosticSession (biranje Normal, Extended ili Programming sesije),0x20– stopDiagnosticSession (prekid aktivne dijagnostičke sesije i povratak u normalan režim),0x21– readDataByLocalIdentifier (čitanje proizvođački-specifičnih podataka – lokalni ID),0x22– readDataByCommonIdentifier (čitanje standardizovanih podataka zajedničkih više ECU-a),0x23– readMemoryByAddress (direktno čitanje memorije ECU-a na zadatoj adresi),0x2C– inputOutputControlByLocalIdentifier (ručna kontrola izlaza: aktuatori, releji, ventili...),0x31– startRoutine / stopRoutine (pokretanje ili zaustavljanje internih rutina – testovi, inicijalizacije),0x3E– testerPresent (sprečava timeout – održava sesiju aktivnom),0x83– accessTimingParameter (čitanje ili podešavanje tajming parametara komunikacije).
Pozitivni odgovori imaju vrednost SID + 0x40.
Primer: zahtev 0x21 → odgovor 0x61.
Negativni odgovori: 0x7F + kod greške
Ako ECU ne može da obradi zahtev, vraća:
0x7F– oznaka negativnog odgovora,- SID komande koju odbija,
- kod greške (NRC – Negative Response Code).
U praksi najbitniji NRC kodovi su:
- 0x10 – general error (pogrešan format),
- 0x11 – serviceNotSupported,
- 0x12 – subFunctionNotSupported,
- 0x21 – busyRepeatRequest (ECU trenutno zauzet),
- 0x22 – conditionsNotCorrect (npr. temperatura motora nije dovoljna),
- 0x33 – securityAccessDenied,
- 0x78 – requestCorrectlyReceived – ResponsePending (ECU radi u pozadini i traži dodatno vreme).
Kod 0x78 je posebno bitan: tester NIKAKO ne sme ponovo da šalje zahtev – mora da čeka konačan odgovor.
Sesije: način na koji ECU menja „raspoloženje“
KWP2000 definiše više dijagnostičkih sesija, koje određuju šta je dozvoljeno:
- Default Session – osnovni parametri, ograničeni servisi.
- Extended Diagnostic Session – napredni parametri, testovi, adaptacije.
- Programming Session – reprogramiranje ECU-a (flashovanje).
Ulazak u svaku od njih se radi preko 0x10 (startDiagnosticSession) sa različitim parametrima.
Security Access: zaštita senzitivnih funkcija
Baš kao i UDS kasnije, i KWP2000 ima Security Access mehanizam. On funkcioniše po principu:
- Tester traži sigurnosni „seed“ (
0x27servis). - ECU pošalje seed – čisto brojčanu vrednost.
- Tester mora da izračuna „key“ – algoritam je interni, OEM specifičan.
- ECU poredi rezultat – ako je dobar, otključavaju se napredne funkcije.
Ovo je važan deo aplikativnog sloja, jer neke funkcije (npr. kod imobilajzera, adaptacije, kodiranja) ne mogu da se pozovu bez otključavanja.
Veza sa UDS (ISO 14229): KWP2000 je direktni predak
Većina strukture današnje UDS dijagnostike na CAN-u potiče direktno iz KWP2000:
- ISTI koncept servisa (SID + parametri),
- ISTI pristup negativnim odgovorima (
0x7F+ kod), - ISTE sesije (default, extended, programming),
- slični tajming parametri (P2, P2*, itd.).
Razlika je samo u fizičkom sloju (CAN umesto K-line). Logika ostaje ista.
Srž poruke: zašto je Layer 7 najbitniji?
Zato što upravo aplikativni sloj određuje:
- šta ECU dozvoljava a šta zabranjuje,
- kada odgovara a kada „razmišlja“ (kod 0x78),
- koje parametre možeš čitati i u kojim sesijama,
- koje adaptacije možeš pokrenuti,
- da li možeš programirati ECU ili je zaključan,
- koji identifikatori i rutine postoje u tom konkretnom modu.
Za razliku od Layer 1 i Layer 2, koji su uvek isti, Layer 7 je „ličnost“ svakog ECU-a – tu se razlikuju brendovi, modeli i generacije.
Inženjerski ugao: ista žica, drugi jezik
Da bismo razumeli šta KWP2000 zapravo donosi, moramo da razdvojimo fizički sloj (hardver, žice) od sloja protokola (format poruke, tajming, sesije).
Fizički sloj: na K-liniji nema iznenađenja
Na nivou hardvera, KWP2000 izgleda praktično isto kao ISO 9141:
- Žica: koristi se K-linija (OBD2 Pin 7) kao glavna dijagnostička linija.
- Napon: open-collector logika sa pull-up otpornikom u ECU-u.
- Mirovanje (recesivno „1“): oko 12 V.
- Dominantno „0“: tranzistor spaja liniju na masu (0 V).
- Brzina: u tipičnoj dijagnostici ~10.4 kbps; standard dozvoljava i druge brzine, ali na K-liniji to retko postoji u praksi.
Ako staviš osciloskop na K-liniju vozila koje koristi KWP2000, videćeš iste 0-12 V pravougaone impulse kao i kod ISO 9141. Tu praktično nema razlike.
Protokol sloj: ovde je revolucija
Prava magija se dešava u sloju protokola. KWP2000 dodaje ono čega je ISO 9141 bio gladan:
- adresiranje (više ECU-a na istoj K-liniji, bez kolizije),
- formalnu strukturu poruke (header, dužine, checksum),
- sesije i servise (start/stop komunikacije, promenu tajminga),
- napredan tajming sa P1, P2, P3, P4 parametrima,
- periodični prenos (ECU sam „šalje stream“ podataka).
Bolje rečeno – KWP2000 je softverski „turbo“ na istoj staroj K-liniji.
Struktura poruke: Format, adrese, dužina, kontrolna suma
Svaka KWP2000 poruka sastoji se od:
- Header dela (do 4 bajta),
- Data bajtova (tu je i Service ID – SID),
- Checksuma (1 bajt).
Format bajt (Fmt): mali bajt, puno informacija
Format bajt određuje:
- da li se koriste adrese (target/source),
- da li se dužina prenosi posebno,
- da li je u pitanju fizičko ili funkcionalno adresiranje.
Najčešća podela:
00xxxxxx– bez adresa, bez dodatne dužine,01xxxxxx– bez adresa, sa dodatnom dužinom,10xxxxxx– sa adresama, fizičko adresiranje,11xxxxxx– sa adresama, funkcionalno adresiranje.
Adrese: Target i Source
- Target address – ECU kome je poruka namenjena.
- Source address – adresa pošiljaoca (najčešće tester =
0xF1).
Dužina i data bajtovi
Dužina govori koliko data bajtova sledi posle headera, a prvi data bajt je uvek SID.
Checksum
Jednostavan zbir svih prethodnih bajtova, modulo 256. Ako ne odgovara – ECU ignoriše poruku.
Sesije i servisi: kako izgleda jedan „razgovor“
Tipičan tok:
- Inicijalizacija.
- Aktivacija sesije (
0x81ili0x10). - Dijagnostički zahtevi (SID komande).
- Gašenje (
0x20ili0x82).
P1, P2, P3, P4: tajming bez mistike
- P1 – pauza između bajtova.
- P2 – maksimalno vreme za odgovor ECU-a.
- P3 – vreme koje tester ima između zahteva.
- P4 – pauze u specifičnim režimima.
Periodični prenos: „Live data“ - podaci u realnom vremenu
KWP2000 ima Periodic Transmission Mode – ECU sam šalje podatke periodično, bez ponavljanih zahteva.
Kako dijagnostikovati KWP2000
1. Osnovna provera napona na pinu 7
Očekivano 11–12V, pri datom kontaktu. Ako nema – kvar na instalaciji ili ECU vuče liniju.
2. Zagušena linija – najčešći kvar
Često radio, airbag modul ili modul vrata drže K-liniju oborenu.
3. Fast Init ne uspeva
Stariji ECU često ne registruju Fast Init. Rešenje: probati 5 baud init u testeru.
4. Kod 0x78 (ResponsePending)
ECU traži više vremena. Tester mora da čeka, ne da šalje ponovo.
Mitovi i zablude: da li ECU-i međusobno pričaju preko K-linije?
Ne – 99% vremena K-linija je SAMO dijagnostička linija.
Za međusobnu komunikaciju pre CAN-a koristile su se posebne žice, analogni/pulse signali, PWM itd.
Izuzetak: Imobilajzer
Kod starijih VW/Audi sistema immo modul i ECU ponekad komuniciraju preko K/W-linije. Ako izvadiš tablu – nema ni komunikacije ni startovanja.
Zaključak: most ka CAN-busu
KWP2000 je softverski renesansni korak – zadržao je jeftinu infrastrukturu jedne žice, ali uveo kompletnu logiku dijagnostike kao što je danas srećemo na UDS-u.
Za nas u praksi:
- prvo fizički sloj – napon na pinu 7,
- zatim inicijalizacija – Fast init,
- zatim aplikativni sloj – SID komande, sesije, negativni odgovori.
KWP2000 je poslednji veliki protokol pre ere CAN-a – i zahvaljujući njemu, današnji UDS deluje potpuno logično svim tehničarima koji razumeju kako radi K-linija.