Este es el diseño de mi PCB:
Miproblemaes:
CuandointentéaccederaSDRamconmicódigodeejemplo(códigodepruebadememoria),todopareceestarbien.TodoslosdatosdeSDRamcambianloquenecesito.PerocuandointentéaccederaunmontóndelugaresenSDRam,losdatossecorrompen.Elcódigoestábien,heprobadoelcódigoenmieval.Juntaynosehaproducidoningúnproblema.Podríaentenderquesitodoslosdatossecorrompenencadaintento.
Aquíestánloscódigosconproblemaysinproblema:
Mostrarécómosehaafectadolamemoria.
Laprimerafotomuestraunalecturadeescrituraexitosa:
La segunda foto muestra datos erróneos:
Yunainteresanteeslatercerafoto.Nohecambiadonada.sólodesplácesehaciaarribayhaciaabajo.Ylosdatosdefectuososcambianysemuevenalosotroslugares.siexisteunproblemadelectura,¿porquénoocurrecuandousoscroll,enlaventanadememoriaconlabandejadecódigosexitosa?Esperoquelasfotospuedanserútiles.
Esta es mi base:
aquíestámicódigodetrabajosimplemente.sinfaltaCadavezquefuncionaperfectamente.
SDRAMInit();wr_ptr=(uint32_t*)SDRAM_BASE_ADDR;char_wr_ptr=(uint8_t*)wr_ptr;/*Clearcontentbefore8bitaccesstest*/_DBG_("Clear content of SDRAM...");
for ( i= 0; i < SDRAM_SIZE/4; i++ )
{
*wr_ptr++ = 0x00;
}
/* 8 bit write */
_DBG_("Writing in 8 bits format...");
for (i=0; i<SDRAM_SIZE/4; i++)
{
*char_wr_ptr++ = 0x11;
*char_wr_ptr++ = 0x22;
*char_wr_ptr++ = 0x33;
*char_wr_ptr++ = 0x44;
}
/* verifying */
_DBG_("Verifying data...");
wr_ptr = (uint32_t *)SDRAM_BASE_ADDR;
for ( i= 0; i < SDRAM_SIZE/8; i++ )
{
if ( *wr_ptr != 0x44332211 ) /* be aware of endianess */
{
/* byte comparison failure */
_DBG_("Verifying fail, testing terminated!");
while ( 1 ); /* fatal error */
}
wr_ptr++;
}
/* byte comparison succeed. */
_DBG_("Continue writing in 16 bits format...");
wr_ptr = (uint32_t *)SDRAM_BASE_ADDR;
short_wr_ptr = (uint16_t *)wr_ptr;
/* Clear content before 16 bit access test */
_DBG_("Clear content of SRAM...");
for ( i= 0; i < SDRAM_SIZE/4; i++ )
{
*wr_ptr++ = 0;
}
/* 16 bit write */
_DBG_("Writing in 16 bits format...");
for (i=0; i<(SDRAM_SIZE/4); i++)
{
*short_wr_ptr++ = 0x5AA5;
*short_wr_ptr++ = 0xAA55;
}
/* Verifying */
wr_ptr = (uint32_t *)SDRAM_BASE_ADDR;
//wr_ptr -= SDRAM_BASE_ADDR/4;
for ( i= 0; i < SDRAM_SIZE/4; i++ )
{
if ( *wr_ptr != 0xAA555AA5 ) /* be aware of endianess */
{
/* 16-bit half word failure */
_DBG_("Verifying fail, testing termintated!");
while ( 1 ); /* fatal error */
}
wr_ptr++;
}
/* 16-bit half word comparison succeed. */
_DBG_("Verifying complete, testing terminated!");
while(1);