<?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: need help getting S34ML04G2 NAND flash to work with lpc1788 in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/need-help-getting-S34ML04G2-NAND-flash-to-work-with-lpc1788/m-p/516885#M1899</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Tue Nov 18 08:14:26 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I found the error. It turns out data4 and data5 were swapped. We copied this from an example.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:25:53 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:25:53Z</dc:date>
    <item>
      <title>need help getting S34ML04G2 NAND flash to work with lpc1788</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/need-help-getting-S34ML04G2-NAND-flash-to-work-with-lpc1788/m-p/516884#M1898</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Mon Nov 10 06:56:59 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a custom board with a lpc1788 with IS42S16400F SDRAM and S34ML04G200TF100 NAND flash.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I got the SDRAM to work but the flash won't initialize.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I use the code for the embedded artist oem board. The difference is that the embedded artist board uses the K9F1G08U0C chip and that I don't use buffers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The command for requesting an id is 0x90 in both chips&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When I request the ID of the chip it returns only 1's.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's how the flash is connected:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]IO0 to IO7 connected to EMC_D0 to EMC_D7(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]nRE connected to EMC_OE (same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]CLE connected to EMC_A20(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]ALE connected to EMC_A19(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]nCE connected to EMC_CS1 + 10k pull-up(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]nWE connected to EMC_WE(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]nWP connected to 3v3(same as oem1788)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]nR/B connected to EMC_A23 + 10k pull-up (is not connected on oem1788 )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is part of my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;

#define K9F1G_CLE&amp;nbsp;&amp;nbsp; ((volatile uint8_t *)0x90100000)//1&amp;lt;&amp;lt;20
#define K9F1G_ALE&amp;nbsp;&amp;nbsp; ((volatile uint8_t *)0x90080000)//1&amp;lt;&amp;lt;19
#define K9F1G_DATA&amp;nbsp; ((volatile uint8_t *)0x90000000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#define K9FXX_READ_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x90 

static void pinConfig(void)
{
&amp;nbsp; LPC_IOCON-&amp;gt;P3_0 |= 1; //D0 @ P3.0 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_1 |= 1; //D1 @ P3.1 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_2 |= 1; //D2 @ P3.2 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_3 |= 1; //D3 @ P3.3 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_4 |= 1; //D4 @ P3.4 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_5 |= 1; //D5 @ P3.5 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_6 |= 1; //D6 @ P3.6 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_7 |= 1; //D7 @ P3.7 

&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_8 |= 1; //D8 @ P3.8 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_9 |= 1; //D9 @ P3.9 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_10 |= 1; //D10 @ P3.10 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_11 |= 1; //D11 @ P3.11 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_12 |= 1; //D12 @ P3.12 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_13 |= 1; //D13 @ P3.13 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_14 |= 1; //D14 @ P3.14 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_15 |= 1; //D15 @ P3.15 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_16 |= 1; //D16 @ P3.16 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_17 |= 1; //D17 @ P3.17 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_18 |= 1; //D18 @ P3.18 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_19 |= 1; //D19 @ P3.19 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_20 |= 1; //D20 @ P3.20 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_21 |= 1; //D21 @ P3.21 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_22 |= 1; //D22 @ P3.22 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_23 |= 1; //D23 @ P3.23 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_24 |= 1; //D24 @ P3.24 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_25 |= 1; //D25 @ P3.25 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_26 |= 1; //D26 @ P3.26 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_27 |= 1; //D27 @ P3.27 

&amp;nbsp; LPC_IOCON-&amp;gt;P3_28 |= 1; //D28 @ P3.28 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_29 |= 1; //D29 @ P3.29 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_30 |= 1; //D30 @ P3.30 
&amp;nbsp; LPC_IOCON-&amp;gt;P3_31 |= 1; //D31 @ P3.31 
&amp;nbsp; 

&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_0 |= 1; //A0 @ P4.0 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_1 |= 1; //A1 @ P4.1 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_2 |= 1; //A2 @ P4.2 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_3 |= 1; //A3 @ P4.3 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_4 |= 1; //A4 @ P4.4 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_5 |= 1; //A5 @ P4.5 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_6 |= 1; //A6 @ P4.6 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_7 |= 1; //A7 @ P4.7 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_8 |= 1; //A8 @ P4.8 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_9 |= 1; //A9 @ P4.9 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_10 |= 1; //A10 @ P4.10 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_11 |= 1; //A11 @ P4.11 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_12 |= 1; //A12 @ P4.12 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_13 |= 1; //A13 @ P4.13 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_14 |= 1; //A14 @ P4.14 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_15 |= 1; //A15 @ P4.15 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_16 |= 1; //A16 @ P4.16 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_17 |= 1; //A17 @ P4.17 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_18 |= 1; //A18 @ P4.18&amp;nbsp;&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_19 |= 1; //A19 @ P4.19 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_20 |= 1; //A20 @ P4.20 
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_21 |= 1; //A21 @ P4.21 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_22 |= 1; //A22 @ P4.22 
&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_23 |= 1; //A23 @ P4.23 
&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_24 |= 1; //OEN @ P4.24 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_25 |= 1; //WEN @ P4.25 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_26 |= 1; //BLSN[0] @ P4.26 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_27 |= 1; //BLSN[1] @ P4.27 

&amp;nbsp; LPC_IOCON-&amp;gt;P4_28 |= 1; //BLSN[2] @ P4.28 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_29 |= 1; //BLSN[3] @ P4.29 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_30 |= 1; //CSN[0] @ P4.30 
&amp;nbsp; LPC_IOCON-&amp;gt;P4_31 |= 1; //CSN[1] @ P4.31 

&amp;nbsp; LPC_IOCON-&amp;gt;P2_14 |= 1; //CSN[2] @ P2.14 
&amp;nbsp; LPC_IOCON-&amp;gt;P2_15 |= 1; //CSN[3] @ P2.15 
}

