<?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 LPC1778 seems like not recognizing the SRAM MSB address in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1778-seems-like-not-recognizing-the-SRAM-MSB-address/m-p/522955#M5591</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by arion2001 on Wed Feb 25 00:18:55 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am doing some read write test on my SRAM hooking up to LPC as shown in the attached image. So I am getting some pretty strange result. It seems like those page override or memory aliasing kind of thing. The debugger seems to be showing that after every 1MB there is a repeated copy of the information I wrote into the SRAM. I understand that the upper limit of the memory should be defined as 0x980FFFFF instead of 0x98100000 so I introduced a condition in the this portion of the code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How I defined my pins(OEN pin is correct by the way)&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
#include &amp;lt;LPC177x_8x.h&amp;gt;
void FLASH_Autoselect(void);
void Flash_CFI(void);
unsigned char Flash_Read(unsigned long Source_Address);
unsigned char EMC_Write(unsigned short DQ_In, unsigned long Target_Address);
unsigned char EMC_Read(unsigned short *DQ_Out, unsigned long Source_Address);
unsigned char Flash_SinWord_Prog(unsigned long Target_Address);
unsigned char NOR_Sec_Erase(unsigned long Target_Address);
int NewmemTest(void);
void Memtest(void);
unsigned char EMC_Write_Long(unsigned long DQ_In, unsigned long Target_Address);
unsigned char SRAM_Testwrite(unsigned long DQ_In, unsigned long Target_Address);
void SRAM_Init(void);

#define SRAM_OnChip_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10000000 
#define SRAM_OnChip_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000FFFF
#define Flash0_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x80000000&amp;nbsp;&amp;nbsp; 
#define Flash0_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x80FFFFFF 
#define Flash1_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x81000000
#define Flash1_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x81FFFFFF
#define SRAM0_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x98000000 
#define SRAM0_EndAddr&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; 0x980FFFFF 
#define SRAM1_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9C000000 
#define SRAM1_EndAddr&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; 0x9C0FFFFF 

#define WRITE_COMPLETE&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; 0
#define WRITE_ABORT&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; 1
#define TIME_OUT&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; 2
#define WRITE_SUSPEND&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; 3
#define WRITE_NOT_COMPLETE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4
#define INVALID_ADDRESS&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; 5

//EMC_CS2 SRAM
//P2[14]
#define SRAM_CS2_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P2_14 |= 0x31

//EMC_OEN Shared
//P4[24]
#define OEN_SEL&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; LPC_IOCON-&amp;gt;P4_24 |= 0x31

//EMC_WEN Shared
//P4[25]
#define WEN_SEL&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; LPC_IOCON-&amp;gt;P4_25 |= 0x31

//EMC_BLS0 SRAM Lower Byte
//P4[26]
#define SRAM_BLS0_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P4_26 |= 0x31

//EMC_BLS1 SRAM Upper Byte
//P4[27]
#define SRAM_BLS1_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P4_27 |= 0x31

//Nor_Flash /CS0 pin4[30]
#define NORFLASH_CS0_SELLPC_IOCON-&amp;gt;P4_30 |= 0x31

//Nor_Flash /CS1 pin4[31]
#define NORFLASH_CS1_SELLPC_IOCON-&amp;gt;P4_31 |= 0x31

//Nor_Flash RY/BY pin0[4]
//Ready Busy indicates running in progress. At High Z = ready, at Vil = actively erasing/programming
#define NORFLASH_RYBY_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P0_4&amp;nbsp;&amp;nbsp; |= 0x218 
#define NORFLASH_RYBY_IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO4-&amp;gt;DIR &amp;amp;= ~(0x10)
#define NORFLASH_RYBY_BIT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO4-&amp;gt;PIN &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10

