Domanda

Sto cercando di capire come programmare il PSRAM nel GBA dimensionato EZ Flash 3 in 1 carta. In sostanza ciò che ripetono GBA Exploader e altri programmi fanno.

Se si seleziona un blocco e programmarlo poi leggerlo di nuovo il primo halfword è sempre 0x1500 o qualcosa di simile, ma il resto dei dati va bene.

Se sulla rivalutazione seleziono blocco precedente, iniziare a scrivere a 0x20000 byte in quel blocco (la dimensione di un blocco da quello che ho determinato). Leggendo indietro dal blocco desiderato mostra ancora che il primo halfword come sbagliato, ma il resto dei halfword sono corrette.

È stato utile?

Soluzione

Sono stato questo "vicino che aveva tentato di eseguire il backup di uno e poi due blocchi, ma non tre e che è stato il trucco In cerva preavviso di vista di come molte delle funzioni scrivere a 0x08000000, 0x08020000, e 0x08040000:..

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

I dati corrotti era sempre 0x1500, che ha senso anche ora.

La soluzione è quella di eseguire il backup di tre (o più) blocchi e affrontare in avanti di tre (o più) blocchi:

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top