kk9vpt Creative Commons License 2007.12.16 0 0 10068
Sziasztok!

 

Nemrég kértem a segítségeteket azzal kapcsolatban, hogy ezt – azt szeretnék módosítani a kocsi elektronikájának egyes részein. Meglepetésemre nemhogy segítséget nem kaptam, hanem gyakorlatilag közösségileg ki lettem utálva a fórumból, hogy „hogyan képzelek én ilyet” vagy „úgysem fog sikerülni”, esetleg „miért nem vettél olyan autót, ami eleve tudja ezt”. Eme rengeteg segítséget felhalmozva döntöttem amellett, hogy akkor nekiállok a dolognak, mivel – hogy egy szintén igen jóindulatú kollégát idézzek – már úgyis gyúrtam „kék váltószoknya feltevésével” az ex–Suzukimra (De lehet, hogy Mutyukit vagy Buzukit írt, mert a C3-ból (is) valóban le kell nézni a Suzukit, ez amolyan indokolt dolog).

Lényeg a lényeg, hogy nekiálltam a dolognak és ugyan bizonyára sokan nem örülnek ennek, de az autó még megy és új ECU (vagy mi a franc ez franciául) sem kellett bele. Egy sem. Milyen kár.

De, hogy valami értelmeset is írjak, járjunk kicsit utána, mi is történt azóta. Persze fórumos szokás szerint csak annyira, hogy másnak nehogy sikerüljön, nekem viszont meglegyen.

A dolog tehát úgy kezdődik, hogy vannak itt valami szakértők, akik azt állították, hogy milyen vicces lesz majd szétverni meg széthegeszteni az ECU-t és nagy nehezen kiszülni belőle a memóriát, majd abból a kódot visszafejteni. Jó magyar szakértők lennének ők, mint akiket a TV-ben nap, mint nap látunk, mert természetesen nem volt igazuk. Illetve részben. Mert ha az ember a motorvezérlésbe szeretne belenyúlni akkor vagy járja ezt az utat, vagy piggy back-el, ami ugye nem szép megoldás, de végül is jó. Bár én egy szóval nem említettem, hogy a motorvezérlésbe akarok belenyúlni, de mindegy. Biztos félreértettek.

Szóval ennek a kísérteties ECU-nak van ám programozható része, illetve ki-, és bemenete, tehát alapvetően akar és tud is velünk kommunikálni, csak a megfelelő nyelvet kell megtalálni. Ez pedig egy kis műszer lenne, ami képes arra, hogy a vezérlő memóriájának egyes részeit írja, illetve olvassa. Utóbbival sokra sajnos nem megyünk, mivel egy assembly kódban az ember ugye nem szívesen turkál, hiszen pár ezer sort értelmezni egy ablaktörlő intervallumkapcsolóhoz bizony túlzás lehet. Helyette inkább csak írjunk. De azért ezt tegyük el backup-nak.

A probléma ezzel pedig az, hogy keresni kell kódot, amit beírhatunk, illetve tudnunk kell, hogyan írhatunk be. Továbbá azt se felejtsük, hogy assembly szintű gépi kóddal nem szeretnénk bajlódni, tehát valami fordító is kell, ami az olvasható kódot „Citroenesíti”. És már kész is vagyunk.

Kicsit a dolog után járva és kevéske Citroenes és egyéb ismerősömet ráállítva az „érdekes” problémára, előkerült pár dolog. Például, - mint kiderült - Magyarországon is van fordító, ami gépi kódot csinál a Citroenhez, az ő sajátságos nyelvéből. Ez már fél siker, elvégre a semmit be tudjuk fordítani, az eredeti program pedig ott figyel az USB kulcson backup-ként, assembly formában. Gondolom mondanom sem kell, hogy „itt-ott” „ilyen-olyan” verziójú kódokat lehet találni. Így pedig már van mit befordítani. Innentől „csak” annyi van hátra, hogy ezekbe beleírjunk és kész is a testre szabott C3.

Ez a folyamat sokkal bonyolultabb, mint gondolnánk, ugyanis ez a „felhasználóbarát” nyelv sem túl magas szintű, így memóriacímeket és alapvető (push, pop és társai) utasításokat bizony izomból kell neki írni. A szintaktikai hibákat viszont megmutatja nekünk, a szemantikait pedig már nem. Köszönhetően az egész rendszer felépítésének (amiről dokumentumot jó magyar szokás szerint szintén „valahonnan” sikerült szerezni) ezzel jól meghülyíthetjük az egész autót. De ami fontos: csak a nem létfontosságú részeit! Tehát az ECU kidobásról és elrontásról keringő pletykák (amik valójában rosszízű megjegyzések voltak) nem igazak. Az ECU-t az dobja ki, aki hülye, vagy aki fizikailag tényleg tönkrevágta (például ész nélkül ki akarta szedni az EPROM-ot, ahelyett, hogy olvasott volna kicsit előtte). Bevallom férfiasan, az egész művelet alatt még csak hozzá se nyúltam az ECU-hoz, annyira nincs ilyesmire szükség.

Tehát akkor, hogyan is lehet hazavágni a kocsi „nem létfontosságú részeit”?

