Frage

Ich versuche, herauszufinden, wie die PSRAM zu programmieren in dem GBA EZ Flash Größe 3 in 1 Karte. Im Grunde wiederholt, was GBA Exploader und andere Programme tun.

Wenn ich einen Block und Programm wählen sie dann lesen Sie das erste Halbwort zurück ist immer 0x1500 oder so etwas, aber der Rest der Daten ist in Ordnung.

Wenn auf der Schreib ich den vorherigen Block wählen, beginnen bei 0x20000 Bytes Schreiben in diesem Block (die Größe eines Blocks von dem, was ich festgestellt haben). zurück aus dem gewünschten Block zu lesen noch zeigt, dass erstes Halbwort als falsch, aber der Rest der Halbworte korrekt ist.

War es hilfreich?

Lösung

Ich war die "nahe ich versucht hatte, eine zu sichern und dann zwei Blöcke, aber nicht drei, und das war der Trick In Hinter Augen merken, wie viele der Funktionen zu 0x08000000 schreiben, 0x08020000 und 0x08040000:..

void            OpenNorWrite()
{
        *(vuint16 *)0x9fe0000 = 0xd200;
        *(vuint16 *)0x8000000 = 0x1500;
        *(vuint16 *)0x8020000 = 0xd200;
        *(vuint16 *)0x8040000 = 0x1500;
        *(vuint16 *)0x9C40000 = 0x1500;
        *(vuint16 *)0x9fc0000 = 0x1500;
}

Die beschädigten Daten waren immer 0x1500, was Sinn jetzt zu machen.

Die Lösung ist drei zu sichern (oder mehr) Blöcke und Adresse auf drei (oder mehr) Blöcke:

CloseNorWrite();
SetRompage(0x180-3);
OpenNorWrite();
rb=FLASHBASE+(0x20000*3);
for(ra=0;ra<(sizeof(prog)>>2);ra++)
{
    rc=prog[ra];
    PUT16(rb,(rc>> 0)&0xFFFF); rb+=2;
    PUT16(rb,(rc>>16)&0xFFFF); rb+=2;
}
CloseNorWrite();
SetRomPage(0x180);
reboot();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top