Mahdollista lukea flash sisältö aud:n kautta ? - C koodaustaitoista apua tarvittaisiin...

Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

AUD liitin pitää sisällään melko helpon protokollan sekä lukea että kirjoittaa muistiosoitteisiin. Dokumentaatiossa viitataan että käytettäessä e10a liityntämodulia AUD:n kautta voidaan ainoastaan käsitellä RAM muistia. Toisaalta protokolla itsessään mahdollistaa kyllä kaikkien muistialuieiden osoittamisen.

Tätä tarkoitusta varten tarvitsisi tehdä C kielellä ohjelma joka toteuttaa alla kuvatun lohkokaavion pohjalta alla kuvattua signallointiliikennettä. Meikäläisellä on muutamia vuosia siitä kun viimeksi olen koodannut, joten tässä tarvitsisi hieman apua. Ensiksi tuon lohkokaavion mukaisen rakenteen tekemisessä C:llä ja sitten tuo signaalinkäsittely toteutettuna sinne ohjelmalogiikkaan. Löytyisikö lukijakunnasta C taitoa sen verran että tämä perusidea onnistuisi toteuttaa. Pystyn varmaan itse hiomaan syntaksin kohdalleen.

Itse logiikka on kohtuullisen helppo:

- PB5 (AUDCLK) ohjelmoidaan menemään ylös/alas tietyllä viiveellä.
- Asetetaan PB6 (DIRection) alas
- Asetetaan PB4 alas (AUDSYNCinverted)
- Läheteään väylään PB0,PB1,PB2,PB3 (AUDATA) Dummybit 0000
- Odotetaan seuraavaa kellopulssia
- Lähetetään väylään komento PB0,PB1,PB2,PB3 (AUDATA) luetaan muistista eli 1010
- Lähetetään väylään PB0,PB1,PB2,PB3 (AUDATA) muistiosoite esim 0xFFFFC000, 4 bittiä kullakin PB5 kellopulssilla
- Vaihdetaan PB6 (DIRection) ylös
- Odotetaan väylästä PB0,PB1,PB2,PB3 (AUDATA) ready flag 0001. Odottaminen kellopulssi kerrallaan kunnes muuttuu.
- Vaihdetaan PB4 (AUDSYNCinverted) ylös
- Luetaan väylästä PB 4 0,PB1,PB2,PB3 (AUDATA) muistiosoite esim 0x01234567 aina neljä bittiä kerrallaan.

Ohjelman lohkokaavio:
Kuva

Signallointiliikenne:
Kuva

AUD väylään liittyminen on hyvin kuvattuna muutamassa dokumentissa. Rautatason liityntä voidaan tehdä esim. PIC:llä tai sitten esim. liittämällä toinen SH sarjan prosessori 74HC245 piirillä. Mulla on sopivasti SH7086 RSK (eli prossukortti kehityskitti) ja siihen C pohjainen kehitysympäristö joten tuo olisi varmaan helpoin ratkaisu.
Kuva
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Tässä vielä sama englanniksi jonka ajattelin postata tuonne RR:n foorumille jossa uusi kaveri bozo (australiasta) yrittää samaa SV1000 eculle joka lienee sama kuin busan ecu. Ainakin siinä on sh7052 prossu.

The AUD connector allows quite simple protocol to read and write to the processor address space. In e10a (the AUD interface kit) a refenrence is made that only RAM address can be read, anyhow the protocol itself does not limit the address space and it is possible that e10a is limited due to copyright issues so its worth while to check if the flash rom area can be read with AUD protocol. Additionally if the flash rom can not be read, then at least an user level microkernel can be copied to RAM memory and then FDT can be used for reading the flash memory. (all this in theory)

To be able to access the memory we need a program that according to the flowchart below executes the signal timing below. In prinsiple this is very simple to write - but unfortunately I have about 20 years since I have written C so need some help on this.

The logic is very simple and communications just uses seven one bit registers (PB0..PB6):
- PB5 (AUDCLK) is a clock signal that is programmed going up and down with a small inbuilt delay. I dont know if this should be synchronized with a clock or if it can vary a lot. But as it is used for reading and writing I would assume it not being so citical to have an exact pulsewidth on this.
- Set PB5 (DIRection) down to write to the bus
- Set PB4 (AUDSYNCinverted) down to start reading
- Send to the bus PB0,PB1,PB2,PB3 (AUDATA) a dummybit 0000 to start the sequence
- Wait for next PB5 cycle
- Send to the bus PB0,PB1,PB2,PB3 (AUDATA) a command 1010, i.e. read from memory
- Send to the bus PB0,PB1,PB2,PB3 (AUDATA) the memory address e.g. 0xffffc000 4 bits at a time by each PB5 clock pulse
- Set PB6 (DIRection) up
- Wait from the bus PB0,PB1,PB2,PB3 (AUDATA) to receive readyflag bits 0001: wait for each clockpulse until changed.
- Set PB4 (AUDSYNCinverted) up as a signal that we are ready to start reading the memory contents
- Read from the bus PB0,PB1,PB2,PB3 (AUDATA) the memory content, e.g. 0x01234567, four bits at a time.
- Repeat the above for each memory byte to be read...

