<?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>LPC Microcontrollers中的主题 Re: Copy RAM to flash</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517621#M2278</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by cfbsoftware on Fri Nov 29 18:52:03 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Error 9 is 'sector not prepared'. You need to call PrepareSectors before CopyRAMToFlash as well as before EraseSectors. From the User Manual:&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;This command must be executed before executing "Copy RAM to Flash" or&lt;BR /&gt;"Erase Sector(s)" command. Successful execution of the "Copy RAM to Flash" or&lt;BR /&gt;"Erase Sector(s)" command causes relevant sectors to be protected again.&lt;/SPAN&gt;&lt;HR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:29:10 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:29:10Z</dc:date>
    <item>
      <title>Copy RAM to flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517620#M2277</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by robin48gx on Fri Nov 29 08:35:49 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to following code to copy a RAM structure to flash.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It fails with error code == 9.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here are the printf's this code produces:&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;serial_eeprom::init_comm_backup() called&lt;BR /&gt;serial_eeprom::write_comm_bk entered with CRP 0x320f24c 52490828&lt;BR /&gt;serial_eeprom::write_comm_bk Write failed at RAM 0x10005E30 FLASHROM 0x00078000 ec 9&lt;BR /&gt;serial_eeprom::read_Comm Backup Read Complete&lt;BR /&gt;verify_count 0&lt;BR /&gt;Display status : 41&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What am I doing wrong?&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;

#define COMM_BK_MAX_BUFFER_SIZE 512
volatile&amp;nbsp; unsigned char&amp;nbsp; *COMMBKBuffer = 0x78000;&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; /* Buffer used by application : copied from lpcxx_pinsel.c 28NOV2013&amp;nbsp; */
//__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
void
write_comm_bk()
{


int start_address = (uint32_t) &amp;amp; comm_backup;
int received_data = 0;
int more_data=1,ec;
int crp_mode;
static int * crp_modep = 0x000002FC;

crp_mode = *crp_modep;

printf("serial_eeprom::write_comm_bk entered with CRP 0x%x %d\n", crp_mode, crp_mode);
if(u32IAP_PrepareSectors(29, 29) != IAP_STA_CMD_SUCCESS) {// 64k for fonts, at top of flash memory
printf("serial_eeprom::write_comm_bk Failed to prepare flash for erase\n");
return;
}

if (u32IAP_EraseSectors(29,29) != IAP_STA_CMD_SUCCESS) {
printf("serial_eeprom::write_comm_bk Failed to Erase flash.\n");
return;
}


&amp;nbsp;&amp;nbsp;&amp;nbsp; do {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // uint32_t u32IAP_CopyRAMToFlash(uint32_t u32DstAddr, uint32_t u32SrcAddr, uint32_t u32Len)
 if((ec=u32IAP_CopyRAMToFlash( (uint32_t)COMMBKBuffer+ received_data, start_address + received_data, COMM_BK_MAX_BUFFER_SIZE)) == IAP_STA_CMD_SUCCESS){
&amp;nbsp;&amp;nbsp; printf("serial_eeprom::write_comm_bk Writing at %X\n",
&amp;nbsp;&amp;nbsp; start_address + received_data);
&amp;nbsp;&amp;nbsp; /*Verify the flash contents with the contents in RAM */
&amp;nbsp;&amp;nbsp; if(u32IAP_Compare(start_address + received_data, (uint32_t)COMMBKBuffer+ received_data, COMM_BK_MAX_BUFFER_SIZE, 0) == IAP_STA_CMD_SUCCESS){
&amp;nbsp;&amp;nbsp; printf("serial_eeprom::write_comm_bk Verify at %X OK\n",
&amp;nbsp;&amp;nbsp; start_address + received_data);
&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; else {
printf("serial_eeprom::write_comm_bk Verify failed at %X ec %d\n",
 start_address + received_data,ec);
return;
&amp;nbsp;&amp;nbsp; }
}
else {
printf("serial_eeprom::write_comm_bk Write failed at RAM 0x%8.8X FLASHROM 0x%8.8X ec %d\n",
start_address + received_data, COMMBKBuffer+ received_data,ec);
return;
}
received_data += COMM_BK_MAX_BUFFER_SIZE;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( received_data &amp;gt;= sizeof(comm_backup) )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; more_data = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; more_data = 1;

} while (more_data);

//f_close(&amp;amp;fdr);
printf("serial_eeprom::write_comm_bk Complete reveived data is %d\n", received_data);
}



&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:29:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517620#M2277</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:29:09Z</dc:date>
    </item>
    <item>
      <title>Re: Copy RAM to flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517621#M2278</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by cfbsoftware on Fri Nov 29 18:52:03 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Error 9 is 'sector not prepared'. You need to call PrepareSectors before CopyRAMToFlash as well as before EraseSectors. From the User Manual:&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;This command must be executed before executing "Copy RAM to Flash" or&lt;BR /&gt;"Erase Sector(s)" command. Successful execution of the "Copy RAM to Flash" or&lt;BR /&gt;"Erase Sector(s)" command causes relevant sectors to be protected again.&lt;/SPAN&gt;&lt;HR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:29:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517621#M2278</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:29:10Z</dc:date>
    </item>
    <item>
      <title>Re: Copy RAM to flash</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517622#M2279</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by robin48gx on Mon Dec 02 08:41:58 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks very much that precisely what the problem was!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; :D &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:29:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Copy-RAM-to-flash/m-p/517622#M2279</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:29:10Z</dc:date>
    </item>
  </channel>
</rss>

