SRAM error

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

SRAM error

392 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by yaofree on Wed Oct 22 01:32:59 MST 2014
hi, I meet a SRAM problem.
After writing a byte/word, I can read it ok . But After reading, the byte/word is disappeared and become a zero.  In other words, the writed word is disappeard and changed to zero after another read/write opperation.
I am very sad for 2 days for this. :(( .   Can anyone  help me ?
the SRAM chip is AS4C16M16S (256Mbit/16M * 16bit , 4Mword  * 16 bit * 4-bank)

This is my part of  SDRAM_Init():
LPC_SCU->EMCDELAYCLK = 0x2222 ; // 3.5 ns EMC clock delay
//Also at higher clock rates you need to change EMCDELAYCLK (I have 0x0000 for up to 96MHz, 0x1111 for 97 to 129MHz and 0x2222 above that).

LPC_EMC->CONTROL = 0x00000001;// reset
LPC_EMC->CONFIG  = 0x00000000;
LPC_EMC->DYNAMICCONFIG1    = 0<<14 | 3<<9 | 1<<7; /* 256Mb, 16Mx16, 4 banks, row=13, column=9 */ // yao_todo

pclk = CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE);

LPC_EMC->DYNAMICRASCAS1    = 0x00000303; /* 3 RAS, 3 CAS latency */
LPC_EMC->DYNAMICREADCONFIG = 0x00000003; /* Command delayed strategy, using EMCCLKDELAY */

LPC_EMC->DYNAMICRP         = NS2CLK(pclk, 20);
LPC_EMC->DYNAMICRAS        = NS2CLK(pclk, 60);
LPC_EMC->DYNAMICSREX       = NS2CLK(pclk, 63);
LPC_EMC->DYNAMICAPR        = NS2CLK(pclk, 63);
LPC_EMC->DYNAMICDAL        = NS2CLK(pclk, 63);
LPC_EMC->DYNAMICWR         = NS2CLK(pclk, 20);
LPC_EMC->DYNAMICRC         = NS2CLK(pclk, 70);
LPC_EMC->DYNAMICRFC        = NS2CLK(pclk, 63);
LPC_EMC->DYNAMICXSR        = NS2CLK(pclk, 63);
LPC_EMC->DYNAMICRRD        = NS2CLK(pclk, 14);
LPC_EMC->DYNAMICMRD        = NS2CLK(pclk, 20);//0x00000002;

    TIM_Waitus(100);   /* wait 100ms */
   
LPC_EMC->DYNAMICCONTROL    = 0x00000183; /* Issue NOP command */

TIM_Waitus(200);   /* wait 200ms */
LPC_EMC->DYNAMICCONTROL    = 0x00000103; /* Issue PALL command */

LPC_EMC->DYNAMICREFRESH    = /*2*/EMC_SDRAM_REFRESH(pclk,70); /* ( n * 16 ) -> 32 clock cycles */

TIM_Waitus(200);   /* wait 200ms */

tmpclk = (uint64_t)15625 *(uint64_t)pclk/1000000000/16; //
LPC_EMC->DYNAMICREFRESH    = tmpclk;

LPC_EMC->DYNAMICCONTROL    = 0x00000083; /* Issue MODE command */

//Timing for 48/60/72MHZ Bus
temp = *((volatile uint32_t *)(SDRAM_ADDR_BASE | (2<<4| 3)<<11)); /* 4 burst, 3 CAS latency */
temp = temp;

LPC_EMC->DYNAMICCONTROL    = 0;/* Issue NORMAL command */
LPC_EMC->DYNAMICCONFIG1    |= 1<<19;


Labels (1)
0 Kudos
1 Reply

307 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by mc on Fri Oct 24 09:12:27 MST 2014
Hi yaofree,
Which device are you using? Full Part number?
Can you also post schematic of your custom board?
0 Kudos