The flowchart for the program is the following:
http://macmadigan.no-ip.com/Public/ECU/sh7052/AUD_read_flowchart.JPG

The signalling is the following:
http://macmadigan.no-ip.com/Public....ing.JPG

The HW interface to AUD bus is very easy and well described.
http://macmadigan.no-ip.com/Public/ECU/sh7052/AUD_hw_interface.JPG

I have SH7086 RSK which I thought to be using for this. For trialling and error I can just connect the PB0..PB6 directly to RSK7086 AUD connector and use e8a for monitoring the program and knowing exactly the memory contents with Renesas Embedded Workshop. Alternatively a PIC could be used as suggested by bozo.
http://macmadigan.no-ip.com/Public/ECU/sh7052/RSK7086.jpg
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Paljon tuon AUDCLK taajuus on? vai tuleeko se ulkoisesta lähteestä?
Saako olla huojuntaa kuinka paljon?

Pc:llä windows ympäristössä tarkkojen ajotusten teko voi olla mahdottomuus.
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Jos tuo toimii, näyttää kyllä aika yksinkertaiselta, mutta vaatsi varmaan vähän suunnittelua miten toteuttaa sen.

Pic:llä ja NE555:lla varmaan onnistuisi.

Eikös niitä ole jotakin valmiita piirejä jossa on sisäänmeno sarja siirtona ja ulostulo rinnakkais siirtona ja päinvastoin?
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Tuo saadaan parhaiten testattua tuolla RSK7086 prossukortilla jossa on sekä nuo PB0..PB6 että AUD väylän signaalit.

AUD kello voi olla max prossun kellotaajuus jaettuna neljällä. Huojunnasta ei ole mitään tietoa - mutta tuolla RSK7086:lla voidaan asettaa timeri tekemään signaalia ja sitten ajoittaa se signaalin taajuus niin että kaikki suorittaminen ehditään tekemään ennen kellotaajuden pulssin muuttumista.

Suurin haaste mulla on juuri nyt miettiä miten C:llä rakennetaan funktio jossa neljän bitin sarjoissa dataa konvertoidaan byteiksi ja päinvastoin. Tuo loppu on prosessorin porttien ohjelmointia johon löytyy malliohjelmat RSK:n mukana tulleesta HEW:sta (jonka voi myös ladata tuolta softakirjastosta).

Tuo kaikki loput on ihan puhdasta C-koodia jota voi debugata suoritusaikaisesti. Sitten kun tiedetään toimivaksi voi noista RSK:ta joko ostaa lisää (150e+alv/kpl) tai rakentaa jonkun pic pohjaisen vehkeen.

Tässä alla kuva tuosta RSK:sta. Toi alempi vaalea liitin on AUD liitin.
Kuva
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Eli, saatko neljästä pinnistä tiedon ohjelmointilaitteilla joko 1 tai 0 ja niistä pitäis saada aikaan neljän bitin tavu
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Kuvittelisin että rakennan funktion

memdata = readmem(memaddr);

Jonka sisällä ensin muistiosoite memaddr tyyliin FFFF3C00 pitäisi pystyä purkamaan bittijonoksi neljän bitin ryhmissä...´

1111
1111
1111
1111
0011
1100
0000
0000

Noi neljä bittiä pitäisi sijoittaa globaaleihin muuttujiin PB1, PB1, PB2, PB3. ja tahdistan niiden kirjoittamisen kellopulssiin.

Tämän jälkeen vähän signaalien muutoksia ja paluuviestinä saan bittivirtaa neljän bitin erissä, eli näitä tulee nähtävästi vain kaksi koska luetaan muistiosoite kerrallaan

1110
0010

noista sitten pitäisi rakentaa jonoa yksi tavu kerrallaan eli
1110 0010

Eli luetaan neljä bittiä kerrallaan PB0,PB1,PB2,PB3 kahteen kertaan ja sijoitetaan lopuksi funktion arvoksi. No tämä on siinä mielessä helppo että voin lukea nämä vaikka peräkkäin kahteen kertaan...

return readmem() = 0xE0

Lisämausteen tähän tuo se että jos haluaa pitää tuon kellopulssin koko ajan samana pitää käyttää globaaleita muuttujia ja koko ajan laskea globalin pointterin avulla missä mennään.

