<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: SDRAM corrupt data in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518363#M2630</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Prabhakaran_Raja on Thu Feb 18 07:13:33 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have LPC4357 xplorer++ evl board and NXP LPC-Link debugger.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i using LPCXpresso v7.9.2 IDE.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In my evl board we have MT48LC8M32B2B5-6 SDRAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but i'm trying to interface SDRAM in all the way but i'm not able to interface with SDRAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;some keil examples are there but i cannot flash the *.afx through LPC-Link .&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Please any one suggest how flash using LPC-Link with keil examples?&lt;BR /&gt;AND please suggest any direct example of SDRAM interface using LPCXpresso v7.9.2 IDE.&lt;/STRONG&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:32:03 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:32:03Z</dc:date>
    <item>
      <title>SDRAM corrupt data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518361#M2628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nohabviktor on Wed Nov 05 01:46:49 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a problem to SDRAM on my custom LPC1788 board.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The board has two 16 bit SDRAM on 32 bit data bus.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Two SDRAM not working in 32 bit mode, only one in 16 bit mode.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In 16 bit mode is works fine with 54Mhz and 108 Mhz EMC clock and run the linux kernel, but 32 bit mode two sdram is &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;not working.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In 32 bit mode the data is corrupt, memtest is fail, linux image is crc error if I downloaded by tftp.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried the memory timing incrase and decrase, but nothing changed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The diff output:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The corrupt data different is always 2 byte in 2 Mbyte file:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;39906c39906&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a009be00: 2500ebcb 0a0346a9 46a846a9 0f00f1ba&amp;nbsp;&amp;nbsp;&amp;nbsp; ...%.F...F.F....&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a009be00: 2500b004 0a03ebcb 46a846a9 0f00f1ba&amp;nbsp;&amp;nbsp;&amp;nbsp; ...%.....F.F....&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62027c62027&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f2490: ffffffff ffffffff 00800000 0080ffff&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f2490: ffffffff ffffffff 00800000 ffffffff&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62029c62029&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f24b0: 00000000 00000000 00000400 00000000&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f24b0: 00000000 00000000 00000400 00000400&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62034c62034&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f2500: 00000000 00000000 00000000 00000000&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f2500: 00000000 00000000 00000001 00000000&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62424c62424&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f3d60: 00000000 00000001 a00d86bd a00d868c&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f3d60: 00000000 00000001 a00d8689 a00d86bd&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62579c62579&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f4710: a00fe7ec a00f0004 00000004 000001a4&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f4710: a00d8b07 a00fe7ec 00000004 000001a4&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;62701c62701&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00f4eb0: ffffffff 00000000 98968000 98960008&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00f4eb0: ffffffff 00000000 98968000 00000008&amp;nbsp;&amp;nbsp;&amp;nbsp; ................&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;64149c64149&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt; a00fa930: ffffffff 00000000 00000000 00007461&amp;nbsp;&amp;nbsp;&amp;nbsp; ............at..&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;---&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;gt; a00fa930: ffffffff 00000000 00000000 74737461&amp;nbsp;&amp;nbsp;&amp;nbsp; ............atst&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is my memory init in u-boot:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Enable power on EMC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lpc178x_periph_enable(LPC178X_SCC_PCONP_PCEMC_MSK, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Clock delay for EMC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_SCC-&amp;gt;emcdlyctl = ( 0x8 | (0x8 &amp;lt;&amp;lt; 8) | (0x8 &amp;lt;&amp;lt; 16) );&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Enable EMC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;emcctrl = LPC178X_EMC_CTRL_EN_MSK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Little-endian mode&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;emccfg = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Configure DRAM timing&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dy-&amp;gt;rascas =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(3 &amp;lt;&amp;lt; LPC178X_EMC_DYRASCAS_RAS_BITS) |&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(3 &amp;lt;&amp;lt; LPC178X_EMC_DYRASCAS_CAS_BITS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rdcfg =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(1 &amp;lt;&amp;lt; LPC178X_EMC_DYRDCFG_RD_BITS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_trp&amp;nbsp; = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_tras = 2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_srex = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_apr&amp;nbsp; = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_dal&amp;nbsp; = 5;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_wr&amp;nbsp;&amp;nbsp; = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rc&amp;nbsp;&amp;nbsp; = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rfc&amp;nbsp; = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_xsr&amp;nbsp; = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rrd&amp;nbsp; = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_mrd&amp;nbsp; = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;udelay(100000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//32bit databus: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef CONFIG_SDRAM_32_BIT_DATABUS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dy-&amp;gt;cfg = (1u &amp;lt;&amp;lt; 14) | (0u &amp;lt;&amp;lt; 12) | (3u &amp;lt;&amp;lt; 9) | (1u &amp;lt;&amp;lt; 7);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dy-&amp;gt;cfg = 0x0000680;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_ctrl = LPC178X_EMC_DYCTRL_CE_MSK | LPC178X_EMC_DYCTRL_CS_MSK |&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(LPC178X_EMC_DYCTRL_I_NOP &amp;lt;&amp;lt; LPC178X_EMC_DYCTRL_I_BITS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;udelay(200000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_ctrl =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC_DYCTRL_CE_MSK | LPC178X_EMC_DYCTRL_CS_MSK |&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(LPC178X_EMC_DYCTRL_I_PALL &amp;lt;&amp;lt; LPC178X_EMC_DYCTRL_I_BITS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rfsh = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;udelay(1000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_rfsh = 0x2E;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_ctrl =&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC_DYCTRL_CE_MSK | LPC178X_EMC_DYCTRL_CS_MSK |&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;(LPC178X_EMC_DYCTRL_I_MODE &amp;lt;&amp;lt; LPC178X_EMC_DYCTRL_I_BITS);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef CONFIG_SDRAM_32_BIT_DATABUS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tmp32 = *(volatile u32 *)(CONFIG_SYS_RAM_BASE | (0x32UL &amp;lt;&amp;lt; 13));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tmp32 = *(volatile u32 *)(CONFIG_SYS_RAM_BASE | (0x33UL &amp;lt;&amp;lt; 12));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC178X_EMC-&amp;gt;dy_ctrl = 0x0000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Enable DRAM buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//32bit databus: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef CONFIG_SDRAM_32_BIT_DATABUS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dy-&amp;gt;cfg = (1u &amp;lt;&amp;lt; 14) | (0u &amp;lt;&amp;lt; 12) | (3u &amp;lt;&amp;lt; 9) | (1u &amp;lt;&amp;lt; 7) | LPC178X_EMC_DYCFG_B_MSK;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dy-&amp;gt;cfg = 0x0000680 | LPC178X_EMC_DYCFG_B_MSK; //1&amp;lt;&amp;lt;19&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * Fill in global info with description of DRAM configuration&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;gd-&amp;gt;bd-&amp;gt;bi_dram[0].start = CONFIG_SYS_RAM_BASE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;gd-&amp;gt;bd-&amp;gt;bi_dram[0].size&amp;nbsp; = CONFIG_SYS_RAM_SIZE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;udelay(1000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please give me an advice on what could be the problem?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:32:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518361#M2628</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:32:02Z</dc:date>
    </item>
    <item>
      <title>Re: SDRAM corrupt data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518362#M2629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by MikeSimmonds on Wed Nov 05 05:34:42 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;We have a custom board with 1778 (same as 1788 but no LCD) with 32Mb of SDRAM implemented with 2 16bit wide devices.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The code is in M3 assembler, but since it is mostly loading values and then shoving them in to the EMC registers anyone&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;with a bit of intelligence who is prepared for a bit&amp;nbsp; of effort should be able to translate it back to "C".&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Or at the very least see what numbers are being fed to which EMC registers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note the register offset definitions do not exactly match the names in the UM, but the offsets are a blatent clue&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for translation. And, if necessary, see the Arm Architecture Manual version 7-M for the opcodes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Setting up the pins is not shown, but you should already know how to do this. Nor is enabling the EMC itself.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My setup assumes an EClk of 60MHz (120 divided by 2).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You will have to hand work the macros with (a) you desired clock speed, and (b) the various timings from the datasheet&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for your memory devices. [the tXXX names match the datasheet tables]. [Or make "C" macros.]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, if you are prepared to make an effort, this is a WORKING setup (been stable for 18 months plus).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;;=======================================================================!