static void pinConfig_EMC(void) {
//Select slew rate and also config for EMC use = 0x31 , with pullup
LPC_IOCON-&amp;gt;P3_0 |= 0x31; // D0 @ P3.0 
LPC_IOCON-&amp;gt;P3_1 |= 0x31; // D1 @ P3.1 
LPC_IOCON-&amp;gt;P3_2 |= 0x31; // D2 @ P3.2 
LPC_IOCON-&amp;gt;P3_3 |= 0x31; // D3 @ P3.3 

LPC_IOCON-&amp;gt;P3_4 |= 0x31; // D4 @ P3.4 
LPC_IOCON-&amp;gt;P3_5 |= 0x31; // D5 @ P3.5 
LPC_IOCON-&amp;gt;P3_6 |= 0x31; // D6 @ P3.6 
LPC_IOCON-&amp;gt;P3_7 |= 0x31; // D7 @ P3.7 

LPC_IOCON-&amp;gt;P3_8 |= 0x31; //D8 @ P3.8 
LPC_IOCON-&amp;gt;P3_9 |= 0x31; // D9 @ P3.9 
LPC_IOCON-&amp;gt;P3_10 |= 0x31; // D10 @ P3.10 
LPC_IOCON-&amp;gt;P3_11 |= 0x31; // D11 @ P3.11 

LPC_IOCON-&amp;gt;P3_12 |= 0x31; // D12 @ P3.12 
LPC_IOCON-&amp;gt;P3_13 |= 0x31; // D13 @ P3.13 
LPC_IOCON-&amp;gt;P3_14 |= 0x31; // D14 @ P3.14 
LPC_IOCON-&amp;gt;P3_15 |= 0x31; // D15 @ P3.15&amp;nbsp; //also&amp;nbsp; A-1 LSB address input in byte mode

//LPC_IOCON-&amp;gt;P4_0 |= 0x31; // A0 @ P4.0&amp;nbsp;&amp;nbsp;&amp;nbsp; //added in to mimic code, temporary not used
LPC_IOCON-&amp;gt;P4_1 |= 0x31; // A1 @ P4.1 
LPC_IOCON-&amp;gt;P4_2 |= 0x31; // A2 @ P4.2 
LPC_IOCON-&amp;gt;P4_3 |= 0x31; // A3 @ P4.3 

LPC_IOCON-&amp;gt;P4_4 |= 0x31; // A4 @ P4.4 
LPC_IOCON-&amp;gt;P4_5 |= 0x31; // A5 @ P4.5 
LPC_IOCON-&amp;gt;P4_6 |= 0x31; // A6 @ P4.6 
LPC_IOCON-&amp;gt;P4_7 |= 0x31; // A7 @ P4.7 

LPC_IOCON-&amp;gt;P4_8 |= 0x31; // A8 @ P4.8 
LPC_IOCON-&amp;gt;P4_9 |= 0x31; // A9 @ P4.9 
LPC_IOCON-&amp;gt;P4_10 |= 0x31; // A10 @ P4.10 
LPC_IOCON-&amp;gt;P4_11 |= 0x31; // A11 @ P4.11 

LPC_IOCON-&amp;gt;P4_13 |= 0x31; // A13 @ P4.13 
LPC_IOCON-&amp;gt;P4_14 |= 0x31; // A14 @ P4.14 
LPC_IOCON-&amp;gt;P4_15 |= 0x31; // A15 @ P4.15 
LPC_IOCON-&amp;gt;P4_16 |= 0x31; // A16 @ P4.16 

LPC_IOCON-&amp;gt;P4_17 |= 0x31; // A17 @ P4.17 
LPC_IOCON-&amp;gt;P4_18 |= 0x31; // A18 @ P4.18 
LPC_IOCON-&amp;gt;P4_19 |= 0x31; // A19 @ P4.19 
//LPC_IOCON-&amp;gt;P4_20 |= 0x31; // A20 @ P4.20 

//LPC_IOCON-&amp;gt;P4_21 |= 0x31; // A21 @ P4.21 
//LPC_IOCON-&amp;gt;P4_22 |= 0x31; // A22 @ P4.22 
//LPC_IOCON-&amp;gt;P4_23 |= 0x31; // A23 @ P4.23 
//LPC_IOCON-&amp;gt;P5_0&amp;nbsp; |= 0x31; // A24 @ P5.0 
//LPC_IOCON-&amp;gt;P5_1&amp;nbsp; |= 0x31; // A25 @ P5.1 

&amp;nbsp; //NORFLASH_CS0_SEL;
&amp;nbsp; //NORFLASH_CS1_SEL;
&amp;nbsp; //NORFLASH_RYBY_SEL;

&amp;nbsp; SRAM_CS2_SEL;
&amp;nbsp; SRAM_BLS0_SEL;
&amp;nbsp; SRAM_BLS1_SEL;
&amp;nbsp; OEN_SEL;
&amp;nbsp; WEN_SEL; 
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void Memtest(void)
{
&amp;nbsp; //Remember the end address where CPU and memory does not see A20 pin for SRAM.
&amp;nbsp; //unsigned short *start= (unsigned short *) 0x98000000UL;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; unsigned short *start= (unsigned short *) SRAM0_BaseAddr;&amp;nbsp; 
&amp;nbsp; unsigned short *finish =(unsigned short *)SRAM0_EndAddr; 
&amp;nbsp; unsigned int value=0;
&amp;nbsp; unsigned short pattern = 0x5555;
&amp;nbsp; unsigned short inv_pattern = 0xAAAA;
&amp;nbsp; unsigned short readback = 0;
&amp;nbsp; //unsigned int pattern = 0xdead;
&amp;nbsp; //unsigned int inv_pattern = 0xbeef;
&amp;nbsp; int i;
&amp;nbsp; int Memory_Size = 32;
&amp;nbsp; 
&amp;nbsp; //unsigned long Memory_Size = 1048576;
&amp;nbsp; 
&amp;nbsp; //int Memory_Size = 1048577;
&amp;nbsp; //int Memory_Size = 2097152;
&amp;nbsp; /*for(i = 0; i &amp;lt; Memory_Size; i+= 4)
&amp;nbsp; //for(i = 0; i &amp;lt; 32; i+= 1)&amp;nbsp; //try just 32 bytes first.
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *start = value; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; start++;
&amp;nbsp;&amp;nbsp;&amp;nbsp; value++;
&amp;nbsp; }*/
&amp;nbsp; for(i = 0; i &amp;lt; Memory_Size; i+= 2) //Populate SRAM with pattern
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *start = pattern;
&amp;nbsp;&amp;nbsp;&amp;nbsp; readback = *start;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start++;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //if(start&amp;gt;finish) //Boundary condition
&amp;nbsp;&amp;nbsp;&amp;nbsp; // {
&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // }
&amp;nbsp; }
&amp;nbsp; 
&amp;nbsp;&amp;nbsp; /*for(i = Memory_Size; i &amp;gt; 0; i-= 2)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *finish = value; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; finish--;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; }*/

}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; I understand that the upper limit of the memory should be defined as 0x980FFFFF instead of 0x98100000 so I introduced a condition in the this portion of the code, but I am still seeing it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void Memtest(void)
{
&amp;nbsp; //Remember the end address where CPU and memory does not see A20 pin for SRAM.
&amp;nbsp; //unsigned short *start= (unsigned short *) 0x98000000UL;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; unsigned short *start&amp;nbsp; = (unsigned short *)SRAM0_BaseAddr;&amp;nbsp; //0x98000000 
&amp;nbsp; unsigned short *finish = (unsigned short *)SRAM0_EndAddr;&amp;nbsp;&amp;nbsp; //0x980FFFFF 
&amp;nbsp; unsigned int value&amp;nbsp; = 0;
&amp;nbsp; unsigned short pattern = 0x5555;
&amp;nbsp; unsigned short inv_pattern = 0xAAAA;
&amp;nbsp; unsigned short readback = 0;
&amp;nbsp; //unsigned int pattern = 0xdead;
&amp;nbsp; //unsigned int inv_pattern = 0xbeef;
&amp;nbsp; int i;
&amp;nbsp; int Memory_Size = 32;
&amp;nbsp; 
&amp;nbsp; //unsigned long Memory_Size = 1048576;
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; EMC_Write(pattern, start);
&amp;nbsp; 
}


