Написание PSRAM в EZ Flash 3 в 1 - PullRequest
0 голосов
/ 18 мая 2009

Я пытаюсь выяснить, как запрограммировать PSRAM на карту памяти EZ Flash 3 в 1 GBA. В основном, повторяйте действия GBA Exploader и других программ.

Если я выбрал блок и запрограммировал его, затем прочитал его обратно, первое полуслово всегда 0x1500 или что-то в этом роде, но с остальными данными все в порядке.

Если при записи я выбираю предыдущий блок, начинаю запись в 0x20000 байтов в этот блок (размер блока из того, что я определил). Чтение из нужного блока все еще показывает, что первое полуслово неверно, но остальные половина слова правильные.

1 Ответ

0 голосов
/ 27 мая 2009

Я был так "близок. Я пытался сделать резервную копию одного, а затем двух блоков, но не трех, и это было хитростью. Задним взглядом заметьте, сколько функций записывают в 0x08000000, 0x08020000 и 0x08040000:

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

Поврежденные данные всегда были 0x1500, что тоже имеет смысл.

Решение заключается в резервном копировании трех (или более) блоков и адресации вперед трех (или более) блоков:

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