A dolog abból adódik, hogy a memóriának vannak írható részei. Itt vannak eltárolva bizonyos „kommunikációs” változók, amikre írhatunk, vagy kiolvashatjuk értékeiket. Például egy adott memóriacímen található egy változó, ami mutatja hogy az ablaktörlő reléje épp be van-e húzva, vagy sincs (a „szakértőkre” bízom, hogy megmondják ez hány bit-en van ábrázolva). Ezt simán írhatjuk, aztán, hogy igazat írtunk oda be és tényleg töröl, vagy nem, az már más kérdés. Értelemszerűen olyan dolgokat, mint sebesség vagy fordulatszám nem tudunk irkálni.

Az említett változók a memória egy megadott címtartományában helyezkednek el. Ki és bemenethez rájuk kell írni, illetve olvasni belőlük. Ezek értéke kb. 5 ms-onként frissül, de amúgy ez mindegy. Így működik például az a funkció is, ami a váltó hátramenetbe tételekor és az első ablaktörlő működésekor automatikusan törli a hátsó ablakot is. A váltó programja (amihez szintén nem lehet „csak úgy” hozzáférni) kiolvassa erről a memóriaterületről az ablaktörlő állapotára vonatkozó információt. Azt hiszem érthető a lényeg ennyi magyarázatból: ha rossz dolgokat írogatunk át, akkor például véletlen bekapcsolhatjuk a ventillátort, ha az ablaktörlőt elindítjuk, vagy égve maradhat a műszerfal világítás, annak ellenére, hogy mindent kikapcsoltunk. Tehát, ha a változókat rossz címen és rossz értékekkel írjuk, akkor jó nagy kavarodást lehet csinálni. Kézikönyv nélkül esélytelen nekivágni.

Tehát a memóriának vagy egy read-only része (sebesség, kormányszög állás, stb.) és van egy írható-olvasható része, amivel játszhatunk. Utána megadott memóriablokkok következnek az egyes „programok” végrehajtási címének. A vicc kedvéért ezek a blokkok a TOC-hoz hasonlóan kezdőcímmel egy másik blokkban vannak eltárolva és a blokk kezdeti értékét programozáskor kell megadni. Tehát megint csak jó kis zavart lehet kelteni azzal, hogy egy blokkot rossz helyre írunk, és láss csodát: megnyomom a ventillátort, töröl az ablaktörlőJ. Annyi könnyítés van a dologban, hogy a blokkok fix méretűek így „elcsúszva” nem tudjuk a dolgokat bemásolni. Huh. Szóval észnél kell lenni. Nem kell izgulni, így is lesz olyan, hogy dudálás helyett a műszerfal világítás fog bekapcsolniJ.

Maga a programozás sem hab a tortán, mivel egyrészt tudni kell, mikor melyik kimenetet kell írni-olvasni, ugyanis ezeket memóriacímmel kell kezelni. A vicc kedvéért a változók az egész kód elején vannak deklarálva és a program futása közben bizonyos időnként frissülnek (tehát, ha értéket adunk egy változónak az nem íródik közvetlen bele).

Így pedig már eljutottunk a dolog alapjához, ami már csak programozási tudományunk kérdése: írjuk át, amit szeretnénk (merünk). Itt sem ártanak assembly ismeretek, mert a nyelv nem túl magas szintű.

Utána lefordítjuk a kész kódot gépi kódra, és már mehet is be a kocsiba. Nem bonyolult. Akinek van kedve, csinálja meg. De én nem segítek „a Ti érdeketekben”.

 

Én a következő módosításokat alkalmaztam:

Az ablaktörlő nekem túl ritkán törölt. Egy változó értékének módosításával ezt 10%-al sűrűbbre állítottam. Azóta nyilván nem esik az eső, tehát a változó módosítása kihat az éghajlatra isJ.

A km órát átállítottam, hogy hajlandó legyen 1km/h-ként ugrani. Ez kicsit bonyolultabb, mivel az óra időtartamot és sebességkülönbséget is figyel és az alapján dől el, hogy milyen gyakran és mennyit vált.

A légkondit beállítottam, hogy amikor nem AUTO, akkor a kocsi tényleg ne szóljon bele egyáltalán. Ehhez sok kis apróságot kell módosítani, igazi „undorító” munka. Meglátjuk jó-e. Egyelőre annak tűnik.

Meg akartam oldani, hogy mikor éjszakai üzemmódban csak a km óra világít, akkor más ne. Sajnos ezt nem sikerült, a rádió mindig égve maradt.

Nem sípol a kocsi, ha behúzott kézifékkel megyek.

És még pár apróság… De tudom, hogy az egész hülyeség, és minek álltam neki és úgysem fog sikerülni… De most már mindegy, véletlen sikerült. Pedig Nyunyukin tuningoltam váltószoknyát. És flexem se volt. Csak józan eszem…

 

U.I.: És továbbra is hallgassatok a szakértőkre (egymásra), mert ők jól megmondják, hogy miért is hülyeség az egész, sőt lehetetlen. És elnézést azon kevesektől, akik normálisan viselkednek itt, őket nem szeretném bántani (meg mást sem amúgy).