unsigned char EMC_Write(unsigned short DQ_In, unsigned long Target_Address) //address may need to use unsigned long to address 32 bits length address
{
&amp;nbsp; 
&amp;nbsp; if(Target_Address &amp;gt;= Flash0_BaseAddr &amp;amp;&amp;amp; Target_Address &amp;lt;= SRAM1_EndAddr)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; new_address = (unsigned short *)Target_Address; //the heart of the memory address translation
&amp;nbsp;&amp;nbsp;&amp;nbsp; *new_address = DQ_In;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
&amp;nbsp; }
&amp;nbsp; else
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; return INVALID_ADDRESS; //invalid address
&amp;nbsp; }

}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:56:18 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:56:18Z</dc:date>
    <item>
      <title>LPC1778 seems like not recognizing the SRAM MSB address</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1778-seems-like-not-recognizing-the-SRAM-MSB-address/m-p/522955#M5591</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by arion2001 on Wed Feb 25 00:18:55 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am doing some read write test on my SRAM hooking up to LPC as shown in the attached image. So I am getting some pretty strange result. It seems like those page override or memory aliasing kind of thing. The debugger seems to be showing that after every 1MB there is a repeated copy of the information I wrote into the SRAM. I understand that the upper limit of the memory should be defined as 0x980FFFFF instead of 0x98100000 so I introduced a condition in the this portion of the code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How I defined my pins(OEN pin is correct by the way)&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
