Kısaca
- OBD2 yasal olarak yalnızca emisyonla ilgili arızaları raporlamak zorundadır. Airbag, ABS, direksiyon, klima ve gövde modülleri bu kapsamın dışındadır.
- Klasik
03komutu bir yayın (broadcast) isteğidir ve pratikte yalnızca motor — bazen şanzıman — kutusunu yanıtlatır. - Diğer modüllere ulaşmanın yolu doğrudan adreslemedir: her modülün kendi CAN kimliği vardır ve tek tek sorulması gerekir.
- Bazı markalarda modüller gateway'in arkasındadır; standart adres aralığından hiç görünmezler. BMW F/G serisinde bu duvarın arkasına
6F1tester adreslemesiyle geçilir — canlı bir 2016 F36'da 38 adresin 11'i yanıt verdi. - Arıza kodunun ilk harfi hangi dünyada olduğunuzu söyler: P motor/aktarma, B gövde, C şasi, U ağ/iletişim. Ucuz tarayıcıların çoğu sadece P'yi görür.
OBD2 aslında bir teşhis standardı değil, bir emisyon standardıdır
OBD-II (Avrupa'daki adıyla EOBD) mekanikçiler kolaylık görsün diye icat edilmedi. Amacı, aracın egzoz emisyonunu bozan bir arıza oluştuğunda bunun standart bir soketten, standart bir komutla, marka bağımsız okunabilmesiydi. Bu yüzden zorunlu kılınan şey nettir: emisyona etki eden bileşenler, arıza lambası (MIL) ve emisyonla ilgili arıza kodları.
Airbag kontrol ünitesinin emisyonla hiçbir ilişkisi yoktur. ABS ünitesinin de yoktur. Park sensörünün, koltuk modülünün, far modülünün de. Dolayısıyla üreticinin bu modülleri standart OBD2 arayüzünden dışarı açması gibi bir yükümlülüğü yoktur — ve çoğu üretici açmaz.
Bu, “ucuz tarayıcı aldınız” meselesi değildir. 16 pinli soketin kendisi zaten sadece emisyon için sözleşmelidir; geri kalan her şey üreticinin gönüllü olarak bıraktığı kapılardan geçer.
03 komutu aslında kime soruyor?
Neredeyse her OBD2 uygulaması arıza kodu okumak için önce şunu yapar: adaptöre hedef CAN kimliği olarak 7DF yazar ve 03 komutunu gönderir. 7DF, ISO 15765-4'te tanımlı fonksiyonel yayın adresidir — “bu isteği duyan ve kendini muhatap sayan herkes cevaplasın” demektir.
Teoride birden fazla emisyon ECU'su cevaplayabilir. Pratikte, sahada gördüğümüz araçların büyük çoğunluğunda bu yayına yalnızca motor kutusu (yanıt kimliği 7E8) cevap verir. Şanzıman kutusu (7E9) bazen katılır. Airbag ve ABS ise bu yayını ya hiç duymaz ya da duyup görmezden gelir; çünkü onlar emisyon muhatabı değildir.
Sonuç: uygulama dürüstçe “yanıt gelen ECU'da kod yok” der. Kullanıcı bunu “araçta kod yok” diye okur. Aradaki fark, bu yazının tamamı.
Kodun ilk harfi hangi dünyada olduğunuzu söyler
Arıza kodları dört aileye ayrılır. Bu ayrım kozmetik değildir; hangi ağ üzerinden, hangi ECU'dan okunacağını belirler.
| Önek | Alan | Tipik örnek | Standart 03 ile görünür mü? |
|---|---|---|---|
P | Powertrain — motor, aktarma organları | P0300 ateşleme kaçağı | Genellikle evet |
C | Chassis — fren, ABS, direksiyon, süspansiyon | C0035 tekerlek hız sensörü devresi | Hayır |
B | Body — airbag, kapı, koltuk, aydınlatma, konfor | B0001 hava yastığı ateşleme devresi | Hayır |
U | Network — modüller arası iletişim kaybı | U0100 motor ECU ile iletişim yok | Kısmen |
Bu dengesizlik veritabanı tarafında da görünür. CarCoding'in Türkçe açıklamalı ayrıntılı kod veritabanında bugün 380 kayıt var; dağılım 265 P, 62 C, 27 U, 26 B. P kodları böylesine baskın, çünkü standartlaştırılmış ve marka bağımsız tanımlanmış olanlar büyük ölçüde onlar. B ve C tarafında ise aynı kod numarası iki farklı markada iki farklı şey anlatabilir — bu yüzden ayrıca 89 marka-özel kayıt ayrı bir tabloda tutuluyor ve yalnızca araç markası bilindiğinde uygulanıyor.
Çözümün ilk katmanı: modüle doğrudan adresleme
Yayın işe yaramıyorsa modülü ismiyle çağırmak gerekir. Her ECU'nun bir istek CAN kimliği ve bir yanıt kimliği vardır. Adaptöre ATSH ile hedef kimlik yazılır, istek gönderilir, yanıt beklenir. Kimlik doğruysa modül konuşur; yanlışsa sessizlik gelir.
Standart aralık 7E0–7E7 istek / 7E8–7EF yanıttır ve içinde çoğunlukla motor ile şanzıman oturur. Gövde ve şasi modülleri ise üreticinin seçtiği başka aralıklardadır. Somut bir örnek — VAG grubunda (VW, Audi, Skoda, Seat) yaygın olarak kullanılan adresler:
| Modül | İstek | Yanıt |
|---|---|---|
| Motor (ECM) | 7E0 | 7E8 |
| ABS / Fren | 713 | 77D |
| Airbag | 715 | 77F |
| Gösterge paneli | 714 | 77E |
| Gateway | 710 | 77A |
| Direksiyon açı sensörü | 751 | 7BB |
Dikkat edin: airbag 715'te, yani standart emisyon aralığının tamamen dışında. Sadece 7DF yayınına güvenen bir tarayıcı bu modülün varlığından bile haberdar olmaz.
Bu adreslerin marka bazında toplanması gereken bir bilgi olması işin zahmetli kısmıdır. CarCoding'in adres haritasında bugün 19 marka grubu için toplam 682 adres kaydı var: BMW için 105, Mercedes için 68, VW ve Audi için 54'er, Ford için 49, Hyundai/Kia için 41, Toyota için 37 adres denenir. Marka tanınmazsa 21 adreslik jenerik liste kullanılır. Tarama, cevap vermeyen adresi kısa zaman aşımıyla geçer; bu yüzden çok modüllü bir araçta tarama tek komuttan uzun sürer — bu bir yavaşlık değil, kapsam bedelidir.
İkinci katman: gateway duvarı ve tester adresleme
Bazı üreticilerde işin doğrudan adreslemeyle de bitmediği bir aşama vardır. Konfor ve gövde modülleri OBD soketinin bağlı olduğu CAN hattında değildir; ayrı bir hatta oturur ve arada bir gateway vardır. Gateway, dışarıdan gelen isteklerin çoğunu içeri geçirmez. Doğru kimliği bilseniz bile yanıt alamazsınız, çünkü isteğiniz duvara çarpar.
BMW F/G serisi bunun en yaygın örneği. Buradaki çözüm, isteği modülün kimliğine değil, tek bir “tester” kimliğine yazıp hedef modülü ayrı bir adres byte'ıyla belirtmektir. Kabaca sıra şudur:
- Tester kimliği:
ATSH6F1— bütün istekler 0x6F1'den çıkar (0x6F1, tanı cihazının kendi kimliğidir). - Yanıt filtresi:
ATCF600+ATCM700— 0x600–0x6FF aralığındaki yanıtlar kabul edilir. - Hedef modül:
ATCEA<adres>— CAN genişletilmiş adresleme ile modülün tek byte'lık tanı adresi verilir. ÖrneğinATCEA72far/ayak aydınlatma modülünü (FRM) hedefler. - Yanıt: ilgili modül
0x600 + adreskimliğinden döner; FRM için 0x672. Çerçevenin başındakiF1byte'ı “bu yanıt tester'a ait” demektir ve ayrıştırıcı tarafından atlanır.
Bu sıra CarCoding'de canlı bir 2016 BMW F36 üzerinde doğrulandı. Denenen 38 modül adresinden 11'i gerçekten yanıt verdi: motor (DME), şanzıman (EGS), DSC (ESP/ABS), EPS (direksiyon), BDC/FEM (gövde alan denetleyicisi), KOMBI (gösterge), NBT (multimedya), ACSM/IHX (airbag-güvenlik tarafı) ve diğerleri. FRM modülünden okunan 5 gerçek arıza kodu, aynı araçta standart 03 taramasında hiç görünmüyordu.
Yani “araçta kod yok” cevabı ile “araçta 5 kod var” cevabı arasındaki fark, tek bir adresleme kararıydı.
Neden herkes bunu yapmıyor?
Çünkü genel değil. Her marka aynı kalıbı kullanmaz; kalıbı kullananların adres tabloları da birbirinden farklıdır. Bu tabloyu üretmenin tek dürüst yolu gerçek araçta ölçmek ya da güvenilir açık kaynaklara dayanmaktır. CarCoding'in BMW adres listesi OVMS projesinin ECU tanımlarıyla hizalandı, ardından araçta doğrulandı — hangi adresin canlıda yanıt verdiği kaynak kodda tek tek işaretlidir.
Dürüst sınırlar: ELM327 ile her yere gidilemez
Burada abartmamak gerekiyor. Elinizdeki adaptör ne olursa olsun ulaşamayacağınız yerler var:
- Eski VAG TP2.0 hattı: CAN üstünde çalışan ama ISO-TP olmayan, kendi taşıma protokolüne sahip bir yapı. ELM327 firmware'i bunu konuşmaz.
- Ford / Mazda MS-CAN: gövde modülleri 125 kbit/s'lik ayrı bir hattadır ve OBD soketinin standart pinlerine bağlı değildir — pin köprülemesi gerektirir, yazılımla çözülmez.
- Yeni nesil DoIP araçlar: tanı, CAN yerine Ethernet üzerinden yürür. Klasik ELM327'nin fiziksel katmanı buna uygun değildir.
- Kodlama/programlama yazma işlemleri: okuma başka, yazma başkadır. Birçok modül yazma isteğini SecurityAccess (kimlik doğrulama) olmadan reddeder ve bu algoritma markaya özeldir. Kendi ölçümümüzde bir BMW FEM modülüne yapılan zararsız yazma denemelerinin tamamı
NRC 0x33 securityAccessDeniedile geri döndü. Okuma, keşif ve yedekleme çalışıyor; yazma çalışmıyor — ve “çalışıyor” demek dürüst olmazdı.
Bir uygulamanın size “şu modüle ulaşamıyorum” demesi kötü bir haber değildir. Kötü haber, ulaşamadığı halde “sorun yok” demesidir.
Elinizdeki tarayıcı gerçekten modül taraması yapıyor mu?
Uygulamanın iddiasına değil davranışına bakın. Üç işaret:
- Marka/model soruyor mu? Doğrudan adresleme için hangi adres listesinin kullanılacağını bilmek gerekir. Marka sormadan “tüm modülleri tarıyorum” diyen bir uygulama, en fazla jenerik listeyi deniyordur.
- Tarama ne kadar sürüyor? Tek
03komutu bir saniyeden kısadır. Onlarca adres denemek onlarca saniye sürer. Anında biten bir “tam tarama” yayın taramasıdır. - Sonuçta ECU adı yazıyor mu? Kodun yanında hangi modülden geldiği yazmıyorsa, muhtemelen tek bir kaynaktan okunmuştur.
Bir de klasik yanlış pozitif var: adaptörünüz uzun yanıtları taşıyamıyorsa modül gerçekte cevap verdiği halde veri yarım gelir ve “yanıt yok” gibi görünür. Bu ayrı bir konudur ve ELM327 adaptör seçimi yazısında akış kontrolü başlığı altında ölçülmüş örnekleriyle anlatılıyor.
Motor kutusunun ötesine bakın
CarCoding, aracın markasına göre modülleri tek tek adresler, hangi kodun hangi ECU'dan geldiğini yazar ve ulaşamadığı yeri dürüstçe söyler. BMW F/G serisinde gövde ve şasi modülleri için tester adreslemesi devreye girer. Uygulamayı indirmek ücretsizdir.
Bazı gelişmiş özellikler uygulama içi satın alma gerektirir.