<?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>8-bit MicrocontrollersのトピックRe: How to copy from ROM to RAM?</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149540#M7928</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I suspect that the COP timer is timing out whilst waiting to receive an IIC data byte.&amp;nbsp; The COP timer will need to be cleared within the wait loop.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 17 Feb 2009 08:13:22 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2009-02-17T08:13:22Z</dc:date>
    <item>
      <title>How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149521#M7909</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to do an i2c flash programmer, and I need to allocate some functions (i2c and flash controllers) on RAM while flash is being upgraded.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I´ve found this FAQ: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.freescale.com%2Fwebapp%2Fsps%2Futils%2FSingleFaq.jsp%3FFAQ-27860.xml" rel="nofollow" target="_blank"&gt;http://www.freescale.com/webapp/sps/utils/SingleFaq.jsp?FAQ-27860.xml&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;which is exactly what I need, but I can´t make the CopyCode function work. Any idea?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Feb 2009 23:39:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149521#M7909</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-04T23:39:29Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149522#M7910</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;What did not work for you?&lt;BR /&gt;How does it fail?&lt;BR /&gt;Can you share your attempt?&lt;BR /&gt;Does your code use runtime routines (check the disassembled code)?&lt;BR /&gt;&lt;BR /&gt;BTW, CopyCode is a section there, not a function.&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 01:31:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149522#M7910</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2009-02-05T01:31:05Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149523#M7911</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;CODE&gt;Hi CompilerGuru, and thank you for your fast reply.&lt;BR /&gt;&lt;BR /&gt; I am following the second method of the&amp;nbsp;&lt;/CODE&gt; FAQ-27860, and this is the function CopyCode:&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;void CopyCode(void) {&lt;BR /&gt; char *src, *dest;&lt;BR /&gt; long size;&lt;BR /&gt; src=(char *)ROMCodeToCopy;&lt;BR /&gt; dest = (char *)_START_CopiedToRAM;&lt;BR /&gt; size = _END_CopiedToRAM - _START_CopiedToRAM;&lt;BR /&gt; if (dest != src)&lt;BR /&gt; while (size--)&lt;BR /&gt; *dest++ = *src++;&lt;BR /&gt; }&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;The problem is that this function uses next variables (should be defined as "far" to write in RAM):&lt;BR /&gt;&lt;BR /&gt; extern char far ROMCodeToCopy[];&lt;BR /&gt;extern char far&amp;nbsp; _START_CopiedToRAM[];&lt;BR /&gt;extern char far&amp;nbsp; _END_CopiedToRAM[];&lt;BR /&gt;extern unsigned long far SizeCodeToCopy[];&lt;BR /&gt;&lt;BR /&gt;but that variables causes a link error: "L1822: Symbol&lt;/CODE&gt; &lt;CODE&gt;ROMCodeToCopy in file ...&lt;/CODE&gt; &lt;CODE&gt;is undefined" (they aren´t!)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Is there any other method to run code from RAM?&lt;BR /&gt;How can I see if my code uses runtime routines?&lt;BR /&gt;I am using Codewarrior Version 6.2.&lt;BR /&gt;&lt;/CODE&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 01:50:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149523#M7911</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-05T01:50:52Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149524#M7912</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;The following code seems quite similar to yours, and does compile.&amp;nbsp; The .PRM file also need to incorporate a special segment for the RAM routines to specify the RELOCATE_TO address.&amp;nbsp; Not sure why you needed to use the &lt;FONT face="Courier New"&gt;far&lt;/FONT&gt; modifier.&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="Courier New"&gt;extern char __SEG_START_FLASH_ROUTINES[];&lt;BR /&gt;extern char __SEG_SIZE_FLASH_ROUTINES[];&lt;BR /&gt;&lt;BR /&gt;/*****************************************************************************/&lt;BR /&gt;#pragma CODE_SEG FLASH_ROUTINES&lt;BR /&gt;&lt;BR /&gt;// RAM based function here&lt;BR /&gt;&lt;BR /&gt;#pragma CODE_SEG DEFAULT&lt;BR /&gt;/**********************************************************************/&lt;BR /&gt;/* Copies Flash_Cmd() function into RAM, using steps documented in Tech&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Note 228&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Start_data refers to the begining of the flash block to be copied.&lt;BR /&gt; */&lt;BR /&gt;#define Start_data&amp;nbsp;&amp;nbsp; __SEG_START_FLASH_ROUTINES&lt;BR /&gt;#define Size_data&amp;nbsp;&amp;nbsp;&amp;nbsp; __SEG_SIZE_FLASH_ROUTINES&lt;BR /&gt;&lt;BR /&gt;void CopyInRAM(void)&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; char *srcPtr, *dstPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int count;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; srcPtr = (char *)Start_data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; dstPtr = (char *)(void *)&amp;amp;Flash_Cmd;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (count = 0; count &amp;lt; (int)Size_data; count++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dstPtr = *srcPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dstPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; srcPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;Here is the modified .PRM file -&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="Courier New"&gt;/* Linker parameter file for the GB60 */&lt;BR /&gt;NAMES END&lt;BR /&gt;&lt;BR /&gt;SEGMENTS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x182C TO 0xFFAF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_WRITE&amp;nbsp;&amp;nbsp; 0x0080 TO 0x00FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; =&amp;nbsp; READ_WRITE&amp;nbsp;&amp;nbsp; 0x0100 TO 0x0FFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSTACK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_WRITE&amp;nbsp;&amp;nbsp; 0x1000 TO 0x107F;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1100 TO 0x17FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xFFC0 TO 0xFFCB;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASH_TO_RAM =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1080 TO 0x10FF RELOCATE_TO 0x1000;&lt;BR /&gt;END&lt;BR /&gt;&lt;BR /&gt;PLACEMENT&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_RAM&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; INTO&amp;nbsp; RAM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_ROM, ROM_VAR, STRINGS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; ROM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _DATA_ZEROPAGE, MY_ZEROPAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; Z_RAM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASH_ROUTINES&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; INTO&amp;nbsp; FLASH_TO_RAM;&lt;BR /&gt;END&lt;BR /&gt;&lt;BR /&gt;ENTRIES&lt;BR /&gt;END&lt;BR /&gt;&lt;BR /&gt;STACKTOP 0x107F&lt;BR /&gt;&lt;BR /&gt;//VECTOR 0 _Startup&amp;nbsp; /* Reset vector: Default entry point for application. */&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 08:00:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149524#M7912</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-05T08:00:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149525#M7913</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Which chip are you targeting?&lt;BR /&gt;out of FAQ-27860:&lt;BR /&gt;&amp;gt; With CodeWarrior's Coldfire ...&lt;BR /&gt;so this FAQ targets coldfire. However you asked this question in the 8-Bit MCU forum. CF has a few more bits :smileyhappy:.&lt;BR /&gt;&lt;BR /&gt;If you are targeting an HC08/S08/HC12, then follow bigmacs suggestions.&lt;BR /&gt;For CF, the identifier have to be defined in the lcf file, so make sure you did all the modifications in there as described in the FAQ.&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 14:31:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149525#M7913</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2009-02-05T14:31:55Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149526#M7914</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks, Mac and Daniel.&lt;BR /&gt;&lt;BR /&gt;I´m using a MC9SO8SH8.&amp;nbsp; &lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 16:27:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149526#M7914</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-05T16:27:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149527#M7915</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;BigMac, only a question about your code:&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="Courier New"&gt;void CopyInRAM(void)&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; char *srcPtr, *dstPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int count;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; srcPtr = (char *)Start_data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; dstPtr = (char *)(void *)&amp;amp;Flash_Cmd;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (count = 0; count &amp;lt; (int)Size_data; count++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dstPtr = *srcPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dstPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; srcPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;What is Flash_Cmd? This way, you are copying one function into RAM, but are you running the code from RAM?.&lt;BR /&gt;&lt;BR /&gt; Thank you for your help.&lt;BR /&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 17:21:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149527#M7915</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-05T17:21:19Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149528#M7916</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;For the S08, only part of the referenced FAQ applies, especially the S08 does not use lcf's but prm's for the layout definition.&lt;BR /&gt;&lt;BR /&gt;The topic how to execute code from ram got discussed in this forum quite a few times, for example:&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://forums.freescale.com/freescale/board/message?board.id=8BITCOMM&amp;amp;message.id=3483&amp;amp;query.id=9333#M3483" target="test_blank"&gt;http://forums.freescale.com/freescale/board/message?board.id=8BITCOMM&amp;amp;message.id=3483&amp;amp;query.id=9333#M3483&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;(I searched for CopyInRAM appears to be a commonly used name for this task :smileyhappy:.&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;BR /&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 23:05:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149528#M7916</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2009-02-05T23:05:26Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149529#M7917</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thank you for your help. This technical notes are exactly what i need. &lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Feb 2009 23:22:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149529#M7917</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-05T23:22:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149530#M7918</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;The function flash_Cmd() is the RAM based function code that is copied from flash, and is run from RAM.&amp;nbsp; As indicated in my previous post, to place the code at the required flash location, the function code must be preceeded by -&lt;BR /&gt;&lt;FONT face="Courier New"&gt;#pragma CODE_SEG FLASH_ROUTINES&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="Arial"&gt;Regards,&lt;BR /&gt;Mac&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2009-02-06&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:22 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Feb 2009 06:18:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149530#M7918</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-06T06:18:22Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149531#M7919</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi again. Finally, the functions seems to be working, but when I execute a flash erase (it executes from RAM), I lost my variables stored in RAM.&lt;BR /&gt;&lt;BR /&gt;I tried to define a new sector in RAM to allocate my variables, but it causes a compilation error. Have you ever hear that error? Is it possible to allocate a variable on a specific sector of the RAM? &lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Feb 2009 18:06:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149531#M7919</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-09T18:06:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149532#M7920</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;Which variables are being over-written?&amp;nbsp; Are they local variables on the stack, or global/static variables?&lt;BR /&gt;&lt;BR /&gt;Have you allowed a sufficient block size within the .PRM file to fully accommodate the RAM function without too much excess?&amp;nbsp; What is the RELOCATE_TO address in RAM?&amp;nbsp; If using a method similar to my previous post, the whole block size will be copied to RAM, independent of the size of the actual function code.&lt;BR /&gt;&lt;BR /&gt;Do you have any large array variables declared within main()?&amp;nbsp; These will permanently occupy stack space and will cause downward stack growth.&amp;nbsp; If they are large, it may be better to handle these as globals.&lt;BR /&gt;&lt;BR /&gt;I suspect that the variables are probably being over-written during the copy process.&amp;nbsp; Perhaps post your PRM file contents to give a better idea of your problem and its solution.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Feb 2009 21:27:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149532#M7920</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-09T21:27:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149533#M7921</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BR /&gt;You said&lt;BR /&gt;&lt;BR /&gt;"Are they local variables on the stack, or global/static variables?"&lt;BR /&gt;&lt;BR /&gt;I think here is the key, because I have changed this variables (local) to static ones (global) and the program is working now!&lt;BR /&gt;&lt;BR /&gt;Thanks for your help.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Feb 2009 22:49:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149533#M7921</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-09T22:49:02Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149534#M7922</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;There may still be a potential problem if the copy function is over-writing a portion of the stack, and the stack size is not sufficiently large.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Feb 2009 12:02:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149534#M7922</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-10T12:02:37Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149535#M7923</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Yes, I´ve checked it, and the stack is big enough. &lt;BR /&gt;&lt;BR /&gt;Finally, my program is allocated in three memory blocks. One of them is for the general code (main function...), a second one is for the i2c functions and the last one is for the flash functions, which are also allocated in ram. &lt;BR /&gt;&lt;BR /&gt;I need the i2c functions working while I am programming the first block, but this functions are too big to be allocated in ram. Could it suppose a problem? It there any restriction on that?. Can I erase one sector of the flash and after that execute the code of other sector?&lt;BR /&gt;&lt;BR /&gt;Thanks for your help.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Feb 2009 00:52:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149535#M7923</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-11T00:52:01Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149536#M7924</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;The 'SH8 device has only a single flash array, so the entire flash memory is not accessible at the point where programming (or erase) occurs, when the internal charge pump is operative.&amp;nbsp; The IIC peripheral hardware should remain operative, however the data cannot be accessed using flash based code, until the programming process is completed.&lt;BR /&gt;&lt;BR /&gt;I would suggest that you do not use burst programming mode, but program a single byte at a time.&amp;nbsp; This way IIC operations can possibly be interleaved between the programming of each byte.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Feb 2009 00:46:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149536#M7924</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-12T00:46:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149537#M7925</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I can´t program byte by byte because it´s too unsecure (there are other devices on my board using iic). I send the .s19 file line by line, and only if the checksum is correct this line is writed. &lt;BR /&gt;&lt;BR /&gt;Anyway, I have put a long delay (about 5 seconds) after a flash writing, and the program fails as soon as I try to run a function located on flash (IIC functions to send an ack, this functions are located at the end of the flash, and i have written only in the first sector).&lt;BR /&gt;&lt;BR /&gt;Should I have to do something after a flash writing to return to "normal mode" after running flash functions (flash functions are executed from ram) ?&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Feb 2009 02:30:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149537#M7925</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-12T02:30:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149538#M7926</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I do not know why you believe that byte by byte flash programming is more "unsecure" than burst programming.&amp;nbsp; The only difference that I am aware of is a marginally shorter duration for burst programming.&lt;BR /&gt;&lt;BR /&gt;Does the MCU operate as the IIC master or slave device?&amp;nbsp; If a master, the delays associated with programming/erase operations should be readily accommodated since the master has complete control over IIC operation.&lt;BR /&gt;&lt;BR /&gt;An IIC slave would be more problematic.&amp;nbsp; However, slave operation would also appear incompatible with the presence of more than one external IIC device.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 12 Feb 2009 23:51:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149538#M7926</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-12T23:51:13Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149539#M7927</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi, bigmac.&lt;BR /&gt;&lt;BR /&gt;I have been doing some test and here are the results.&lt;BR /&gt;&lt;BR /&gt;Right now, I have been programming in flash strings of bytes, but I have been doing it byte by byte always. After your last message, I have modified my code to read a byte via IIC and move it to the flash. Here is the function to&amp;nbsp; program a byte on the flash:&lt;BR /&gt;&lt;BR /&gt;#pragma CODE_SEG FLASH_ROUTINES&lt;BR /&gt;unsigned char Flash_Cmd(unsigned int FlashAddress, unsigned int FlashDataCounter, unsigned char* pFlashDataPtr, unsigned char FlashCommand)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check to see if FACCERR or PVIOL is set */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FSTAT&amp;amp;0x30)&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear Flags if set*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = FSTAT | 0x30;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FlashDataCounter)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for the Last Busrt Command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FSTAT&amp;amp;0x80));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write Data into Flash*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (*((volatile unsigned char *)(FlashAddress++))) = *pFlashDataPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFlashDataPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write Command */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCMD = FlashCommand;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Put FCBEF at 1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check if Flash Access Error or Protection Violation Error are Set */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FSTAT&amp;amp;0x30)&lt;BR /&gt;&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; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* If so, finish the function returning 1 to indicate error */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }while (--FlashDataCounter);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* wait for the last command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((FSTAT&amp;amp;0x40)==0);&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Return zero to indicate that the function executed Ok */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (0);&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;#pragma CODE_SEG DEFAULT&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; #define Flash_Program(Address, Data) \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flash_Cmd((unsigned int)Address, (unsigned int)1, (unsigned char*)&amp;amp;Data, FLASH_PROGRAM_CMD)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;My MCU is the slave, and the master does not support holding the scl line to make a pause.&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt;I tried next code:&lt;BR /&gt;&lt;BR /&gt;DisableInterrupts;&lt;BR /&gt;Flash_Erase(0xC000);&lt;BR /&gt;&lt;BR /&gt;for (tmp4=0;tmp4&amp;lt;0xff;tmp4++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flash_Program(0xC000 + tmp4, tmp4);&lt;BR /&gt;tmp4=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;EnableInterrupts;&lt;BR /&gt;&lt;BR /&gt;And it works succesfully, but when I tried:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!I2C1_GetCharsInRxBuf()){}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(I2C1_RecvChar(&amp;amp;tmp4)==ERR_OK) {&amp;nbsp; //Numero de bytes que se van a recibir&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_ClearRxBuf();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableInterrupts;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flash_Erase(0xC000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (tmp5=0;tmp5&amp;lt;tmp4;tmp5++){&amp;nbsp;&amp;nbsp;&amp;nbsp; //Bucle a esos bytes&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!I2C1_GetCharsInRxBuf()){}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(I2C1_RecvChar(&amp;amp;tmp3)==ERR_OK) { &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(I2C1_RecvChar(&amp;amp;tmp3));&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_ClearRxBuf();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableInterrupts;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flash_Program(0xC000 + tmp5, tmp3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;It is basically the same code reading data via IIC and waiting for every byte. This code fails, and disconnects the debugger after erasing the rom. It´s needed to reprogram again. Each IIC byte has a delay of 1 second. Right now, I have no idea about what´s wrong...&lt;BR /&gt;IIC functions are located on a specific "partition" of the ROM, which is never flashed.&lt;BR /&gt;&lt;BR /&gt;Any suggestion?&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 02:15:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149539#M7927</guid>
      <dc:creator>PW_CTL</dc:creator>
      <dc:date>2009-02-17T02:15:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to copy from ROM to RAM?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149540#M7928</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hello,&lt;BR /&gt;&lt;BR /&gt;I suspect that the COP timer is timing out whilst waiting to receive an IIC data byte.&amp;nbsp; The COP timer will need to be cleared within the wait loop.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Mac&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 17 Feb 2009 08:13:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-to-copy-from-ROM-to-RAM/m-p/149540#M7928</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2009-02-17T08:13:22Z</dc:date>
    </item>
  </channel>
</rss>