#include &amp;lt;LPC177x_8x.h&amp;gt;
void FLASH_Autoselect(void);
void Flash_CFI(void);
unsigned char Flash_Read(unsigned long Source_Address);
unsigned char EMC_Write(unsigned short DQ_In, unsigned long Target_Address);
unsigned char EMC_Read(unsigned short *DQ_Out, unsigned long Source_Address);
unsigned char Flash_SinWord_Prog(unsigned long Target_Address);
unsigned char NOR_Sec_Erase(unsigned long Target_Address);
int NewmemTest(void);
void Memtest(void);
unsigned char EMC_Write_Long(unsigned long DQ_In, unsigned long Target_Address);
unsigned char SRAM_Testwrite(unsigned long DQ_In, unsigned long Target_Address);
void SRAM_Init(void);

#define SRAM_OnChip_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10000000 
#define SRAM_OnChip_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1000FFFF
#define Flash0_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x80000000&amp;nbsp;&amp;nbsp; 
#define Flash0_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x80FFFFFF 
#define Flash1_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x81000000
#define Flash1_EndAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x81FFFFFF
#define SRAM0_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x98000000 
#define SRAM0_EndAddr&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; 0x980FFFFF 
#define SRAM1_BaseAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9C000000 
#define SRAM1_EndAddr&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; 0x9C0FFFFF 

#define WRITE_COMPLETE&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; 0
#define WRITE_ABORT&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; 1
#define TIME_OUT&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; 2
#define WRITE_SUSPEND&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; 3
#define WRITE_NOT_COMPLETE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4
#define INVALID_ADDRESS&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; 5

//EMC_CS2 SRAM
//P2[14]
#define SRAM_CS2_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P2_14 |= 0x31

//EMC_OEN Shared
//P4[24]
#define OEN_SEL&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; LPC_IOCON-&amp;gt;P4_24 |= 0x31

//EMC_WEN Shared
//P4[25]
#define WEN_SEL&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; LPC_IOCON-&amp;gt;P4_25 |= 0x31

//EMC_BLS0 SRAM Lower Byte
//P4[26]
#define SRAM_BLS0_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P4_26 |= 0x31

//EMC_BLS1 SRAM Upper Byte
//P4[27]
#define SRAM_BLS1_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P4_27 |= 0x31

//Nor_Flash /CS0 pin4[30]
#define NORFLASH_CS0_SELLPC_IOCON-&amp;gt;P4_30 |= 0x31

//Nor_Flash /CS1 pin4[31]
#define NORFLASH_CS1_SELLPC_IOCON-&amp;gt;P4_31 |= 0x31

//Nor_Flash RY/BY pin0[4]
//Ready Busy indicates running in progress. At High Z = ready, at Vil = actively erasing/programming
#define NORFLASH_RYBY_SEL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;P0_4&amp;nbsp;&amp;nbsp; |= 0x218 
#define NORFLASH_RYBY_IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO4-&amp;gt;DIR &amp;amp;= ~(0x10)
#define NORFLASH_RYBY_BIT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO4-&amp;gt;PIN &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10

