Вопрос

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

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

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

Это было полезно?

Решение

Я был так "близок".Я попытался сделать резервную копию на один, а затем на два квартала, но не на три, и в этом был весь фокус.Обратите внимание, сколько функций записывают в 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top