2019. január 1., kedd

ECU #14

Nagyjából 1 hónapos szünet után ismét használható lett a Kék. Valóban a kinyomócsapágy volt a rossz. Nem szeretnék 1-2 év múlva (ismét) hasonló problémába belefutni, így cseréltettem mindent. LUK tárcsa, szerkezet és kinyomócsapágy. Nagyon remélem, hogy most már egy jó ideig (=soha, mivel valószínűleg nem fog nálam még 50-100e km-t sem futni) nem kell majd hozzányúlni.

Mielőtt elvittem a szerelőhöz járó motornál nézegettem ezt-azt a motortérben és felfedeztem, hogy szívórészen az egyik lezáró gumicsonk elrepedt és fals levegőt szívott. Könnyen és tartósabb megoldással orvosoltam, de a leginkább bosszantó, hogy nem tudom mióta lehetett jelen a probléma, mert így a korábbi mérések értékei is tévesek lehetnek. A közvetlen előtte és közvetlen utána mért eredmények a kövekezők (nem volt programmódosítás közben). Az újnál az alsóbb tartományokban alacsonyabb terhelésnél jóval nagyobb mínusz értékek keletkeztek a fuel trim-hez, így biztosan volt egy kis hatása.

Livedata_2001 (1)_Vectra-B_Engine__Z 22 SE_201811011107.csv / 09391263BA / RPMxMAP / 17x14 / B1 Long Term Fuel Trim (Bank 1)
[[   0    0  400  800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400]
 [   9    -    -    -    -    -    -    -   -3   -3   -3    -    -    -    -    -    -    -]
 [  16    -    -    -   -3   -3   -2   -2   -2   -2   -3   -3   -3    -   -2    -    -    -]
 [  23    -    -   -7   -5   -1    0   -2   -2   -2   -3   -3   -2    -   -6    -    -    -]
 [  30    -    -   -4   -5   -1   -1   -2   -2   -3   -3   -3   -4    -   -5    -    -    -]
 [  37    -    -   -3   -1   -2   -2   -2   -3   -3   -3   -4    -   -3   -8    -    -    -]
 [  44    -    -   -2   -1   -2   -2   -2   -4   -3   -3   -2   -1   -6   -8    -    -    -]
 [  51    -    -    0    0   -3   -2   -2   -3   -3   -3   -2   -2   -4    -    -    -    -]
 [  58    -    -    0    0   -3   -1   -2   -3   -3   -4   -2   -2   -7    -    -    -    -]
 [  65    -    -   -1    0   -2   -1   -1   -3   -4   -4   -4   -7    -    -    -    -    -]
 [  72    -    -    1    0   -2   -1   -1   -3   -4   -4   -3   -2   -6    -    -    -    -]
 [  79    -    -    2   -1   -2   -1   -1   -2   -4   -5   -6   -1   -7   -3    -    -    -]
 [  86    -    -    1   -2   -2   -1   -1   -3   -4   -4   -6   -7   -6    -    -    -    -]
 [  93    -    -    -    -   -2   -1   -2   -3   -4   -4   -6   -7   -8   -2    -    -    -]
 [ 100   -2    -    -    -    -   -2   -2   -3   -4   -4   -4   -1    0    -    -    -    -]] average