Ei vaikea probleema, mutta tuohon on varmaan joku fiksu tapa olemassa kunhan vaan tietäisi että mikä.
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Binääriluku 1100
0*2^0 + 0*2^1 + 1*2^2 + 1*2^3
= 0 + 0 + 4 + 8
= desimaalilukuna 12
= heksadesimaalilukuna = C

http://www.cs.helsinki.fi/u....hje.txt


TAVUSTA BITEIKSI
----------------
On olemassa useita tapoja muuttaa kokonaisluku bittiesitykseksi
- tässä on niistä yksi. Javassa tavut kannattaa säilyttää int-tyyppisinä,
jotta niiden arvoväli olisi aina epänegatiivinen [0, 255]. Tämä onnistuu
käyttämällä InputStream- ja OutputStream-luokkien aliluokkia, esim.
FileInputReader- ja FileOutputReader-luokkia. Myös C-kielessä kannattaa
käyttää tyyppiä int.

/**
* Palauttaa parametrina saadun luvun 8 vähiten merkitsevää
* bittiä taulukossa (luvut [0, 255]).
*
* @param data muunnettava tavu, lukuarvo väliltä [0, 255]
* @return parametrin 8 vähiten merkitsevää bittiä taulukossa,
* vähiten merkitsevä bitti on viimeisessä indeksissä.
*/
public static boolean[] byteToBits(int data) {
if (data < 0 || 255 < data) {
throw new IllegalArgumentException("" + data);
}

boolean[] bits = new boolean[8];
for (int i=0; i < 8; i++) {
bits = ( (data & (1 << (7-i)) ) != 0 );
}
return bits;
}






BITEISTÄ TAVUKSI
----------------
On olemassa useita tapoja muuttaa bitit vastaavaksi kokonaisluvuksi
- tässä on niistä yksi. Javassa tavut kannattaa säilyttää int-tyyppisinä,
jotta niiden arvoväli olisi aina epänegatiivinen [0, 255]. Tämä onnistuu
käyttämällä InputStream- ja OutputStream-luokkien aliluokkia, esim.
FileInputReader- ja FileOutputReader-luokkia. Myös C-kielessä kannattaa
käyttää tyyppiä int.

/**
* Muuttaa parametrina saadun bittitaulukon bitit
* vastaavaksi kokonaisluvuksi väliltä [0, 255].
*
* @param 8-paikkainen bittitaulukko, vähiten merkitsevä bitti
* viimeisessä indeksissä.
* @return bittien kokonaislukuesitys väliltä [0, 255]
*/
public static int bitsToByte(boolean[] bits) {
if (bits == null || bits.length != 8) {
throw new IllegalArgumentException();
}

int data = 0;
for (int i = 0; i < 8; i++) {
if (bits) data += (1 << (7-i));
}
return data;
}
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

OK - dänks, noita muokkaamalla saan tehtyä funktiot kuntoon.

Tuota muistipaikan antamista varten täytyy muuttaa tuo tavuista biteiksi funktio muuttaa 32bittiä käsittäväksi ja biteistä tavuksi funktiota varten täytyy lukea bitit johonkin taulukkoon ennen muuntamista.

Nyt ei muuta kuin määrittelemään tuota prosessorin IO:ta tuohon signalointiin sopivaksi, menee todennäköisesti muutama viikko että saan kuntoon, vaikka käytännössä kaikki palikat onkin jo tiedossa.

Suosittelen tutustumaan tuohon HEW:iin, siinä on kääntäjä sekä simulointimoodi jolla voi rakentaa koodia vaikkei olisikaan aitoa testausympäröstöä...
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Tarkennapas vielä tota systeemiä, mitä pinnejä siitä AUD väylästä pitää ottaa käyttöön ja miten siihen luku asetuksiin päästään, virta ecu:n ja mitä muuta?

Onnistuuko tuo Flash:n kirjotus samanlailla tuota kautta?

Mulla tuo lontoon kieli ei taivu tarpeek hyvin.
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Noi pinnit mitä AUD väylästä tarvitaan on määritelty tuossa uudestaan linkatussa kaaviossa tässä alapuolella + tietysti myös maadoitus.

AUDCK:hon syötetään siniaaltoa jollain taajuudella joka on max prosessorin taajuus /4, käytännössä paljon vähemmän. DIR signaalilla kerrotaan että kumpaan suuntaan bitit liikkuvat ja noita AUDATA1..3 bittejä joko luetaan tai kirjoitetaan. Lisäksi AUDSYNC:llä tahdistetaan että onko väylä valmis arvojen lukemiseen.

Kun kirjoitetaan 32bittinen muistiosoite AUD väylään -> saadaan 16bittinen arvo ko. muistiosoitteesta tuon signalointikaavion mukaisella prosessoinnilla. Kaikki 4 bittiä kirjoitetaan tai luetaan aina yhtä aikaa yhden kellopulssin aikana.

