c - 将 PSRAM 写入 EZ Flash 3 合 1

标签 c embedded arm nintendo-ds game-boy-advance

我正在尝试弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 GBA Exploader 和其他程序所做的事情。

如果我选择一个 block 并对其进行编程,然后将其读回,第一个半字始终为 0x1500 或类似的值,但其余数据都很好。

如果在写入时我选择前一个 block ,则从 0x20000 字节开始写入该 block (我确定的 block 的大小)。从所需 block 读回仍然显示第一个半字错误,但其余半字正确。

最佳答案

我就这么“接近”。我尝试备份一个 block ,然后备份两个 block ,但不是三个,这就是窍门。事后请注意有多少函数写入 0x08000000、0x08020000 和 0x08040000:

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

损坏的数据始终是 0x1500,现在也有意义。

解决方案是备份三个(或更多) block 并转发三个(或更多) block :

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

关于c - 将 PSRAM 写入 EZ Flash 3 合 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/876331/

相关文章:

c - 使为一个处理器编写的嵌入式 C 代码在另一个处理器上工作的条件是什么(当体系结构相同时)?

c - 在 Apple MAC book 上为 STM 编译 ARM 二进制文件的问题

c++ - 随机存取与 SSE 对齐的内存

c - shell如何扩展*.c?

linux - Linux 中的离线 ARM 内核是否仍然耗电?

linux - 通过X11发送触摸屏事件

c - 嵌入式C编程: Clearing LCD properly

c - 将数据从 cygwin 可执行文件 [C] 传输到托管程序 [托管 C++]?

c - linux中 "times"系统调用的返回值是什么

c - 用于 MSP430FR5969 的串口