Livedata_2001 (1)_Vectra-B_Engine__Z 22 SE_201812081446.csv / 09391263BA / RPMxMAP / 17x14 / B1 Long Term Fuel Trim (Bank 1)
[[   0    0  400  800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400]
 [   9    -    -    -    -    -   -3   -3   -3   -3   -3    -   -3   -3    -    -    -    -]
 [  16    -    -    -   -4   -4   -3   -3   -4   -4   -4   -4   -4   -4   -4   -4    -    -]
 [  23    -    -   -7   -7   -5   -3   -4   -4   -5   -5   -5   -5    -   -4    -    -    -]
 [  30    -    -   -5   -7   -6   -4   -5   -5   -5   -2    0   -2   -3   -4    -    -    -]
 [  37    -    -   -6   -4   -7   -4   -4   -6   -3   -3    -   -3   -5   -4    -    -    -]
 [  44   -4    -   -5   -2   -7   -3   -2   -3   -2   -2   -2   -3   -2    -    -    -    -]
 [  51    -    -    -   -2   -6    0    0   -3   -2   -2   -2   -4   -4    -    -    -    -]
 [  58    -    -   -2    -   -4    2   -1   -2   -2    -    -   -2    -    -   -2    -    -]
 [  65    -    -    -   -4    0    2    0   -2   -2   -2   -1   -3   -4    -    -    1    -]
 [  72    -    -    -    -    0    2   -1   -3   -2   -3   -2   -2   -4    -    0    -    -]
 [  79   -4    -    -    -    1    2    0   -1   -3   -3   -2   -3   -5   -3    0    -    -]
 [  86    -    -    -    -    0    3   -1   -3   -3   -2   -1   -4   -3   -1    0    0    -]
 [  93    -    -    -    -   -1    1    0   -2   -2   -2   -1   -2   -2   -1    0    0    -]
 [ 100   -4    -    -    -   -3    -    0   -2   -3   -2    0    -    -    -    -    -    -]] average

 
Oliver
Végre kipróbálhattam a realtime funkciót. Úgy működik ahogy vártam, igazán nagy segítség a mérés közben. Eddig csak reménykedtem egy-egy mérésnél, hogy az összes tartományhoz keletkeztessek adatot, most viszont menet közben látom, ha valahol még hiányos és azonnal tudom korrigálni.
Fejleszettem egy funkciót, amely az élőadat alapján automatikusan korrigálja a VE táblákat. A funkció logikailag jól működik, de továbbra sem ismerem a tengelyértékeket, így nem képes megfelelő eredményt adni. Ha ez meglesz, akkor nagyon kényelmes lesz néhány gombnyomással beállítani az elméletileg optimális értékeket.
Többet nem foglalkoztam vele és most egy kicsit háttérbe is fog szorulni.

Speedster/Vx220
Végre sikerült kapnom egy eredeti Speedster/Vx220 binárist. (Köszönöm!) Legnagyobb meglepetésemre, azonban a korábban rendelkezésemre állóval nagymértékű hasonlóságot mutat. Mindösszesen néhány térképben van eltérés, amit én gyújtás (SA) térképeknek gondolok. A sajátomra ezt idő hiányában nem írtam fel, de frissítettem az összehasonlító táblázatot az újabb adatokkal. Mint később kiderült ez részben hiábavaló volt.

Az EGR teljes kiiktatása
Nem sokkal később váratlanul ismét óriási segítséget kaptam. (Ezt is nagyon köszönöm!) Elküldték számomra a TIS-ből kiexportált összes(?) gyári firmware-t. Ez összesen 24db, és van hozzá minimális leírás is. Igazából leginkább két olyan egymást követő változatot akartam, aminél még nincs és aminél már ki van kapcsolva az EGR. Sajnos nem volt olyan egyszerű a helyzet, mint reméltem. Egyrészt nincs két olyan változat, aminél csak ennyi lenne a különbség, másrészt a különbségek elég nagy mértékűek, harmadrészt nem csak az értékek hanem azok helye is változik, aminek következtében a közvetlen összehasonlítás gyakorlatilag lehetetlen, negyedrészt a leírások és a verzió számozások nem minden esetben egyértelműek.

Ennek ellenére sikerült kiszúrni egy viszonylag nagyobb egységet (0xccf0-0xcd33), ami minden EGR-el nem rendelkező binárisban azonos.
Ilyen az eredetiben:
14 50 31 00 16 16 16 16 FD FF 00 00 00 FF 13 EC 35 01 1D 1A 1D 1A FE FE 00 00 00 FF 00 00 6C 03 28 02 24 90 60 52 45 40 40 40 40 40 40 40 40 40 40 40 4D 50 5A 65 70 7D 88 92 9D A0 A3 A3 A3 A3 A3 28 64 00
És ilyen ott, ahol nincs EGR:
00 00 FF 00 16 16 16 16 FD FF 00 00 00 FF 13 EC FF 01 1D 1A 1D 1A FE FE 00 00 00 FF 00 00 6C 03 28 02 24 90 60 52 45 40 32 32 32 40 40 40 40 40 40 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 28 FF FF
    
