2018. szeptember 26., szerda

Röviden #1

Már régóta terveztem, hogy beszámolok olyan mindennapos apróságokról vagy egy-két korábban említett téma utóéletéről, amelyek önálló posztnak nem alkalmasak, de eddig nem állt össze a fejemben, hogy hogyan lehetne a jelenlegi tematikába beilleszteni. Ezentúl ezekről összefoglalóan, ebben a posztsorozatban fogok írni.

Fogyasztás
Amikor a Kéket megvettem kitűztem egy fogyasztási célt, mely szerint az átlagfogyasztásnak 100 km-re 6.x liternek kell lennie. Sokak szerint ez az érték egy ekkora motorral nem igazán elképzelhető, de én mégsem tartottam lehetetlennek. A cél elérése némileg nehezebb lett, mint korábban gondoltam, mert akkoriban nem számoltam olyan sok extra rövid távval (1-2 km napi többször), ami mostanában meglehetősen sűrűn előfordult. Továbbá abban is rosszul mértem fel a helyzetet, hogy különböző üzemállapotokban (rövid táv / hosszú táv) mennyire jelentős a fogyasztáskülönbség. A korábbi autóknál ez nem volt ennyire nagy mértékű.
A megvétel után jónéhány teletankos mérést végeztem, és jellemzően 7,5-8,5 közötti értékre sikerült kihozni az átlagot, jórészt a felhasználás módjától függően. Ami viszont fontosabb ennél, hogy a board computer által számolt adat mindig 1-2 tizeden belül volt a mérthez képest. Volt hogy kevesebb lett, volt hogy több és volt hogy éppen egyezett. A teletankos mérésről leszoktam és azóta úgy veszem, hogy a mutatott érték a helyes, arra számítva, hogy nagy átlagban az eltérések kiegyenlítik egymást. Hozzáteszem, hogy ez közel sem egy túlságosan komoly cél, inkább csak játék a számokkal, így valójában 1-2 tized ide vagy oda nem számít különösebben.
Idővel tettem még egy fontos észrevételt. Az átlagfogyasztás mérés az akkusaru eltávolításával ugyanúgy nullázódik, mint az összes többi érték, de elindulás után a korábbi átlagtól számolódik tovább, így az adat csak akkor nullázódik, ha én valóban úgy akarom. Annak érdekében, hogy az átlagfogyasztási adatok anélkül legyenek összehasonlíthatók, hogy tudnám a megtett táv milyen körülmények közt telt el rászoktam arra, hogy 10.000 km-t mérjek egyben. Már a harmadik ilyen mérési ciklusban vagyok, de az első eredményét egyszerűen elfelejtettem. A legutóbbi ilyen mérés átlaga 7.8 l/100km lett. Mivel 10.000 km az éves futásom jelentős része, ezért ebben van rövid táv és hosszú táv, tempós haladás és városi tötymörgés, téli nagyon hidegek és nyári nagyon melegek, nyári gumi és téli gumi, klímahasználat, stb...
Csak érdekességképpen, hogy mondjak egy más számára is összehasonlítható adatot, az elmúlt héten volt egy olyan 500 km-es futás (főként autópálya és országút, de nem különösebben kímélően), amelyre önmagában 6,5-6,6 l/100km jött ki. Azt gondolom, hogy ha ezt a távot a legkisebb fogyasztás elérésére törekedve teszem meg (értelmes keretek között), akkor akár 6,0 körül is lehetett volna az átlag.

LED
A nagy lendülettel elkezdődött ledesítés parkolópályára került. Az utoló poszt óta fabrikáltam egy (kettő) helyzetjelzőt előre, de tovább nem haladtam, és most nincs is terítéken a közeljövőben. Igaz a leglényegesebb dolgok már készen vannak. Továbbra is elégedett vagyok vele, és külön kiemelném, hogy eddig egyetlen kreálmány sem ment tönkre. Sem a kapcsolókban lévők, sem a szofiták helyére kerültek, sem a rendszámtábla világítás. Ez idő alatt mindössze 1-2 alkalommal volt szükség a szofita helyettesítőknél az ellenállásláb igazítására. Nem engedett el csak meglazult annyira, hogy az érintkezés nem volt tökéletes. Több év távlatából mondhatom tehát, mind a kialakítás mind a méretezés kiállta az idő próbáját.

