2009-05-18 4 views
0

J'essaie de comprendre comment programmer le PSRAM dans la carte EZ Flash 3 dans 1 GBA. Fondamentalement répéter ce que GBA Exploader et d'autres programmes font.Écriture PSRAM dans EZ Flash 3 dans 1

Si je sélectionne un bloc et le programme puis le relire le premier demi-mot est toujours 0x1500 ou quelque chose comme ça, mais le reste des données est bien. Si à l'écriture je sélectionne le bloc précédent, commencez à écrire à 0x20000 octets dans ce bloc (la taille d'un bloc de ce que j'ai déterminé). La lecture du bloc souhaité montre toujours que le premier demi-mot est faux mais que le reste des demi-mots est correct.

+0

Je suis usi La bibliothèque basée sur EZ Flash 512m sert de référence. L'ID pour ces cartes se rapporte à 0x227E2218 –

Répondre

0

j'étais cette «proche que j'avais essayé de sauvegarder un, puis deux blocs, mais pas trois et que ce fut le tour dans un avis de la vue de derrière combien de fonctions écrire à 0x08000000, 0x08020000 et 0x08040000:..

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

Les données corrompues était toujours 0x1500, qui font sens maintenant trop

La solution est de sauvegarder trois (ou plus) blocs et adresse en avant trois (ou plus) blocs:.

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();