我试图弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 GBA Exploader 和其他程序所做的。
如果我选择一个块并对其进行编程,然后将其读回第一个半字始终是 0x1500 或类似的东西,但其余数据都很好。
如果在写入时我选择了前一个块,则从 0x20000 字节开始写入该块(根据我确定的块大小)。从所需块读回仍然显示第一个半字是错误的,但其余半字是正确的。
我试图弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 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();