; LIBRAM.SCopyright (c) 2012 by Data Display UK Ltd.10-08-12!
;=======================================================================!

; vim: set ts=8 sw=8:; [tabs:8]

.file"LibRam.s"
.syntax unified
.thumb
.include "amacs.inc"
.include "LibPid.inc"

;-----------------------------------------------------------------------!
; Publics!
;-----------------------------------------------------------------------!

.globalInitRam, InitLPRAM, InitFPGA, InitSDRAM
.globalMemTestData, MemTestAddr, MemTestDev, MemTestSDRAM

.globalIsRamOk

;-----------------------------------------------------------------------!
; Constants and Equates!
;-----------------------------------------------------------------------!

scsBase= 0x400FC000; APB1-31 System Control &amp;amp; Status

scsSCS= 0x1A0;
scsEClkSel= 0x100;
scsEDelay= 0x1DC;
scsECal= 0x1E0;

;------------------------------------------------------------------------
emcBase= 0x2009C000; External Memory Controller

emcCtrl= 0x000;
emcStatus= 0x004;
emcConfig= 0x008;

emcDCtrl= 0x020;
emcDRefresh= 0x024;
emcDRConfig= 0x028;
emcDRPrchg= 0x030;
emcDRas= 0x034;
emcDSRex= 0x038;
emcDApr= 0x03C;
emcDDal= 0x040;
emcDWr= 0x044;
emcDRC= 0x048;
emcDRfc= 0x04C;
emcDXsr= 0x050;
emcDRrd= 0x054;
emcDMrd= 0x058;