Akku
A kis akku derekasan teljesítette a feladatát a nyári és az átmeneti időszakokban, de a melegindítási problémára nem sikerült megoldást találnom (igaz túl sokat nem kerestem), így az elmúlt évben főként a sok rövidtávú használat miatt vissza sem raktam a kicsit nyárra. A nagy akkum viszont pár hónappal ezelőtt végleg tönrement, a cserére pedig egy VARTA C6 Silver Dynamic 52Ah EN 520A típust választottam. Ez ugyan 2 kg-val nehezebb mint a kicsi, de 5-el kevesebb, mint a nagy. Eddig nincs vele semmilyen probléma, de a tél még előttünk áll és ennek bírnia kellene egész évben. A kicsi egyébként stabilan indított 0 °C fokig. 0 °C alatt is próbálkoztam vele néhányszor, de ott már nem volt meggyőző. -5 °C alá nem mentem, de addig nem volt olyan, hogy ne indította volna be az autót.

Felújítás
A felújítás óta már több, mint 20.000 km telt el. 3000 km után megvolt az első olajcsere, de a cserénél a szintérzékelő szenzor meg lett piszkálva, így elkezdett szivárogni az olaj, és eltartott egy darabig míg sikerült rendesen helyreállítani. A második periódusban a fogyasztással kapcsolatban így messzemenő következtetést nem tudtam levonni. Mindössze annyit, hogy jóval kevesebb lett az olajfogyasztás mint előtte, de nem szűnt meg teljesen. Azóta megvolt a harmadik csere is. Itt 6500 km után írta először az alacsony szintet és több lépcsőben töltögettem utána, de végül valamivel több, mint 10.000 km-t elment 1 liter utántöltéssel. 4,75 l volt az alap töltési mennyiség. Ezentúl 5000 km után jobban fogom figyelni a szintet és ha csökkenést látok, akkor töltök a figyelmeztetés megvárása nélkül.

Aygo
Praktikus okokból, elsősorban a helyben szaladgálások kiváltására vettem egy pici autót az elmúlt hónapban.
Eddig nagyon tetszik. Kis motorja ellenére egészen dinamukisan lehet vele autózni, fogyasztása nagyon alacsony, a belső tér meglepően tágas, és a tömegcsökkentési praktikák fantasztikusak.
A Vectra megmaradt hosszútávra és hobbinak.

2018. szeptember 14., péntek

ECU #11

A közel egy éves kihagyás vége felé a motiválatlanság és a reménytelenség idejében arra jutottam, hogy mégiscsak elviszem az autót programozásra valakihez. Egyszerűbb, gyorsabb, valamivel biztosan jobb lenne, utána meg majd leszűröm a tanulságokat. Két kísérletet tettem. Az elsőre szinte szót sem érdemes paztarolni, maradjunk annyiban, hogy elhalt. A második esetben megmondtam pontosan hol tartok jelenleg és mit szeretnék ezután. Bár a megkeresett cég jó nevűnek és nagy tapasztalattal rendelkezőnek számít kijelenette, hogy nem igazán tud a segítségemre lenni. Régi az autó, régen nem foglalkoznak ezzel a típussal és már akkoriban sem tudtak mélyreható módosításokat végrehajtani. Talán-talán lehetne valamit mókolni, de a jóval egyszerűbb munkák is sorban állnak és igazából erre nem lesz idő. Az utóbbi indok teljesen érthető, mert hát ki akarna ugyanazért a pénzért jóval többet dolgozni, számításban véve a bizonytalan végeredményt is. Szomorú, de ez van. Na ezen bosszantottam fel magam és ez adta az újabb lökést a folytatásra. Hiszen már rengeteg mindent tudok, és "csak" néhány térképet kellene még beazonosítanom.