A kiemelt rész elején van néhány bájt ami eltér, utána viszont majdnem egészen a végéig egyforma és a végén szintén különözik. Valahogy nem illett a képbe, mert én csak egy 1 bájtos értéket kerestem, mivel egy ki-be kapcsoló nem lehet túl hosszú. Azonban az ezekre a területekre való hivatkozások az assembly kódban azokban a szubrutionokban vannak, ahol a EGR térkép és a korábban megtalált bypass switch is. Innen mondjuk azt, hogy túl sok véletlen egybeesés. Felírtam és kipróbáltam úgy, hogy a bypass switch-et visszaállítottam eredetire. Az EGR valóban nem működött, de a szelep lehúzását követően ismét jött a hibakód.
Ezek után már kezdtem eléggé elbizonytalanodni, hogy az alap feltételezésem valóban helytálló-e miszerint a kikapcsolás a 0x8000-0x17fff szekcióban valósul meg, pusztán 1-2 bájtnyi érték megváltoztatásával, a változtatás minden EGR-el nem rendelkező binárisban ugyanolyan és minden EGR-el rendelkezőben eltérő.

Ismét írnom kellett egy szkriptet. Fogtam 10 binárist amiben nincs EGR és 5-öt amiben van. A két csoportot először önmagával majd a másik csoporttal hasonlítottam össze. Az offset eltérést a szkriptben könnyű volt korrigálni.
Az összes kumulált eltérés mindössze ennyi:
0x8005 c0 <----> 0x8005 bf
0x8f72 00 <----> 0x8f72 41
0x8f73 0a <----> 0x8f73 ff
0x9be2 60 <----> 0x9be2 00
0x9be3 33 <----> 0x9be3 00
0x9be4 14 <----> 0x9be4 00
0xcea0 00 <----> 0xcea0 14
0xcea1 00 <----> 0xcea1 50
0xcea2 ff <----> 0xcea2 31
0xceb0 ff <----> 0xceb0 35
0xced2 ff <----> 0xced2 4d
0xced3 ff <----> 0xced3 50
0xced4 ff <----> 0xced4 5a
0xced5 ff <----> 0xced5 65
0xced6 ff <----> 0xced6 70
0xcee2 ff <----> 0xcee2 50
0xcee3 ff <----> 0xcee3 39
0xdc92 fc <----> 0xdc92 1c
0xdcc0 61 <----> 0xdcc0 e1
0xec7a 00 <----> 0xec7a 01
0xec7b f0 <----> 0xec7b 77
0xec7e 78 <----> 0xec7e 96
0x107fc a4 <----> 0x107fc 3c
0x107fd 0f <----> 0x107fd b4
0x10801 c0 <----> 0x10801 ba
0x10802 0f <----> 0x10802 51
0x10803 a9 <----> 0x10803 33
0x1080a 35 <----> 0x1080a 32
0x1080b 38 <----> 0x1080b 31
0x1080c 36 <----> 0x1080c 30
0x1080d 39 <----> 0x1080d 34
0x1080e 32 <----> 0x1080e 38
0x1080f 31 <----> 0x1080f 33
0x109ec 66 <----> 0x109ec f3
0x109ed 66 <----> 0x109ed 33
0x109ee 49 <----> 0x109ee a6
0x109ef 99 <----> 0x109ef 67


Ezekből a 0xcea0-tól kezdődő rész a fent említett 0xccf0-val egyezik meg, a 0x10[78]xx valamilyen szemmel is olvasható verziómegjelölés, néhány másik egy-egy további azonosított térképbe illekszedik és van amire pedig nincs az assembly kódban hivatkozás. Alig maradt tehát valami. A győztes végül a 0xdc92, ami az én változatomban 0xdae2.
A dolog érdekessége, hogy már korábban is egy olyan értéket kerestem, amit a btst utasítással vizsgál és ebből mindössze 12 olyat találtam, ami a korábbi két változatban eltér és amiből a felét le is teszteltem, de az ehhez tartozó kódot akkor nem sikerült jól értelmeznem és kizártam a vizsgálandók köréből. Azaz, ha kicsit tovább próbálkozok már jóval korábban is meg lehetett volna.

