Question

Je suis en train de comprendre comment programmer la PSRAM dans la GBA de taille EZ Flash 3 en 1 carte. Fondamentalement, ce que répètent GBA Exploader et d'autres programmes font.

Si je sélectionne un bloc et d'un programme dans sa version antérieure de nouveau la première demi-mot est toujours 0x1500 ou quelque chose comme ça, mais le reste des données est très bien.

Si sur l'écriture que je sélectionne le bloc précédent, commencer à écrire à 0x20000 octets dans ce bloc (la taille d'un bloc de ce que j'ai déterminé). Relecture du bloc souhaité montre encore que la première demi-mot comme mal, mais le reste des demi-mots sont corrects.

Était-ce utile?

La solution

J'étais cette «proche 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 aussi.

La solution consiste à 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top