static uint64_t nandReadId(void)
{
&amp;nbsp; uint8_t a, b, c, d, e;
&amp;nbsp; volatile uint8_t *pCLE;
&amp;nbsp; volatile uint8_t *pALE;
&amp;nbsp; volatile uint8_t *pData;
&amp;nbsp; 
&amp;nbsp; pCLE&amp;nbsp; = K9F1G_CLE;
&amp;nbsp; pALE&amp;nbsp; = K9F1G_ALE;
&amp;nbsp; pData = K9F1G_DATA;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; *pCLE = K9FXX_READ_ID;
&amp;nbsp; *pALE = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; a = *pData;
&amp;nbsp; b = *pData;
&amp;nbsp; c = *pData;
&amp;nbsp; d = *pData;
&amp;nbsp; e = *pData;
&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; return ((uint64_t)a &amp;lt;&amp;lt; 32) | (b &amp;lt;&amp;lt; 24) | (c &amp;lt;&amp;lt; 16) | (d &amp;lt;&amp;lt; 8) | e;
}

bool nand_init (void)
{
&amp;nbsp; volatile uint64_t nandId = 0;
&amp;nbsp; TIM_TIMERCFG_Type timerCfg;

&amp;nbsp; LPC_SC-&amp;gt;PCONP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 0x00000800;
&amp;nbsp; LPC_EMC-&amp;gt;Control&amp;nbsp;&amp;nbsp; = 0x00000001;//enable
&amp;nbsp; LPC_EMC-&amp;gt;Config&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x00000000;//little endian

&amp;nbsp; pinConfig();

&amp;nbsp; TIM_ConfigStructInit(TIM_TIMER_MODE, &amp;amp;timerCfg);
&amp;nbsp; TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &amp;amp;timerCfg);

&amp;nbsp; LPC_EMC-&amp;gt;StaticConfig1&amp;nbsp;&amp;nbsp; = 0x00000080;//Byte lane state.

&amp;nbsp; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitWen1&amp;nbsp; = 0x00000002; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitOen1&amp;nbsp; = 0x00000002; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitRd1&amp;nbsp;&amp;nbsp; = 0x00000008; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitPage1 = 0x0000001f; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitWr1&amp;nbsp;&amp;nbsp; = 0x00000008; 
&amp;nbsp; LPC_EMC-&amp;gt;StaticWaitTurn1 = 0x0000000f;
&amp;nbsp; 
&amp;nbsp; nandId = nandReadId();//returns 0xFF FFFF FFFF
&amp;nbsp; 
&amp;nbsp; if( nandId != 0x01CC90D556ULL ){
&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;
&amp;nbsp; }
&amp;nbsp; 

/*
&amp;nbsp; if ((nandId &amp;amp; 0xffff0000) != 
&amp;nbsp;&amp;nbsp;&amp;nbsp; (((uint32_t)(ID_MARKER_CODE) &amp;lt;&amp;lt; 24) | ID_SAMSUNG &amp;lt;&amp;lt; 16)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; // unknown NAND chip 
&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;
&amp;nbsp; }
*/

&amp;nbsp; pageSize&amp;nbsp;&amp;nbsp; = 1024 * (1 &amp;lt;&amp;lt; (nandId &amp;amp; 0x03));&amp;nbsp; 
&amp;nbsp; blockSize&amp;nbsp; = 64*1024 * (1 &amp;lt;&amp;lt; ((nandId&amp;gt;&amp;gt;4) &amp;amp; 0x03));
&amp;nbsp; reduntSize = 8 * (1 &amp;lt;&amp;lt; ((nandId &amp;gt;&amp;gt; 1) &amp;amp; 0x1));

&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;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; return true;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What am I doing wrong?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/need-help-getting-S34ML04G2-NAND-flash-to-work-with-lpc1788/m-p/516884#M1898</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:52Z</dc:date>
    </item>
    <item>
      <title>Re: need help getting S34ML04G2 NAND flash to work with lpc1788</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/need-help-getting-S34ML04G2-NAND-flash-to-work-with-lpc1788/m-p/516885#M1899</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Tue Nov 18 08:14:26 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I found the error. It turns out data4 and data5 were swapped. We copied this from an example.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:25:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/need-help-getting-S34ML04G2-NAND-flash-to-work-with-lpc1788/m-p/516885#M1899</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:25:53Z</dc:date>
    </item>
  </channel>
</rss>