Az értékeket bináris alakban felírva látszik, hogy csak a 7-es, 6-os és 5-ös bithelyen van eltérés.
0x0000dae2    1C    28    00011100    |    0x0000dc92    FC    252    11111100

Azaz a kövekező vizsgálatok érdekesek:
btst #7,0x0000dae2
btst #6,0x0000dae2
btst #5,0x0000dae2


Ez a 3 mind szerepel a kódban ráadásul egy kupacban van és az elsőhöz tartozó a következőképpen néz ki (a többi is hasonló, de a hosszuk miatt azokat nem másolom be):
.data:0003b6b6 08 39 00 07 00 00 da e2          btst #7,0x0000dae2
.data:0003b6be 66 48                            bnes 0x0003b708
.data:0003b6c0 16 38 92 50                      moveb 0xffffffffffff9250,%d3
.data:0003b6c4 b6 39 00 00 e6 22                cmpb 0x0000e622,%d3
.data:0003b6ca 65 0e                            bcss 0x0003b6da
.data:0003b6cc 08 c4 00 03                      bset #3,%d4
.data:0003b6d0 08 b8 00 05 83 ff                bclr #5,0xffffffffffff83ff
.data:0003b6d6 42 83                            clrl %d3
.data:0003b6d8 60 22                            bras 0x0003b6fc
.data:0003b6da 08 84 00 03                      bclr #3,%d4
.data:0003b6de 16 38 84 02                      moveb 0xffffffffffff8402,%d3
.data:0003b6e2 b6 39 00 00 e6 23                cmpb 0x0000e623,%d3
.data:0003b6e8 64 06                            bccs 0x0003b6f0
.data:0003b6ea 52 38 84 02                      addqb #1,0xffffffffffff8402
.data:0003b6ee 60 18                            bras 0x0003b708
.data:0003b6f0 08 f8 00 05 83 ff                bset #5,0xffffffffffff83ff
.data:0003b6f6 08 c4 00 00                      bset #0,%d4
.data:0003b6fa 76 01                            moveq #1,%d3
.data:0003b6fc 47 f8 31 36                      lea 0x00003136,%a3
.data:0003b700 4e b8 2d 7a                      jsr 0x00002d7a
.data:0003b704 42 38 84 02                      clrb 0xffffffffffff8402
.data:0003b708 4e 75                            rts


Ha a 7-es bit értéke nem egyenlő 0-val (ahogyan az a nem EGR-el rendelkező binárisokban szerepel), akkor rögtön az rts-re ugrik és kilép a szubrutinból, ha viszont 0 az érték, akkor végiszalad a többi utasításon. Ebből a "jsr 0x00002d7a" az érdekes, meg persze az, hogy közvetlenül előtte a 0x00003136 címet betölti az a3-as regiszterbe.
A 0x3136-os helytől az alábbi értékek találhatóak:
80 06 04 05 01 07 04 20 02 07 04 40 04 07 04 10

Első ránézésre nem mond sokat, de az EGR csatlakozó eltávolításakor jelentkező hibakód a következő:
P0405 - Exhaust Gas Recirculation Sensor "A" Circuit Low

A címtől számított 3-dik és 4-dik bájt éppen a hibakód számát adja. A 6-os bit tesztelésénél betöltött címen hasonlóképpen a 1404-es, míg az 5-ösnél a 0404-es hibakód jelenik meg.
Ebből két fontos következtetés adódik. Az egyik, hogy a 0x2d7a helyen lévő szubrutin a hibakód generáló szubrutin, amibe 149 különböző helyen lép be a program, tehát elvileg 149 hibakódot tud adni a motorvezérlő. A másik, hogy a minden hibakód egy bizonyos sorszámozott rendszerben van felsorolva a 0x305a-tól kezdődő részen a következő formátumban:
01 00 D3 00
02 00 D3 01
04 00 02 01
08 00 02 02
10 00 02 03
20 00 02 04
40 00 11 37
80 00 11 38
01 01 D0 00
02 01 FF FF
04 01 D0 40
08 01 D0 41
10 01 D0 64
20 01 01 05
40 01 01 07
80 01 01 08
01 02 04 62
02 02 01 12
04 02 01 13
08 02 01 17
10 02 01 18
20 02 15 74
40 02 01 22
80 02 01 23
01 03 01 25
02 03 01 31