emcDConfig0= 0x100; SDRAM A000 0000 (32 MByte)
emcDRasCas0= 0x104;

;emcDConfig1= 0x120;
;emcDRasCas1= 0x124;

;emcDConfig2= 0x140;
;emcDRasCas2= 0x144;

;emcDConfig3= 0x160;
;emcDRasCas3= 0x164;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;
emcSExtWait= 0x080;

emcSConfig0= 0x200; LPRAM 8000 0000 (512 KByte)
emcSWaitWen0= 0x204;
emcSWaitOen0= 0x208;
emcSWaitRd0= 0x20C;
emcSWaitPage0= 0x210;
emcSWaitWr0= 0x214;
emcSWaitTurn0= 0x218;

emcSConfig1= 0x220;&amp;nbsp; FPGA 9000 0000 (MMIO)
emcSWaitWen1= 0x224;
emcSWaitOen1= 0x228;
emcSWaitRd1= 0x22C;
emcSWaitPage1= 0x230;
emcSWaitWr1= 0x234;
emcSWaitTurn1= 0x238;

;emcSConfig2= 0x240;
;emcSWaitWen2= 0x244;
;emcSWaitOen2= 0x248;
;emcSWaitRd2= 0x24C;
;emcSWaitPage2= 0x250;
;emcSWaitWr2= 0x254;
;emcSWaitTurn2= 0x258;

;emcSConfig3= 0x260;
;emcSWaitWen3= 0x264;
;emcSWaitOen3= 0x268;
;emcSWaitRd3= 0x26C;
;emcSWaitPage3= 0x270;
;emcSWaitWr3= 0x274;
;emcSWaitTurn3= 0x278;

;-----------------------------------------------------------------------!
; CODE!
;-----------------------------------------------------------------------!
.text
.align 4,0
vTag:.asciz"@(#) LibRam.s v 1.00.0"
.align 4,0