AFR
Előszedtem ismét mindent, nézegettem a visszafejtett kódot, a térképeket, a már korábban említett visszafejtett fájlt, ami alapján az alapjáratot is sikerült kinyomoznom és túrtam ismét a netet. Hamar előkerült egy régi gyanúsítottam a 1309f térkép:


Ez a térkép egyike azon keveseknek, ami szabad szemmel is valami értelmes dolognak látszik. Ez a dolog pedig a levegő-üzemanyag keverékarány más néven air-fuel ratio (továbbiakban csak AFR). Azt mindenki tudja, hogy az ideális keverési arány a sztöchiometrikus arány, melynél 14,7 kg levegőhöz 1 kg üzemanyag társul. Ez különböző üzemállapotokban lefelé és felfelé is eltérhet, amivel könnyen befolyásolható a teljesítmény vagy a fogyasztás és a károsanyag kibocsátás. Habár el lehet térni egészen szélsőséges állapotokig (~6-22) a gyakorlatban leginkább 12-17 között marad az alkalmazott érték. Hiába találtam már meg korábban az alábbi képet, amely nem csak hasonló értékeket mutat, hanem tulajdonképpen magyarázatot is ad a különböző üzemállapotokra, a sajátom első sorában lévő nagyon alacsony értékek elbizonytalanítottak ezért tavaly nem is kísérleteztem ezzel. Hogy ez mekkora hiba volt...





forrás 

A visszafejtett fájlban ez az "Open loop AFR" térkép. És ebben nem az a legérdekesebb, hogy itt is hasonló értékek vannak hanem az, hogy ez szintén egy 9x13-as térkép!

    Vac: 80   70   60   50   40   30   20   10    0 ;Deg C
    FCB 125, 125, 125, 125, 125, 120, 115, 105,  95 ;-40 
    FCB 130, 130, 130, 130, 130, 125, 120, 110, 100 ;-28
    FCB 132, 132, 132, 132, 132, 127, 122, 112, 102 ;-16
    FCB 140, 140, 140, 140, 140, 135, 130, 120, 110 ;- 4
    FCB 145, 145, 145, 145, 145, 140, 135, 125, 115 ;  8
    FCB 160, 160, 160, 150, 145, 140, 140, 135, 130 ; 20
    FCB 160, 160, 160, 150, 145, 140, 140, 135, 130 ; 32
    FCB 160, 160, 160, 150, 145, 140, 140, 135, 130 ; 44
    FCB 160, 160, 160, 150, 145, 140, 140, 135, 130 ; 56
    FCB 160, 160, 160, 155, 150, 145, 140, 140, 130 ; 68
    FCB 160, 160, 160, 155, 150, 145, 140, 140, 130 ; 80
    FCB 160, 160, 160, 155, 150, 145, 140, 140, 130 ; 92
    FCB 160, 160, 160, 155, 150, 145, 140, 140, 130 ;104


Ha elforgatjuk, akkor majdnem minden ugyanúgy jön ki és van végre egy AFR térkép, ahol látok egy 10 alatt értéket. Hogy ne legyen teljesen egyszerű a helyzet itt MAP/CT függvényben vannak ábrázolva az értékek, mindenhol máshol ahol szembe jött egy AFR térkép ott pedig MAP/RPM függvényben. Ráadásul a MAP skála mintha fordítva lenne. Akárhogyis, túl sok az egybeesés. Olyan nincs, hogy ez nem az lesz.
Az ellenőrzés egyszerű. Jelenleg mínuszosak a fuel trim-ek tehát túl sok üzemanyagot kap a motor. Ha az AFR-en dúsítok, akkor azután kevésbé kell mínuszosnak lennie.
A fenti kép jobb szélén a 12202073BZ térképe látható, aminél látható, hogy jóval szegényebb keverékre van állítva és aminek a korábbi fuel trim mérése így nézett ki:


Szegény AFR és itt-ott erősen plusszos fuel trim. Minden stimmel.

Ez az eredeti térkép:
 73     73     73     73     84     84     94     95     88     99    108    100     91
