2009-05-18 5 views
0

Ich versuche herauszufinden, wie das PSRAM in der GBA-Größe EZ Flash 3 in 1-Karte zu programmieren. Grundsätzlich wiederholen, was GBA Exploader und andere Programme tun.Schreiben PSRAM in EZ Flash 3 in 1

Wenn ich einen Block auswähle und ihn programmiere, dann lese es zurück, das erste Halbwort ist immer 0x1500 oder so ähnlich, aber der Rest der Daten ist in Ordnung.

Wenn auf dem Schreiben ich den vorherigen Block wähle, schreibe mit 0x20000 Bytes in diesen Block (die Größe eines Blocks von dem, was ich bestimmt habe). Das Zurücklesen von dem gewünschten Block zeigt immer noch, dass das erste Halbwort falsch ist, aber der Rest der Halbwörter ist korrekt.

+0

Ich bin Usi ng der EZ Flash 512m basierten Bibliothek als Baseline. Die ID für diese Karten wird als 0x227E2218 gemeldet –

Antwort

0

Ich war diese "nahe ich ein zu sichern versucht hatte, und dann zwei Blöcke, aber nicht drei, und das war der Trick In Hinter Augen merken, wie viele der Funktionen schreiben zu 0x08000000, 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 zu sichern drei (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(); 
Verwandte Themen