static void pinConfig_EMC(void) {
//Select slew rate and also config for EMC use = 0x31 , with pullup
LPC_IOCON-&amp;gt;P3_0 |= 0x31; // D0 @ P3.0 
LPC_IOCON-&amp;gt;P3_1 |= 0x31; // D1 @ P3.1 
LPC_IOCON-&amp;gt;P3_2 |= 0x31; // D2 @ P3.2 
LPC_IOCON-&amp;gt;P3_3 |= 0x31; // D3 @ P3.3 

LPC_IOCON-&amp;gt;P3_4 |= 0x31; // D4 @ P3.4 
LPC_IOCON-&amp;gt;P3_5 |= 0x31; // D5 @ P3.5 
LPC_IOCON-&amp;gt;P3_6 |= 0x31; // D6 @ P3.6 
LPC_IOCON-&amp;gt;P3_7 |= 0x31; // D7 @ P3.7 

LPC_IOCON-&amp;gt;P3_8 |= 0x31; //D8 @ P3.8 
LPC_IOCON-&amp;gt;P3_9 |= 0x31; // D9 @ P3.9 
LPC_IOCON-&amp;gt;P3_10 |= 0x31; // D10 @ P3.10 
LPC_IOCON-&amp;gt;P3_11 |= 0x31; // D11 @ P3.11 

LPC_IOCON-&amp;gt;P3_12 |= 0x31; // D12 @ P3.12 
LPC_IOCON-&amp;gt;P3_13 |= 0x31; // D13 @ P3.13 
LPC_IOCON-&amp;gt;P3_14 |= 0x31; // D14 @ P3.14 
LPC_IOCON-&amp;gt;P3_15 |= 0x31; // D15 @ P3.15&amp;nbsp; //also&amp;nbsp; A-1 LSB address input in byte mode

//LPC_IOCON-&amp;gt;P4_0 |= 0x31; // A0 @ P4.0&amp;nbsp;&amp;nbsp;&amp;nbsp; //added in to mimic code, temporary not used
LPC_IOCON-&amp;gt;P4_1 |= 0x31; // A1 @ P4.1 
LPC_IOCON-&amp;gt;P4_2 |= 0x31; // A2 @ P4.2 
LPC_IOCON-&amp;gt;P4_3 |= 0x31; // A3 @ P4.3 

LPC_IOCON-&amp;gt;P4_4 |= 0x31; // A4 @ P4.4 
LPC_IOCON-&amp;gt;P4_5 |= 0x31; // A5 @ P4.5 
LPC_IOCON-&amp;gt;P4_6 |= 0x31; // A6 @ P4.6 
LPC_IOCON-&amp;gt;P4_7 |= 0x31; // A7 @ P4.7 

LPC_IOCON-&amp;gt;P4_8 |= 0x31; // A8 @ P4.8 
LPC_IOCON-&amp;gt;P4_9 |= 0x31; // A9 @ P4.9 
LPC_IOCON-&amp;gt;P4_10 |= 0x31; // A10 @ P4.10 
LPC_IOCON-&amp;gt;P4_11 |= 0x31; // A11 @ P4.11 

LPC_IOCON-&amp;gt;P4_13 |= 0x31; // A13 @ P4.13 
LPC_IOCON-&amp;gt;P4_14 |= 0x31; // A14 @ P4.14 
LPC_IOCON-&amp;gt;P4_15 |= 0x31; // A15 @ P4.15 
LPC_IOCON-&amp;gt;P4_16 |= 0x31; // A16 @ P4.16 

LPC_IOCON-&amp;gt;P4_17 |= 0x31; // A17 @ P4.17 
LPC_IOCON-&amp;gt;P4_18 |= 0x31; // A18 @ P4.18 
LPC_IOCON-&amp;gt;P4_19 |= 0x31; // A19 @ P4.19 
//LPC_IOCON-&amp;gt;P4_20 |= 0x31; // A20 @ P4.20 

//LPC_IOCON-&amp;gt;P4_21 |= 0x31; // A21 @ P4.21 
//LPC_IOCON-&amp;gt;P4_22 |= 0x31; // A22 @ P4.22 
//LPC_IOCON-&amp;gt;P4_23 |= 0x31; // A23 @ P4.23 
//LPC_IOCON-&amp;gt;P5_0&amp;nbsp; |= 0x31; // A24 @ P5.0 
//LPC_IOCON-&amp;gt;P5_1&amp;nbsp; |= 0x31; // A25 @ P5.1 

&amp;nbsp; //NORFLASH_CS0_SEL;
&amp;nbsp; //NORFLASH_CS1_SEL;
&amp;nbsp; //NORFLASH_RYBY_SEL;

&amp;nbsp; SRAM_CS2_SEL;
&amp;nbsp; SRAM_BLS0_SEL;
&amp;nbsp; SRAM_BLS1_SEL;
&amp;nbsp; OEN_SEL;
&amp;nbsp; WEN_SEL; 
}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void Memtest(void)
{
&amp;nbsp; //Remember the end address where CPU and memory does not see A20 pin for SRAM.
&amp;nbsp; //unsigned short *start= (unsigned short *) 0x98000000UL;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; unsigned short *start= (unsigned short *) SRAM0_BaseAddr;&amp;nbsp; 
&amp;nbsp; unsigned short *finish =(unsigned short *)SRAM0_EndAddr; 
&amp;nbsp; unsigned int value=0;
&amp;nbsp; unsigned short pattern = 0x5555;
&amp;nbsp; unsigned short inv_pattern = 0xAAAA;
&amp;nbsp; unsigned short readback = 0;
&amp;nbsp; //unsigned int pattern = 0xdead;
&amp;nbsp; //unsigned int inv_pattern = 0xbeef;
&amp;nbsp; int i;
&amp;nbsp; int Memory_Size = 32;
&amp;nbsp; 
&amp;nbsp; //unsigned long Memory_Size = 1048576;
&amp;nbsp; 
&amp;nbsp; //int Memory_Size = 1048577;
&amp;nbsp; //int Memory_Size = 2097152;
&amp;nbsp; /*for(i = 0; i &amp;lt; Memory_Size; i+= 4)
&amp;nbsp; //for(i = 0; i &amp;lt; 32; i+= 1)&amp;nbsp; //try just 32 bytes first.
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *start = value; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; start++;
&amp;nbsp;&amp;nbsp;&amp;nbsp; value++;
&amp;nbsp; }*/
&amp;nbsp; for(i = 0; i &amp;lt; Memory_Size; i+= 2) //Populate SRAM with pattern
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *start = pattern;
&amp;nbsp;&amp;nbsp;&amp;nbsp; readback = *start;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start++;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //if(start&amp;gt;finish) //Boundary condition
&amp;nbsp;&amp;nbsp;&amp;nbsp; // {
&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // }
&amp;nbsp; }
&amp;nbsp; 
&amp;nbsp;&amp;nbsp; /*for(i = Memory_Size; i &amp;gt; 0; i-= 2)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; *finish = value; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; finish--;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; }*/

}

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; I understand that the upper limit of the memory should be defined as 0x980FFFFF instead of 0x98100000 so I introduced a condition in the this portion of the code, but I am still seeing it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
void Memtest(void)
{
&amp;nbsp; //Remember the end address where CPU and memory does not see A20 pin for SRAM.
&amp;nbsp; //unsigned short *start= (unsigned short *) 0x98000000UL;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; unsigned short *start&amp;nbsp; = (unsigned short *)SRAM0_BaseAddr;&amp;nbsp; //0x98000000 
&amp;nbsp; unsigned short *finish = (unsigned short *)SRAM0_EndAddr;&amp;nbsp;&amp;nbsp; //0x980FFFFF 
&amp;nbsp; unsigned int value&amp;nbsp; = 0;
&amp;nbsp; unsigned short pattern = 0x5555;
&amp;nbsp; unsigned short inv_pattern = 0xAAAA;
&amp;nbsp; unsigned short readback = 0;
&amp;nbsp; //unsigned int pattern = 0xdead;
&amp;nbsp; //unsigned int inv_pattern = 0xbeef;
&amp;nbsp; int i;
&amp;nbsp; int Memory_Size = 32;
&amp;nbsp; 
&amp;nbsp; //unsigned long Memory_Size = 1048576;
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; EMC_Write(pattern, start);
&amp;nbsp; 
}


unsigned char EMC_Write(unsigned short DQ_In, unsigned long Target_Address) //address may need to use unsigned long to address 32 bits length address
{
&amp;nbsp; 
&amp;nbsp; if(Target_Address &amp;gt;= Flash0_BaseAddr &amp;amp;&amp;amp; Target_Address &amp;lt;= SRAM1_EndAddr)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; new_address = (unsigned short *)Target_Address; //the heart of the memory address translation
&amp;nbsp;&amp;nbsp;&amp;nbsp; *new_address = DQ_In;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
&amp;nbsp; }
&amp;nbsp; else
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; return INVALID_ADDRESS; //invalid address
&amp;nbsp; }

}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:56:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1778-seems-like-not-recognizing-the-SRAM-MSB-address/m-p/522955#M5591</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:56:18Z</dc:date>
    </item>
  </channel>
</rss>