Kuva

Voidaan myös tehdä toisinkinpäin, mutta itse luotan toistaiseksi enemmän sarjaporttin kautta flashin ohjelmointiin koska flash:n kirjoittamiseen AUD:n kautta näytti sisältyvän joukko varoituksia ja rajoituksia. RAM alueelle sillä kyllä voidaan kirjoittaa ilman isompia rajoituksia. Lisäksi jos saadaan AUD:n kautta luettua, niin sitten ohjelmoitavia ECU:ja ei tarvitse avata jos niissä on sama tyyppikoodi kuin jo avatussa.
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

kawassa kun nuo MD1, FWE, TxD ja RxD pinnit ei tule liittimelle saakka vaan jää aivan jonnekkin muualle, helpompi olis kaivaa se AUD liitin esiin, kuin liitellä johtoja sinne tänne z1000 kawasakissa.
Täytyy vähän olla omakin lehmä ojassa, vaikka tarkoitus onkin busasta selvittää systeemiä. Heh...
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Mittasitko tuolta liittimeltä ohjeen mukaan ? Jos ei löydy vastusarvoja niin liitintä vaan esiin. Siinähän voi hyvällä tuurilla olla vaikkapa se aikaisempikin liityntä ? Kaiva sen ECU:n tyyppikoodi jostain esille niin kysyn RR:ltä tietääkö mitä se on syönyt...

Tai vaihtoehtoisesti www.glyn.fi kautta saat tilattua tuon RSK7086:n jossa on AUD liitin, sarjaliitin sekä prosessorin PB0-PB6 liittimet. HEW:ssä on suoraan keskeytyspohjainen SCK signaali ajettavissa ulos. Eli ei muuta kuin testausta ja koodausta vaille valmis. Sitten kun AUD liityntä tuolla kortilla toimii voi siitä heittää piuhat ECU:uun kiinni.




Edited By PetriK on 1194897264
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
timo3
Viestit: 139
Liittynyt: 27 Huhti 2007, 07:47
Paikkakunta: suomi

Viesti Kirjoittaja timo3 »

Mulla olis yks ylimääräinen dynamometrin elektroniikka yksikkö ja pienellä modifikaatiolla saisin sillä testattua tuota kawan AUD linjaa.
Siinä olis vapaita linjoja toteuttaa tuo luku.

Mutta kysymyksiä.

Eli jos ei käytä tuota 74HC245 piiriä, koska pic:ssä voi käyttää samaa linjaa sisään tai ulostulona, niin

- Lähetetään väylään PB0,PB1,PB2,PB3 (AUDATA) muistiosoite esim 0xFFFFC000, 4 bittiä kullakin PB5 kellopulssilla
- Vaihdetaan PB6 (DIRection) ylös
- Odotetaan väylästä PB0,PB1,PB2,PB3 (AUDATA) ready flag 0001. Odottaminen kellopulssi kerrallaan kunnes muuttuu.

Kun tuossa esim: on kirjoitettu muistiosoite 0001 niin saako tuon
- Vaihdetaan PB6 (DIRection) ylös
jälkeen vetää kaikki linjat nollaksi, koska jos luet ready flag 0001. tulemista 0001 nin silloin sinne jo kirjoittaessa muistiosoitetta pinnit jääneet siihen tilaan ja muuttumista 0001 ei huomaa.

74HC245:ssa varmaan kun vaihtaa suuntaa, niin pinnit menevät nolliin.

Kysymys kaksi, täytyykö se kellopulssi tulla koko ajan, kun tuossa mun pic.ssä ei ole kuin yksi timeri ja sen joutuu ottaa käyttöön kun lähettää tietoa PC:lle. Vai voiko sen katkaista vaikka yhden muistipaikan luvun jälkeen ja käynnistää taas uudestaan seuraavan luvun ajaksi uudestaan?
Avatar
PetriK
Viestit: 1650
Liittynyt: 08 Maalis 2006, 19:20
Paikkakunta: Vantaa

Viesti Kirjoittaja PetriK »

Ei vielä tietoa timeristä, pitää kokeilla.... oma veikkaus on että timerin tai siis kellopulssin voi laittaa päälle vain kun aud linja on aktiivinen. Ja mä suunnittelin tehdä just niin että timeri päälle linjan lukemisen alussa ja pois päältä lopussa.

Eli muistipaikka kerrallaan vastineeksi tulee merkki... mutta oletko varma että sulla on 7052 pohjainen jossa on AUD liitin. Voi myös olla aiempi BDM liittimellä varustettu versio...
Miksi ... aina jää varaa parantaa...

http://www.facebook.com/ecueditorcom
Vastaa Viestiin