Mittaristodata - Sarjaliikennettä 7kb/s

Lähetä vastaus

Hymiöt
:D :) :;): :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :tyhmamina: :baaa: :bike: :blues: :pomppu: :bowdown: :thumbup:
Katso lisää hymiöitä

BBCode on Käytössä
[img] on käytössä
[url] on käytössä
Hymiöt ovat käytössä

Otsikko
   

Laajenna näkymää Otsikko: Mittaristodata - Sarjaliikennettä 7kb/s

Kirjoittaja PetriK » 11 Marras 2007, 15:00

Mitaristodataa käytetään usein myös lukemaan muistipaikkoja varmistamaan niiden sisältö. Siksi muutamassa toisessa koodissa olen nähnyt että niissä on ns. muistipaikanlukuohjelma.

Käsittääkseni ohjelma kyllä voi lukea Flash aluetta, sillä siellähän mm. kartat sijaitsevat - mutta tuo RAM mode AUD liityntä e10a ei siihen nähtävästi pysty.

On kyllä mahdollista että AUD liittymään tämä rajoitus on rakennettu vain tekijänoikeudellisista syistä - joten on ehkä mahdollista lukea flash muisti AUD:n kautta.

Tässä sivulla 184 (Appendix A) alkaen on vähän tietoa tuosta AUD:sta:
http://macmadigan.no-ip.com/Public....055.pdf
Yksi kaveri ehdotti että tuohon väylään voisi rakentaa PIC pohjaisen laitteen jolla koko muistiavaruus eikä pelkästään FFFFxxxx luettaisiin AUD väylän kautta. Kirjoittaminenhan on taattu toimimaan sarjaväylän kautta, joten vain lukeminen on ongelma. Mulla taas on se RSK7086 johon saisi tuon 74hc245:sen kautta liitettyä sen suoraan 7052 AUD väylään kuten tuossa yllä olevassa dokkarissa on kuvattu. Pitäisi vaan vääntää ohjelma C:llä, mutta huomioiden että olen viimeksi koodannut jotain järkevää C:llä joskus 80-luvun lopussa niin aika haastava tuokin vaihtoehto. Toisaalta jos täältä löytyy koodausapua niin voisi hyvinkin toimia...

Jos koko prossu irroitetaan pitää siihen kytkeä kaikki jännitteet sekä myös tehdä tuo kiteen kytkeminen. Aika työläs juttu verrattuna siihen että nuo 2x16 datalinjaa +muutamat muut signaali pelkästään kytketään. Nehän on aivan vierekkäin nuo pinnit, joten ei se paljoa tinaamista helpottaisi verrattuna siihen että piiri on paikallaan.




Edited By PetriK on 1194786114

Kirjoittaja timo3 » 11 Marras 2007, 14:07

Koska tuo RAM:n koko ei ole kuin 16 kbit, niin controllerin käynnistyessä se ei varmaankaan lataa FLASH:sta muuta kuin itse ohjelman sisältävän osuuden RAM:iin ja ohjelman pyöriessä RAM:ssa ohjelma hakee karttatietoja FLASH:ta.
Itse RAM:iin ladatussa ohjelmassa määritellään ns. ”muuttujat” antureiden antamalle tiedolle ja sen mittaristodatan kautta tuleva data on niiden ”muuttujien” sisältämiä dataa arvoja.
Eli jos sinne on mahdollisuus antaa lukukäskyjä, niin ne palautteet olisivat vain niiden muuttujien arvojen lukemista, siis tässäkin tapauksessa sisään pitäisi saada taas ohjelma sisään joka osaa lukea FLASH:a ja tuoda sen sisällön ulos mittaristodatan kautta.

Onko se piiriltä tuleva mittaristodatan TxD linja sama mihin diagnostic pistoke kytketään?

Yleensä sen diagnostic liitännän kautta ei ole muuta mahdollisuutta kuin lukea antureiden antamia data arvoja ja korkeintaan säätää tyhjäkäynnin CO

Ehdotus, kuumailmapuhaltimella piiri irti, liimaa sen selälleen johonkin kiinni ja yrittää lukea sitä eprommina.

Irti siksi, ettei ainakaan pinneihin kytketyt muut komponentit haittaisi lukemista ja myös niitä tarvittavia jalkoja voi vähän taivuttaa erilleen, jolloin johtojen tinaaminenkin on jalkoihin helpompaa.

Kirjoittaja PetriK » 10 Marras 2007, 06:38