;------------------------------------------------------------------------
emcPins:; Port&amp;nbsp;&amp;nbsp; Pin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Count&amp;nbsp;&amp;nbsp;&amp;nbsp; Func&amp;nbsp; Flags
.word(1&amp;lt;&amp;lt;28)+(25&amp;lt;&amp;lt;20)+( 1&amp;lt;&amp;lt;12)+(5&amp;lt;&amp;lt;8)+0x00; clock out for PLD
.word(2&amp;lt;&amp;lt;28)+(16&amp;lt;&amp;lt;20)+( 3&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09; See
.word(2&amp;lt;&amp;lt;28)+(20&amp;lt;&amp;lt;20)+( 1&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09; Matrix v6
.word(2&amp;lt;&amp;lt;28)+(24&amp;lt;&amp;lt;20)+( 1&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09;
.word(2&amp;lt;&amp;lt;28)+(28&amp;lt;&amp;lt;20)+( 4&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09;
.word(3&amp;lt;&amp;lt;28)+( 0&amp;lt;&amp;lt;20)+(32&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09; Data bus
.word(4&amp;lt;&amp;lt;28)+( 0&amp;lt;&amp;lt;20)+(19&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09; Addr bus
.word(4&amp;lt;&amp;lt;28)+(24&amp;lt;&amp;lt;20)+( 4&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09;
.word(4&amp;lt;&amp;lt;28)+(30&amp;lt;&amp;lt;20)+( 2&amp;lt;&amp;lt;12)+(1&amp;lt;&amp;lt;8)+0x09,0; Terminate

; add pullup and fast slew

;-----------------------------------------------------------------------!
; Init All RAM!
;-----------------------------------------------------------------------!

fn InitRam

push{lr}; save regs
;---------------------------------------;
movsr0, pEMC; enable peripheral clock
blPowerOn; i.e PowerOn(pEMC)
adrr0, emcPins; Assign all pins
blPinSetup;

;---------------------------------------;
ldrr3, =scsBase; emc global options
ldrr0, [r3, scsSCS]; (i.e x = LPC_SYSTEM-&amp;gt;scsSCS) LPC Open names are a guess
bicsr0, 0x07; NB equiv to x = x &amp;amp; ~number
orrsr0, 0x04; addr shift/full reset/!burst NB equiv to x = x | number
strr0, [r3, scsSCS]; i.e LP_SYSTEM-&amp;gt;scsSCS = x

movr0, 1; EClk selection
strr0, [r3, scsEClkSel]; by 2 to not exceed max (80MHz)

movwr0, (16&amp;lt;&amp;lt;8)+(16&amp;lt;&amp;lt;0); FB = 4, CMD = 2 (x 250 psec)
strr0, [r3, scsEDelay]; for SDRAMFIX ME !!!

;---------------------------------------;
ldrr3, =emcBase; get EMC base addr
movr0, (0&amp;lt;&amp;lt;2)+(0&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0); !low power/!mirror/enable
strr0, [r3, emcCtrl];
movsr0, (0&amp;lt;&amp;lt;1)+(0&amp;lt;&amp;lt;0); clk ratio 1:1/little endian
strr0, [r3, emcConfig];
movsr0, 0;
strr0, [r3, emcSExtWait]; not using 'extended wait'

;---------------------------------------;
blInitLPRAM; want LPRAM 'call i.e InitLPRAM()'
blInitFPGA; want FPGA
blInitSDRAM; want SDRAM

;---------------------------------------;
movr0, (0&amp;lt;&amp;lt;2)+(0&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0); !low power/!mirror/enable
strr0, [r3, emcCtrl]; now, (re)enable the EMC
pop{pc}; return

fe InitRam

;-----------------------------------------------------------------------!
; Init Dynamic RAM!
;-----------------------------------------------------------------------!

eClk= (120/2); memory clock (CClk/2) = 60 MHz [i.e a #define]

; select one of Row-Bank-Column or Bank-Row-Column

AMD= 0; addr mode: 0 = R-B-C, 1 = B-R-C
MSF= ((9+2+2)-(AMD*2)); Mode data shift factor
; [9 cols, 4 banks, 32bit bus]
CL= 3; CAS Latency (tClks)

.macrons2clk sym ns; symbol name, duration in nsec*10
\sym= (((\ns*eClk)+9999)/10000); ns to memory clocks (round up)
.endm

ns2clktRP,&amp;nbsp; 200; 20.0 ns see MT48LC16M.pdf
ns2clktRAS, 440; 44.0 ns
ns2clktXSR, 750; 75.0 ns
ns2clktAPR, 200; 20.0 ns (using tRCD)
tDAL&amp;nbsp; = 5;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; tClk
ns2clktWR,&amp;nbsp;&amp;nbsp; 75;&amp;nbsp; 7.5 ns [plus 1 tClk]
ns2clktRC,&amp;nbsp; 660; 66.0 ns
ns2clktRFC, 660; 66.0 ns
ns2clktRRD, 150; 15.0 ns
tMRD&amp;nbsp; = 2;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; tClk

ns2clktRCD, 200; 20 ns

ns2ClkRFP,&amp;nbsp; (640000000/4096); 4K refresh cycles per 64 mSec

ModeWd= ((0&amp;lt;&amp;lt;9)+(0&amp;lt;&amp;lt;7)+(CL&amp;lt;&amp;lt;4)+(0&amp;lt;&amp;lt;3)+(2&amp;lt;&amp;lt;0))
; Burst/Normal/CL/Seq/Burst=4

;------------------------------------------------------------------------
fn InitSDRAM

movr0, (0&amp;lt;&amp;lt;2)+(0&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0); !low power/!mirror/enable
strr0, [r3, emcCtrl]; EMC needs to be enabled for init
movsr0, (0&amp;lt;&amp;lt;8)+(0&amp;lt;&amp;lt;0); clock = 1:1, Little Endian
strr0, [r3, emcConfig];

movwr0, (1&amp;lt;&amp;lt;14)+(AMD&amp;lt;&amp;lt;12)+(2&amp;lt;&amp;lt;9)+(1&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;3)
; 1 = 32bit data bus
; 0 = Row-Bank-Column [AMD]
; 2 = 128 Kbit device
; 1 = 16bit device [times 2]
; 0 = SDRAM
movtr0, (0&amp;lt;&amp;lt;4)+(0&amp;lt;&amp;lt;3); !WP/!buffer
strr0, [r3, emcDConfig0]; set options as above

movwr0, (CL&amp;lt;&amp;lt;8)+(tRAS&amp;lt;&amp;lt;0); set ras and cas
strr0, [r3, emcDRasCas0];
movsr0, 1; read strategy: command delayed
strr0, [r3, emcDRConfig];

movsr0, tRP-1;
strr0, [r3, emcDRPrchg];
movsr0, tRAS-1;
strr0, [r3, emcDRas];
movsr0, tXSR-1;
strr0, [r3, emcDSRex];
movsr0, tAPR-1;
strr0, [r3, emcDApr];
movsr0, tDAL;
strr0, [r3, emcDDal];
movsr0, tWR-1+1;
strr0, [r3, emcDWr];
movsr0, tRC-1;
strr0, [r3, emcDRC];
movsr0, tRFC-1;
strr0, [r3, emcDRfc];
movsr0, tXSR-1;
strr0, [r3, emcDXsr];
movsr0, tRRD-1;
strr0, [r3, emcDRrd];
movsr0, tMRD-1;
strr0, [r3, emcDMrd];

movwr0, (3&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;5)+(0&amp;lt;&amp;lt;2)+(1&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0)
strr0, [r3, emcDCtrl]; NOP/Clk/!SRef/ClkAll/ClkE

movwr0, (120*100)/3; delay 100 uSec
0:subsr0, 1;
bne0b;

movwr0, (2&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;5)+(0&amp;lt;&amp;lt;2)+(1&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0)
strr0, [r3, emcDCtrl]; PALL/Clk/!SRef/ClkAll/ClkE
movsr0, 1; set fastest refresh
strr0, [r3, emcDRefresh];

movwr0, (120*10)/3; delay 10 uSec [gt 128 tClk]
0:subsr0, 1;
bne0b;

movsr0, (RFP&amp;gt;&amp;gt;4); set 'normal' refresh rate
movsr0, 25; DEBUG override
strr0, [r3, emcDRefresh];

movwr0, (120*10)/3; delay 10 uSec [gt 128 tClk]
0:subsr0, 1;
bne0b;

movwr0, (1&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;5)+(0&amp;lt;&amp;lt;2)+(1&amp;lt;&amp;lt;1)+(1&amp;lt;&amp;lt;0)
strr0, [r3, emcDCtrl]; MODE/Clk/!SRef/ClkAll/ClkE

movwr0, ModeWd; load the mode register
lslsr0, MSF; apply addr shift
movsr1, 0xA0000000; SDRAM base address
ldrr0, [r1, r0]; 'set' mode

movwr0, (120*10)/3; delay 10 uSec [gt 128 tClk]
0:subsr0, 1;
bne0b;

movwr0, (0&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;5)+(0&amp;lt;&amp;lt;2)+(0&amp;lt;&amp;lt;1)+(0&amp;lt;&amp;lt;0)
strr0, [r3, emcDCtrl]; normal running

movwr0, (1&amp;lt;&amp;lt;14)+(AMD&amp;lt;&amp;lt;12)+(3&amp;lt;&amp;lt;9)+(1&amp;lt;&amp;lt;7)+(0&amp;lt;&amp;lt;3)
; 32bit data bus
; 1 = Bank-Row-Column
; 256 Kbit device
; 16bit device [times 2]
; SDRAM
movtr0, (0&amp;lt;&amp;lt;4)+(1&amp;lt;&amp;lt;3); !WP/buffer [Enable Buffer]
strr0, [r3, emcDConfig0]; set options as above
bxlr;

fe InitSDRAM

;-----------------------------------------------------------------------!
; MemTestSDRAM!
;-----------------------------------------------------------------------!

MemSz= 32*1024*1024; nbr bytes (32 MB)

fn MemTestSDRAM

;---------------------------------------;
; populate ram with deterministic data;

movsr3, 0xA0000000; SDRAM
movsr2, MemSz; nbr bytes (64 MB)
movsr1, 11; start value

0:strr1, [r3], 4; *p++ = v++
ldrr0, [r3, -4]; read back
addsr1, 1;
subsr2, 4; while (--nWords)
bgt0b;

;---------------------------------------;
; validate and invert;

movsr3, 0xA0000000; SDRAM
movsr2, MemSz; nbr bytes (32 MB)
movsr1, 11; start value

0:ldrr0, [r3]; v = *p
subsr0, r0, r1; validate
bne9f; OOPS
mvnsr0, r1; inverse
strr0, [r3], 4; *p++ = ~(v++)
addsr1, 1;
subsr2, 4; while (--nWords)
bgt0b;

;---------------------------------------;
; validate and clear;

movsr3, 0xA0000000; SDRAM
movsr2, MemSz; nbr bytes (32 MB)
movsr1, 11; start value

0:ldrr0, [r3]; v = ~*p
mvnsr0, r0;
subsr0, r0, r1; validate
bne9f; OOPS
movsr0, 0; clear
strr0, [r3], 4; *p++ = 0
addsr1, 1; v++
subsr2, 4; while (--nWords)
bgt0b;

9:bxlr; return (0 = ok)

fe MemTestSDRAM

;-----------------------------------------------------------------------!
; IsRamOk!
;-----------------------------------------------------------------------!

; r0 = start addr, r1 = size bytes

fn IsRamOk

push{r4,lr}; save regs
addsr1, 3; round up
movsr1, r1, lsr 2; cvt&amp;nbsp; to dwords

0:ldrr4, [r0]; save current
movsr2, 0xAAAAAAAA; probe
strr2, [r0];
ldrr3, [r0];
strr4, [r0]; replace current
subsr2, r3; check
cbnzr2, 9f; OOPS!

movsr2, 0x55555555; probe
strr2, [r0];
ldrr3, [r0];
strr4, [r0], 4; replace current -- bump addr
subsr2, r3; check
cbnzr2, 9f; OOPS!
subsr1, 1; loop
bne0b;

9:movsr0, r2; zero = OK
pop{r4,pc}; return

fe IsRamOk

;-----------------------------------------------------------------------!
; LDR pool!
;-----------------------------------------------------------------------!
.align 2,0xFF

Pool: .pool; LDR pool

;------------------------------------------------------------------------
.align4,0xFF
;========================================================================

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this is of use to someone -- Cheers, Mike&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:32:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518362#M2629</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:32:03Z</dc:date>
    </item>
    <item>
      <title>Re: SDRAM corrupt data</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518363#M2630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Prabhakaran_Raja on Thu Feb 18 07:13:33 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have LPC4357 xplorer++ evl board and NXP LPC-Link debugger.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i using LPCXpresso v7.9.2 IDE.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In my evl board we have MT48LC8M32B2B5-6 SDRAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;but i'm trying to interface SDRAM in all the way but i'm not able to interface with SDRAM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;some keil examples are there but i cannot flash the *.afx through LPC-Link .&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Please any one suggest how flash using LPC-Link with keil examples?&lt;BR /&gt;AND please suggest any direct example of SDRAM interface using LPCXpresso v7.9.2 IDE.&lt;/STRONG&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:32:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SDRAM-corrupt-data/m-p/518363#M2630</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:32:03Z</dc:date>
    </item>
  </channel>
</rss>

