Escribiendo en PSRAM EZ Flash 3 en 1
-
22-08-2019 - |
Pregunta
Estoy tratando de encontrar la manera de programar el PSRAM en el GBA tamaño EZ Flash 3 en 1 tarjeta. Básicamente repiten lo GBA Exploader y otros programas lo hacen.
Si selecciono un bloque y programarlo a continuación, lea de nuevo la primera media palabra es siempre 0x1500 o algo por el estilo, pero el resto de los datos está bien.
Si en la escritura selecciono el bloque anterior, empezar a escribir en 0x20000 bytes en ese bloque (el tamaño de un bloque de lo que he determinado). Posterior de la lectura del bloque deseado sigue mostrando esa primera media palabra tan mal, pero el resto de las medias palabras son correctas.
Solución
Yo estaba presente "cerca que había tratado de copia de seguridad de uno y luego dos bloques, pero no tres, y que era el truco En trasera aviso de la vista de cómo muchas de las funciones de escritura a 0x08000000, 0x08020000 y 0x08040000:..
void OpenNorWrite()
{
*(vuint16 *)0x9fe0000 = 0xd200;
*(vuint16 *)0x8000000 = 0x1500;
*(vuint16 *)0x8020000 = 0xd200;
*(vuint16 *)0x8040000 = 0x1500;
*(vuint16 *)0x9C40000 = 0x1500;
*(vuint16 *)0x9fc0000 = 0x1500;
}
Los datos corruptos siempre fue 0x1500, que tiene sentido ahora también.
La solución es hacer copias de seguridad de tres (o más) bloques y la dirección hacia adelante tres (o más) bloques:
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();