Ja olisikohan tässä koodi perustuen nimeämiseen ...
seg000:00008C0E
seg000:00008C0E ProcSerial:
seg000:00008C0E bset 3129h, X, #2Dh
seg000:00008C12 brset byte_A09, #0Dh, loc_DF78+5
seg000:00008C18 eora #43h
seg000:00008C1A cps 6Eh, Z
seg000:00008C1C
seg000:00008C1C ProcSerial_1:
seg000:00008C1C adca #74h
seg000:00008C1E adca 6Dh, X
seg000:00008C20 eora #28h
seg000:00008C22 oraa 65h, X
seg000:00008C24 eora #43h
seg000:00008C26 cps 6Eh, Z
seg000:00008C28 adca #74h
seg000:00008C2A bclr 642Ch, Z, #69h
seg000:00008C2E movb 58h, X, byte_3541
seg000:00008C32 anda 2Ch, X ; Clear any pending flags
seg000:00008C34 asr 31h, Z
seg000:00008C36 bset 2254h, Z, #2Ch
seg000:00008C3A ldaa 6Dh, Z
seg000:00008C3C suba #6Fh
seg000:00008C3E sbca #61h
seg000:00008C40 sbca #79h
seg000:00008C42 com 56h, Z
seg000:00008C44 adda 6Ch, Z
seg000:00008C46 ldaa #65h
seg000:00008C48
seg000:00008C48 ProcSerial_2:
seg000:00008C48 neg 2Ch, Z
seg000:00008C48 ; ---------------------------------------------------------------------------
seg000:00008C4A dc.b 31h ; 1
seg000:00008C4B dc.b 29h ; )
seg000:00008C4C ; ---------------------------------------------------------------------------
seg000:00008C4C brset byte_A09, #0Dh, loc_CDB6
seg000:00008C52 eora 43h, Z
seg000:00008C54 cps 6Eh, Z
seg000:00008C56
seg000:00008C56 ProcSerial_3:
seg000:00008C56 adca #74h
seg000:00008C58 ldaa 78h, X
seg000:00008C5A
seg000:00008C5A ProcSerial_4:
seg000:00008C5A bclr 642Ch, Z, #69h
seg000:00008C5E neg 7Ah, Z
seg000:00008C60 eora 6Dh, Y
seg000:00008C62 suba #58h
seg000:00008C64 neg 2Ch, Z
seg000:00008C66 bset 5835h, X, #30h
seg000:00008C6A sbca 30h, X
seg000:00008C6C rol 9, Z
seg000:00008C6E asr 31h, Z
seg000:00008C70 bset 0D0Ah, Z, #3Bh
seg000:00008C74 bset 6574h, X, #53h
seg000:00008C78
seg000:00008C78 ProcSerial_5:
seg000:00008C78 adca 6Fh, X
seg000:00008C7A cpz 73h, Z
seg000:00008C7C eora #43h
seg000:00008C7E cpy 74h, Z
seg000:00008C7E ; ---------------------------------------------------------------------------
seg000:00008C80 dc.b 28h ; (
seg000:00008C81 dc.b 47h ; G
seg000:00008C82 ; ---------------------------------------------------------------------------
seg000:00008C82 ldaa 74h, Z
seg000:00008C84 adca 6Fh, X
seg000:00008C86 cpz 73h, Z
seg000:00008C88 eora #28h
seg000:00008C8A bita 64h, Z
seg000:00008C8C rol 30h, Z
seg000:00008C8E cmpa 35h, Y
seg000:00008C90 sbca 30h, X
seg000:00008C92 rol 2Dh, Z
seg000:00008C94 movw 29h, X, word_2C22
seg000:00008C98 eora 65h, Y
seg000:00008C9A
seg000:00008C9A ProcSerial_99:
seg000:00008C9A cpy 70h, Z
seg000:00008C9A ; End of function ProcSerial

Kirjoittaja PetriK » 10 Marras 2007, 05:09

Mittaristodatan mukana pystytään myös kysymään ECU:lta erilaisia ajonaikaisia parametreja kuten esim ilmanpainetietoja sekä tietoa siitä miten ruiskun ohjauksessa kompensoidaa alhaista jännitettä.

Alla lyhyesti mitä RR asiasta kuvasi aikaisemmin. Koska dataa välitetään epästandardilla nopeudella noin 7kbit/s vaudilla ei normaalilla pc:llä pääse tähän dataan käsiksi. Mutta käsittääkseni tuollaisen piirin tekeminen vaikka PIC:stä ei olisi kovinkaan vaikeaa.

Toinen asia mikä tässä yhteydessä kiinnostaa, on se että löytyykö sarjadatasta joku tapa jolla parametriksi annetaan muistiosoite ja vastauksessa saadaan tämän muistiosoitteen sisältö. Ainakin joskus olen samanlaisen toteutuksen nähnyt auton ECU:ssa.

After looking at your pdf I checked out the code for the 21175-1089 B1/B2 ECU and found a very rudimentary protocol.

The ECU initially sets Serial B into RCV. Upon receipt of a single byte it goes into transmit mode.

The rcvd byte is used to calculate a pointer into a look up table of 256 16 bit addresses. For example if you send the ECU a 0x04 it pulls the fifth entry in the table which is 0x007A. It then grabs the data from address 0x000E007A and transmits the byte back as the reply. After that single byte is sent Serial B goes back into receive mode.

Table entries for 00 - DF return RAM values, E0 - FF return MAP ROM data, specifically the version ID ASCII string you have to make multiple requests to get the whole string, it only sends one byte per query. Undefined table entries return 0xFF always.

Here are the query bytes and the data returned...

00
00
00 dc.w 0000 ; System Status flag
01 dc.w 00Ch ; System Status Flags
02 dc.w 046h ; Throttle Position
03 dc.w 04Ch ; Inlet Air Pressure
04 dc.w 07Ah ; zAdjLiqTemp; Adjusted water temp
05 dc.w 07Bh ; zAdjAirTemp; Adjusted Air Temperature
06 dc.w 052h ; zStaticAP_2; copy of static air pressure
07 dc.w 07Ch ; zCnkSpeed; RPM
08 dc.w 057h ; zCopyAnRslt_4; Fuel Pump Voltage
09 dc.w 36Eh ; Returns 0xFF always
10 dc.w 36Eh
11 dc.w 36Eh
12 dc.w 36Eh
13 dc.w 36Eh
14 dc.w 36Eh
15 dc.w 36Eh
16 dc.w 0CCh ; zInjVar_A2; This is zCOV_offset_1 (Fuel Adjustment Input 1)
17 dc.w 0CDh ; low byte of above
18 dc.w 0D4h ; zCov_offset + zFuelPumpMap (Injector variable)
19 dc.w 0D5h ; low byte of above
20 dc.w 0DCh
21 dc.w 0DDh
22 dc.w 0E4h
23 dc.w 0E5h
24 dc.w 0ECh ; Calculated zCOV offset to Injector for Cylinder 1
25 dc.w 0EDh ; Calculated zCOV offset to Injector for Cylinder 2
26 dc.w 0EEh ; Calculated zCOV offset to Injector for Cylinder 3
27 dc.w 0EFh ; Calculated zCOV offset to Injector for Cylinder 4
28 dc.w 36Eh
29 dc.w 36Eh
30 dc.w 36Eh
31 dc.w 36Eh
32 dc.w 220h ; Calculated Ignition Advance Coil 1
33 dc.w 224h ; Calculated Ignition Advance Coil 2
34 dc.w 228h ; Calculated Ignition Advance Coil 3
35 dc.w 22Ch ; Calculated Ignition Advance Coil 4
36 dc.w 36Fh ; zCnkSpeed_2; RPM
37 dc.w 36Eh
38 dc.w 36Eh

Kirjoittaja PetriK » 29 Loka 2007, 22:22

Osana RidgeRacerin kanssa käytyä keskustelua löydettiin skoopilla ja ohjelmakoodista kaivamalla että busan mittaristo saa eculta sarjamuotosta dataa noin 7kb/s nopeudella tämä sarjadata pitää sisällään bittitietona mm. seuraavat asiat:

-lämpötila
-virhekoodit
-polttoaineenkulutus

Näitä on useimmiten 8 byteä ja seuraavilla asetuksilla 8,n,1. Ensimmäinen byte pitää sisällään tiedon siitä että montako byteä sieltä tulee.

Lisäksi rr kaivoi koodista että ainakin suomalaisessa 1999 mallisessa busassa voi ecu:lta kysellä eri antureiden arvoja.

Ongelma tässä sarjadatassa on että:
- se on epästandardilla nopeudella, eli pc ei osaa sitä tuotta
- jenkkiläisessä ecussa jonka rr avasi puuttui joitain komponentteja niin että erillisiä kyselyitä ei voi tehdä.

Sen että osaako ecu vastata kyselyihin voi selvittää mittaamalla harness connectorista sarjadatan rx portin tiedot.

Lähinnä tämä on kiinnostava asia jos haluaa tehdä dataloggerin suoraan ecusta, tai jos haluaa muuttaa ecun toiseksi ja säilyttää mittariston.

Alla kuva miltä sarjadata näyttää - jos on kiinostusta kerrotaan lisää.

Kuva

Ylös