...

Először mindig az első bájt duplázódik, aztán ha elért a végére, akkor a második bájt emelkedik egyel. A hibakód a harmadik és negyedik bájt.
Ez a felfedezés azét fontos, mert egyrészt innentől elvileg nem túl nehéz bármilyen hibakód kiiktatása, másrészt az ismert hibakódokon keresztül beazonosíthatók lesznek az egyes komponensek és a hozzájuk tartozó térképek. Elméletileg.

Átírtam ezt az egy bájtot, lehúztam az EGR csatlakozót, és nincs többé hibakód. A szelep eltávolítható.
Az EGR működésének kiiktatására tehát 3 módszert találtam (térkép, bypass, gyári), a hibakód jelzés kiiktatás ezektől függetlenül alkalmazható, valószínűleg úgy is ki lehet írni a programból, hogy az EGR még működik is. A gyári változathoz tartozó kód elemzésében nem merültem el jobban, de első ránézésre nem volt érthető, hogy miképpen hiúsul meg a működés. Talán egyszer több időt is szánok majd a megértésére.

VE hangolás

Néhány próbálkozás után jelenleg itt tartok a VE térkép hangolásával:
Livedata_2001 (1)_Vectra-B_Engine__Z 22 SE_201812311208.csv / 09391263BA / RPMxMAP / 17x14 / B1 Long Term Fuel Trim (Bank 1)
[[   0    0  400  800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400]
 [   9    -    -    -    -    -    0    -    0    0    0    0    -    -    -    -    -    -]
 [  16    -    -    -   -1    0    0    0   -1   -1   -1   -1   -1   -1    0   -4   -5    -]
 [  23    -   -1   -1   -1    0    7    2   -3   -2   -4   -2   -2   -1    -    -    -    -]
 [  30    -    -   -1   -1    0    8    4   -4   -4   -2   -1   -1   -3    -    -    -    -]
 [  37    -    -   -1   -1    0    7    3   -3   -1   -1   -1   -2    -    -    -    -    -]
 [  44    -    -   -1   -1   -2    6    5   -1   -1    0    0    0    -    1    -   -2    -]
 [  51    -   -1    1   -1   -1    5    4    0    0   -1   -1    0    -   -2    -    -    -]
 [  58    -    -    -    0   -1    6    4    0   -1   -1    0    1    -    -   -2    0    -]
 [  65    -    -    -    0    0    6    4    0    0    0    0    0    -    2   -1    -    -]
 [  72    -    -    -    0    0    6    5    1    0   -1    0    0    0    0    1    0    -]
 [  79    -    -    -    0    1    7    4    0    0   -1    0    1    0    1    0    -    -]
 [  86   -1    -    -    1    1    5    5    0    0   -1    1    0   -1    0    0    -    -]
 [  93    -    -    -    0    1    3    2    0    0    0    0   -1    0    0    1    0    -]
 [ 100   -1    -    -   -1   -1    0    0    0    1    0    0    0    0    -    -    -    -]] average

 

Igen, a 2000-2400-as tartományt elrontottam, de már tudom hol a hiba. Igaz, mindig úgy vagyok vele, hogy a következő már biztosan jó lesz.

Összehasonlító táblázat
A táblázatot, mint írtam frissítettem az új adatokkal, de vissza még nem írtam a korábbira. Jelentősebb változás még, hogy ezentúl szerepeltetem a térképek végeinek címét is, mivel a kódban az ezekre való hivatkozás elég sűrűn előfordul. Javítottam néhány elírást, bővült a térképek száma is valamelyeset, és a már újabban azonosított térképeket is megjelöltem. Azokat narancssárgával, amiknél csak erős sejtésem van. Innen letölthető.

2 megjegyzés:

  1. Hey, Could you help me with disabling egr in my ecu? Im running late engine without egr with my old ecu... which comes with egr - and I've check engine light due of this. Im gonna buy mpps v13, what else I need? And yes, your help :) hit me up @ mail, Im waiting :) thanks

    VálaszTörlés
  2. Hi, Send me your email address in the next comment and delete it right after you post it. I will receive the comment in a mail message and nobody else will know you email address. We will discuss the rest in private.

    VálaszTörlés