118    118    118    118    119    124    129    132    122    126    133    130    121
126    126    126    126    130    134    135    138    129    132    139    137    131
131    131    131    131    134    138    137    142    136    138    146    144    138
136    136    136    136    136    141    142    146    140    143    151    149    144
138    138    138    138    140    144    146    151    145    147    154    154    150
141    141    141    141    143    148    148    154    148    149    153    153    152
143    143    143    143    145    149    150    154    154    154    157    158    157
147    147    147    147    147    149    152    154    154    155    158    160    160


És ezt csináltam belőle (sárgával kiemelve a változtatások helye):
 88     88     88     88    101    101    103    107    110    119    130    120    109
118    118    118    118    119    119    120    121    122    126    133    130    121
126    126    126    126    126    127    128    128    129    132    139    137    131
131    131    131    131    132    133    134    135    136    138    146    144    138
136    136    136    136    136    137    138    139    140    143    151    149    144
138    138    138    138    140    141    142    143    145    147    154    154    150
141    141    141    141    143    145    148    154    148    149    153    153    152
143    143    143    143    145    149    150    154    154    154    157    158    157
147    147    147    147    147    149    152    154    154    155    158    160    160


Az első sor extrém értékeit kicsit kevésbé extrémre vettem és a közepén lévő púpot elsimítottam.
Volt egy módosítás előtt végzett mérésem, aminél ezek a long term fuel trim értékek:
AFROriginal
[[   0  800 1300 1800 2300 2800 3300 3800 4300 4800 5300 5800 6300 6800]
 [  12   -5   -2   -2   -2   -2   -2   -2   -3   -3 1111 1111 1111 1111]
 [  23   -5   -1   -2   -2   -5   -6   -5   -7   -1   -6 1111 1111 1111]
 [  34   -2   -1   -2   -4   -6   -2   -4   -6   -7 1111 1111 1111 1111]
 [  45    0   -1   -2   -3   -6   -4   -6   -6   -7 1111 1111 1111 1111]
 [  56    0   -1   -2   -3   -7   -4   -6   -5 1111 1111 1111 1111 1111]
 [  67    0   -1   -2   -5   -5   -8 1111   -7 1111    0 1111 1111 1111]
 [  78 1111   -1   -2   -5   -7   -6   -7   -7   -7    0 1111 1111 1111]
 [  89 1111   -1   -2   -4   -7   -6   -3   -6   -2    0 1111 1111 1111]
 [ 100 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] B1 Long Term Fuel Trim (Bank 1)


Változtatás után pedig ez lett belőle: 
AFRCandidate1
[[   0  800 1300 1800 2300 2800 3300 3800 4300 4800 5300 5800 6300 6800]
 [  12   -2   -1   -1   -1   -1   -1   -1    0    0   -1    0 1111 1111]
 [  23   -3   -1   -2   -1   -2   -1   -2   -1 1111   -1 1111 1111 1111]
 [  34   -2   -2   -2   -2   -1   -1   -2 1111   -6 1111    0 1111 1111]
 [  45   -1   -2   -2   -2   -2   -2   -2   -3   -4   -5 1111 1111 1111]
 [  56    0   -2   -1   -2   -2   -5   -4   -3    0 1111 1111 1111 1111]
 [  67   -1   -2   -1   -2   -2   -5   -7 1111 1111 1111 1111 1111 1111]
 [  78    0   -2   -1   -2   -7   -7   -6   -6   -3    0    0    0 1111]
 [  89 1111   -1   -2   -3   -5   -5   -4   -2   -1    0    0    0 1111]
 [ 100 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] B1 Long Term Fuel Trim (Bank 1)


Semmi megdönthetetlen bizonyíték, de éppen ott a közepén kevésbé lett mínuszos. (A MAP tengely ezen is fordított a feltételezetthez képest.) Érzetre is mintha egy kicsit jobb lett volna a módosítás után, de semmi eget rengető.
A teszkör és némi ide-oda mászkálás után nem is használtam az autót egy pár napig. A következő alkalommal azonban teljesen ledöbbentem. Egészen megváltozott az autó viselkedése, a középső fordulatszám tartomány teljesen kisimult, sokkal egyenletesebben és sokkal erőteljesebben reagált a gyorsításoknál. Alig akartam elhinni és csak nehezen tudtam kiszállni az autóból. :) Régen éreztem ilyen mértékű változást. A következő napokban volt alkalmam több száz km-t megtenni egészen változó körülmények között és a hatás végig jelen volt. Sokkal jobb lett.

Nem hagytam azonban ennyiben, mert főleg a felsőbb fordulatszám tartományban vannak túl szegény állapotok, ezért szinte az egész térképet átírtam:
100    105    110    115    120    125    128    128    128    128    128    128    128
118    118    118    120    120    125    128    128    128    128    128    128    128
126    126    126    126    126    127    128    128    128    128    128    128    128
147    130    129    128    128    128    128    128    128    128    128    128    128
147    140    140    140    140    140    140    140    133    133    133    133    133
147    140    140    140    140    140    140    140    140    140    140    140    140
147    147    147    147    147    147    147    147    147    147    147    147    147
147    147    147    147    150    150    155    155    155    155    155    155    155

147    147    147    147    150    150    155    155    155    155    160    160    160


Sok szempontot próbáltam figyelembe venni, de elsősorban az egyenletes átmenetre fókuszáltam a különböző értékek közt. Az írás során akadt egy apróbb malőr (lentebb), de a tesztkörön a fuel trim-ek látszólag még jobban kezdenek a 0-hoz igazodni. Apró öröm volt ez amellett, hogy az újonnan nyert dinamizmust az újabb módosítással kukáztam.
AFRCandidate2
[[   0  800 1300 1800 2300 2800 3300 3800 4300 4800 5300 5800 6300 6800]
 [  12   -3   -1   -1   -1   -1   -2   -2   -2   -1 1111 1111 1111 1111]
 [  23   -3   -1    0   -2   -2   -2 1111   -2 1111 1111 1111 1111 1111]
 [  34   -1   -1    0   -2   -1 1111 1111 1111   -2 1111 1111 1111 1111]
 [  45    0   -2    0   -1   -1 1111   -1 1111 1111 1111 1111 1111 1111]
 [  56    0   -1    0    0   -3 1111 1111   -1 1111 1111 1111 1111 1111]
 [  67    0    0    0    0   -2   -5 1111 1111 1111 1111 1111 1111 1111]
 [  78 1111    0    0    0   -4   -5   -6   -3 1111 1111 1111 1111 1111]
 [  89 1111 1111   -1   -2   -4   -5   -3   -2    0    0    0 1111 1111]
 [ 100 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111]] B1 Long Term Fuel Trim (Bank 1)


A változás helyéről ugyan nem ad képet, de így néz ki idővonalon a 3 egymás mellett:



80km kellett hogy ismét beálljon minden, ami alatt elég sokminden megfordult a fejemben, de a hatás ismét elképesztő lett.

Eljött az ideje, hogy ismét gyorsulást mérjek és nagyon csalódott leszek, ha nem lesz majd súlyos tizedekben mérhető javulás.

Mi a baj ezzel az egésszel?
Csak annyi, hogy ez elvileg "open loop AFR", tehát elméletileg amikor ez a tábla alkalmazva van, akkor nem jön visszacsatolás a lamdba felől. Mégpedig azért, mert ez egy keskenysávú (narrow band) lambda szonda, ami a technolgiából adódóan csak 14,7 körüli értéknél tud megbízhatóan mérni. Az ettől jelentősen eltérő AFR-ek esetében a befecskendezési időket számolja át úgy, hogy az elvárt értékeket hozza. Erről azonban a szonda nem képes visszajelzést adni, így nem biztos, hogy a kalkulált érték megfelel a valóságnak.
A naplózott adatok alapján a fuel trim értékek csak 100%-os pedálállásnál szűnnek meg, 99%-nál és alatta folyamatosan érkeznek, márpedig ha ez így van, akkor visszacsatolás a teljes gázadás (full open throttle) kivételével mindig van. Az említett hatás egyértelműen nem csak padlógáznál jelentkezik, és a fuel trim értékek változását sem tekinteném véletlennek, így két eset lehetséges:
- ez vagy nem AFR tábla,
- vagy némileg máshogyan működik, mint az a fentiekből következne.
Én az utóbbira tippelek.

Brick
Nem tudnám megmondani, hogy mennyi újraíráson vagyok túl, de azt hiszem minimum több tucatnyi. Mindig megpróbálok a legóvatosabban minden részletre figyelve és nem megszokásból eljárni. Most mégis megtörtént, ami eddig soha. Az AFR második módosításának felírásakor, az írás kezdete után szinte azonnal véletlen kézmozdulatból adódóan hozzáértem egy billentyűhöz. A program semmit nem kérdezett, de az előzőleg választott járműlista megváltozott. Nem akartam tetézni a bajt ezért semmi mást nem nyomkodtam. Gondoltam, ha befejezi az írást majd megnézem, de hiába vártam hosszú perceket csak nem akart a folyamatjelző elmozdulni a 2%-ról. Itt már tudtam, hogy baj lesz. Jobb ötletem nem lévén megszakítottam az írást. Ez az egyetlen amit egyébként semmilyen körülmények közt nem szabad, de tovább várni sem tűnt eredményesnek. Nem nehéz kitalálni mi lett a vége. Se kép se hang. Az ECU nem reagált semmire. Az ID kiolvasása sikertelen lett, az újraírási kísérlet hibára futott. OPCOM sem tudott kapcsolatba lépni vele, lekerült az akkusaru is, és előkerült a KESS is, ami szintén nem tudta írni még a recovery funkciójával sem.
Tragédia persze nem történt, mert az eredeti ECU továbbra is a szekrényben pihen, de mondjuk úgy, hogy nem voltam boldog. Az internet viszont ismét a segítségemre sietett. Bár a legtöbb helyen azt írják szervíz, szétszedés, kiforrasztás, stb, azért rátaláltam arra, hogy az MPPS-nek is van recovery funkciója. Itt:



 


Beállítás után simán ment a felírás és minden működött tovább.
Nem próbálnám ki ismét, de ez egy újabb példa, hogy szinte minden helyzetből van visszaút. Én azért továbbra is ajánlom a tartalék ECU-t.

2018. szeptember 4., kedd

ECU #10

Ahogyan egyre jobban bonyolódnak a dolgok, úgy élek majd egyre több feltételezéssel, amit a megadott helyen is igyekszem hangsúlyozni. Azonban most így külön is szeretném kiemelni, hogy a leírtakban előfordulhatnak téves információk, megállapítások vagy következtetések. Javaslatokat vagy kiigazítást a továbbiakban is örömmel veszek.

EGR bypass
A checksum számítás megoldása után nagy lendülettel folytattam a kód visszafejtését. Továbbra is az EGR felé fordítottam a figyelmemet. A biztos pont itt az EGR térkép volt, amit már korábban sikerült beazonosítani, viszont apróbb fennakadást okozott, hogy a térkép kezdetét jelző cím (A2C2) nem szerepelt sehol sem a kódban. Ezt már korábban több térkép esetben is észleltem és nem igazán tudtam reális magyarázatot találni rá. Találtam viszont egy olyan szubrutint, ahol a 1315a térkép utáni első offset címe (C365) bukkan fel:

.data:00041376 48 e7 e4 40                      moveml %d0-%d2/%d5/%a1,%sp@-               
.data:0004137a 08 38 00 06 8c 29                btst #6,0xffffffffffff8c29        # test condition1 to bypass EGR
.data:00041380 67 00 01 b6                      beqw 0x00041538                # branch to the end of this subroutine
.data:00041384 08 38 00 00 8c 32                btst #0,0xffffffffffff8c32        # test condition2 to bypass EGR
.data:0004138a 66 00 01 ac                      bnew 0x00041538                # branch to the end of this subroutine
.data:0004138e 45 f9 00 00 c2 9e                lea 0x0000c29e,%a2
.data:00041394 76 f8                            moveq #-8,%d3
.data:00041396 4e b9 00 02 2a ec                jsr 0x00022aec
.data:0004139c 42 44                            clrw %d4
.data:0004139e 18 38 8c b4                      moveb 0xffffffffffff8cb4,%d4
.data:000413a2 0c 04 00 e0                      cmpib #-32,%d4
.data:000413a6 63 04                            blss 0x000413ac
.data:000413a8 38 3c 00 e0                      movew #224,%d4
.data:000413ac e9 4c                            lslw #4,%d4
.data:000413ae f8 39 41 00 00 00 c3 65          tblub 0x0000c365,%d4
...


A fenti nem a teljes szubrutin, mert az egész kicsit hosszú lenne és a lényeg úgyis ebben van. A TBL utasításokat kevesebb irodalom jegyzi, mint az általánosakat, de a "MOTOROLA M68000 FAMILY Programmer’s Reference Manual"-ban természetesen megtalálható: "TBLS, TBLSN, TBLU, TBLUN - Signed/Unsigned Table Lookup and Interpolate"
Az ECU a térképeken nem található értékeket a szomszédos értékek interpolációjával számolja. Tehát ez az utasítás jól illik a képbe.

Nem vagyok benne biztos, de azt gondolom, hogy a veremkezelés LIFO (Last In First Out) jellegéből adódik, hogy nem a térkép kezdete, hanem a vége szerepel a kódban. Azóta nagyon sok általam korábban megtalált térképre való hasonló (vége utáni első offset) hivatkozást találtam. Ez az oka vagy sem az biztos, hogy a továbbiakban erre figyelni kell.

Az adott szubrutin vizsgálatával sokat nem foglalkoztam, mert a tartalmánál jóval érdekesebb az, hogy hogyan lehet elkerülni a futását. Az látszik, hogy az elején rögtön két feltételt vizsgál és ezek teljesülése/nem teljesülése esetén rögtön a szubrutin végére ugrik. A feltételek címe azonban nem 0x000... hanem 0xfff... formátumú. Ez nem a programkódban, hanem a memóriában megtalálható információ. A kísérlet, hogy megtudjam mit tárol az adott memóriaterület hamar kudarcba fulladt. Sok helyen van rá hivatkozás és átláthatatlan mi mikor hova kerül. Később arra jutottam, hogy ezek nem is feltétlenül számolt értékek, hanem lehetnek akár szenzorok vagy működtető/beavatkozó egységek is. Ugyanis az már egy ideje feltűnt, hogy a rengeteg művelet között nem látok egyet sem, ami az egyes egységeket vezérelné vagy azoktól információt szerene be. Mégpedig azért, mert az M68k processzorok úgynevezett memory-mapped I/O technikát alkalmaznak, aminek az a lényege, hogy a különböző egységek egy-egy memóriaterülethez vannak társítva, és minden I/O művelet az ezekhez köthető utasításokból áll. Jelentősen megkönnyítené a dolgom, ha tudnám, hogy melyik memóriaterület melyik egységet azonosítja, de ezekből a memóriahivatkozásokból a kódban több ezer különböző szerepel. Szinte lehetetlen csak úgy próba szerencse alapon megfejteni, ezért próbáltam egy olyan logger-t keresni, amivel talán ki lehetne túrni ezt az OBD2 kommunikációból, de már a keresés sem hozott sikert.
A kódrészlet elején található két feltétel egyébként teljesen logikusan lehetne például a vízhőmérséklet (CT) vagy levegő-hőmérséklet (IAT) vizsgálat, de fogalmam sincs, hogy valóban az-e vagy sem. Ezek után már csak egyetlen esély maradt. Meg kell akadályozni a szubrutin elindulását, amibe szerencsére csak egyetlen helyről lép be a program, közvetlenül egy kódban letárolt érték (D3F3) vizsgálata után:

.data:000412b6 08 39 00 00 00 00 d3 f3          btst #0,0x0000d3f3                    # EGR bypass switch
.data:000412be 66 38                            bnes 0x000412f8                        # branch to 0x000412f8 if 0x0000d3f3 != 0
.data:000412c0 61 00 00 b4                      bsrw 0x00041376                        # branch to EGR subroutine
.data:000412c4 08 39 00 00 00 00 80 1f          btst #0,0x0000801f
.data:000412cc 66 2a                            bnes 0x000412f8
.data:000412ce 08 38 00 03 80 1d                btst #3,0xffffffffffff801d
.data:000412d4 67 0e                            beqs 0x000412e4
.data:000412d6 08 38 00 06 89 48                btst #6,0xffffffffffff8948
.data:000412dc 67 06                            beqs 0x000412e4
.data:000412de 16 38 89 49                      moveb 0xffffffffffff8949,%d3
.data:000412e2 60 14                            bras 0x000412f8
.data:000412e4 08 38 00 04 80 1d                btst #4,0xffffffffffff801d
.data:000412ea 67 0c                            beqs 0x000412f8
.data:000412ec 08 38 00 06 89 4e                btst #6,0xffffffffffff894e
.data:000412f2 67 04                            beqs 0x000412f8
.data:000412f4 16 38 89 4f                      moveb 0xffffffffffff894f,%d3
.data:000412f8 08 39 00 00 00 00 d3 f3          btst #0,0x0000d3f3
.data:00041300 67 04                            beqs 0x00041306
.data:00041302 16 38 8e f4                      moveb 0xffffffffffff8ef4,%d3
.data:00041306 11 c3 92 5d                      moveb %d3,0xffffffffffff925d


A feltétel azt vizsgálja, hogy a tárolt érték 0-val egyenlő-e és ha nem, akkor egyszerűen kihagyja az EGR szubrutin futását. Ennek az lehet az előnye a térkép nullázással szemben, hogy egyrészt nem számoltatjuk az ECU-t feleslegesen a 0 értékekkel, másrészt kihagyhat egyéb korrekciós módosításokat is, harmadrészt talán végre ki lehetne szedni magát az EGR szelepet hibajelzés nélkül. Utóbbira vonatkozó reményem hamar szertefoszlott, amikor összehasonlítottam a 12594690-es szoftver verzióval, amelyben gyárilag nem működik az EGR. Abban ugyanis ugyanúgy 0, mint az én eredetimben. Sőt minden más nálam lévő binárisban is. A D3F3 címhez nem kötődik semmilyen más művelet a kódban ezért semmi nem akadályozott, hogy kipróbáljak egy módosítást. Fogtam az eredeti binárist és csak ezt az egyetlen bitet írtam át (az EGR térkép maradt gyári állapotban).
Minden a várakozások szerint alakult egyetlen kivétellel. Az EGR valóban nem mutat semmilyen aktivitást, de a csatlakozó lehúzása után jön a hibajelzés. :(
Ez a harmadik módszer (térkép, későbbi gyári ecu, bypass), amivel ki tudom iktatni az EGR működését, de úgy néz ki kell lennie legalább még egynek. Arra vonatkozólag nincs ötletem, hogy mi az eredeti célja a D3F3 helyen tárolt értéknek.

Ez a módosítás még tavaly ősszel történt, ami után egy kicsit felhagytam a további kísérletekkel, viszont azóta végig ezzel futott az autó. Ez idő alatt pedig semmilyen negatív hatást nem tapasztaltam. Ilyen hosszú és ennyire változó körülmények közt zajló teszt még semmelyik másik módosítás után nem történt. Amíg nem találok jobb módszert, addig továbbra is ezt fogom használni a térkép nullázás helyett.

A leállásomnak egyébként nem volt semmilyen rendkívüli oka, egyszerűen csak mással is kellett foglalkoznom, aztán ahogy egyre több idő telt el a lelkesedésem is alábbhagyott. Az idei év elején egyszer megpróbáltam ismét felpörgetni magam, de minden további eredmény nélkül elhalt az a próbálkozás. Sokszor éreztem, hogy nem lesz már erőm többször belefogni, mert nem csak nagyon nehéz ez az egész, hanem mérhetetlenül időigényes is. Nem beszélve arról, hogy ennyi idő alatt már sokmindent felejtettem is. Aztán jött egy szikra és most ki tudja meddig, de ismét csinálom. Egy poszt még biztosan lesz ebben a témában, mert megint találtam valami újat. :)