<?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: LPC1788 - IAP erase sector always returns BUSY</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523541#M6177</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dave on Wed Jul 23 15:58:15 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hey Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Good find here - I just ran into this issue, and you solved it 2 years ago...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;btw, hope your project is going good!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Dave&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:01:15 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:01:15Z</dc:date>
    <item>
      <title>LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523534#M6170</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Marc Crandall on Mon Feb 06 14:10:27 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm trying to erase some sectors of the internal flash using IAP but for a reason I can not figure out it is not working.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm preparing the sectors and this IAP command suceeds but when I try and erase the sectors I am returned BUSY (11).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm disabling interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anybody know why the IAP call would return BUSY?&amp;nbsp; Any suggestions of things I could try?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;M&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523534#M6170</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:11Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523535#M6171</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lien.Nguyen on Tue Feb 07 22:01:16 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;There is an example for IAP and it works ok. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I attached it for you. You can test on your board. if ok, compare it with your code to get the reason.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Lien&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523535#M6171</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:12Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523536#M6172</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Marc Crandall on Fri Feb 10 07:11:58 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Lien,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for the example.&amp;nbsp; This is the example I started from.&amp;nbsp; When I have no LCD and UART0 running I can get the IAP to work as expected.&amp;nbsp; Once I add the LCD and UART0 functionality to my application I get the BUSY flag every time I try and erase the flash.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What could cause the BUSY flag? Interrupts are disabled and I'm not trying to erase a section of flash I'm running from or currently using in ay other way.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;M&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;EDIT:&amp;nbsp; I just did a second test and it seems it's only the LCD being enabled that causes the BUSY flag not the UART0 functionality.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523536#M6172</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:12Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523537#M6173</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lien.Nguyen on Mon Feb 13 21:21:15 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I added the iap test code to the LCD example. It still runs ok. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I think that you should check more on the sectors you erase. Maybe erasing corrupts the IAP code. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Please try to erase last sectors of flash memory first. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Lien&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523537#M6173</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:13Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523538#M6174</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Marc Crandall on Wed Feb 15 12:28:52 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Lien,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I apologize for not being thorough enough but right now it is fairly difficult to isolate my code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It seems that it's not the LCD as you mention above but rather if I read from the EEPROM directly before the erase user flash:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;example.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This works:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("Checking EEPROM boot code: ");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //EEPROM_Read(BOOT_CODE_PAGE_OFFSET, BOOT_CODE_PAGE_ADDRESS, (void*)&amp;amp;boot_code, MODE_8_BIT, sizeof(uint32_t));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("0x%X\r\n", boot_code);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("TEST 1 Erasing user flash...\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; erase_user_flash();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("END TEST 1\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This fails with BUSY:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("Checking EEPROM boot code: ");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_Read(BOOT_CODE_PAGE_OFFSET, BOOT_CODE_PAGE_ADDRESS, (void*)&amp;amp;boot_code, MODE_8_BIT, sizeof(uint32_t));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("0x%X\r\n", boot_code);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("TEST 1 Erasing user flash...\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; erase_user_flash();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("END TEST 1\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any thoughts?&amp;nbsp; What is the actual meaning of the BUSY return value?&amp;nbsp; It's not very clear in the user manual.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Marc&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523538#M6174</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:13Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523539#M6175</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Marc Crandall on Wed Feb 15 13:50:30 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;After some trial and error the following solved my problem:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("Checking EEPROM boot code: ");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_Read(BOOT_CODE_PAGE_OFFSET, BOOT_CODE_PAGE_ADDRESS, (void*)&amp;amp;boot_code, MODE_8_BIT, sizeof(uint32_t));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CLEAR THE INT FLAGS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_EEPROM-&amp;gt;INT_CLR_STATUS = (BIT26|BIT28);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("0x%X\r\n", boot_code);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("TEST 1 Erasing user flash...\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; erase_user_flash();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOT_PRINT("END TEST 1\r\n");&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Marc&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523539#M6175</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:14Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523540#M6176</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lien.Nguyen on Wed Feb 15 20:45:11 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your reponse. Maybe, IAP interface thinks that the eeprom operation hasnt finished yet.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I found that there is an error in the EEPROM_Read. When the last byte is read, if it is also the last byte of a EEPROM page, erasing flash will be failed with Busy.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The fix is:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Replace the line: &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(page_offset &amp;gt;= EEPROM_PAGE_SIZE)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; with&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((page_offset &amp;gt;= EEPROM_PAGE_SIZE) &amp;amp;&amp;amp; (i &amp;lt; count - 1))&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Lien&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523540#M6176</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:15Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523541#M6177</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dave on Wed Jul 23 15:58:15 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hey Marc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Good find here - I just ran into this issue, and you solved it 2 years ago...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;btw, hope your project is going good!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Dave&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523541#M6177</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:15Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523542#M6178</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 Jul 23 16:08:23 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I too have run into this is nusy issue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So when I check for the erase status, I exclude 'busy' and continue to blank check.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You DO check that the erased sector(s) is(are) blank don't you!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Incomplete sample (for 1778) follows, but you will get the idea.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ldrr0, [r7, 5*4]; get status code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cmpr0, 11; is it lying about being 'busy'?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bne9f; nope&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;---------------------------------------;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;movsr0, 53; yup -- is it actually blank?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;strr0, [r7];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;movsr0, r7; 'in'&amp;nbsp; parameters&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;addsr1, r7,&amp;nbsp; 5*4; 'out' parameters&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;blGoIAP;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldrr0, [r7, 5*4]; get status code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;cbnzr0, 9f; OOPS -- IAP failed&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;---------------------------------------;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;9:pop{r7,pc}; return (zero == success)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope this help. Mike&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523542#M6178</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:16Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523543#M6179</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Dave on Wed Jul 23 16:21:24 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Mike,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Just curious... with your code, is there ever a time when the erase_sector ISN'T lying?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No matter what I do, I always get r[0] = 11&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And since I always have to "prepare" before I do something, I'm guessing the preparing is leaving the flags set in the status register...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the code is pretty simple:&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 IAP_ADDRESS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x1FFF1FF1

void (*IAP_function)( uint32_t [],uint32_t [] ) = (void (*)(uint32_t[], uint32_t[]))(IAP_ADDRESS);

uint32_t PrepareSector( uint32_t StartSector, uint32_t EndSector )
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp; uint32_t ParamTable&amp;nbsp; [ TABLE_SIZE ];
&amp;nbsp;&amp;nbsp; uint32_t ResultTable [ TABLE_SIZE ];
&amp;nbsp;&amp;nbsp; __disable_irq();&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; // turn off interrupts...&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; ParamTable[0] = PREPARE_FOR_WRITE_OR_ERASE;&amp;nbsp; // set command...&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; ParamTable[1] = StartSector;&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; // set start sector number (0-29)&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; ParamTable[2] = EndSector;&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; // set end sector number (0-29)&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; ParamTable[3] = SystemCoreClock / 1000;&amp;nbsp;&amp;nbsp; // set clock frequency in kHz&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;&amp;nbsp; IAP_function( ParamTable, ResultTable );&amp;nbsp; // execute IAP function&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; __enable_irq();&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;&amp;nbsp; // turn back on interrupts...&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;&amp;nbsp; return( ResultTable[ 0 ] );&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 result of operation...&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; }

uint32_t EraseFlashSector( uint32_t StartSector, uint32_t EndSector )
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp; uint32_t ParamTable&amp;nbsp; [ TABLE_SIZE ];
&amp;nbsp;&amp;nbsp; uint32_t ResultTable [ TABLE_SIZE ];
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; LPC_EEPROM-&amp;gt;INT_CLR_STATUS = (1&amp;lt;&amp;lt;26) | (1&amp;lt;&amp;lt;28); // without this, erase reports it's busy...
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; __disable_irq();&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; // turn off interrupts...&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; ParamTable[0] = ERASE_SECTOR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set command...&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;&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; ParamTable[1] = StartSector;&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; // set start sector number (0-29)&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; ParamTable[2] = EndSector;&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; // set end sector number (0-29)&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; ParamTable[3] = SystemCoreClock / 1000;&amp;nbsp;&amp;nbsp; // set clock frequency in kHz&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;&amp;nbsp; IAP_function( ParamTable, ResultTable );&amp;nbsp; // execute IAP function&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; __enable_irq();&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;&amp;nbsp; // turn back on interrupts...&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;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; return( ResultTable[ 0 ] );&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 result of operation...&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; }

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, thanks for the recommendation on verifying the flash is blank before moving forward...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Dave&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523543#M6179</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:16Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1788 - IAP erase sector always returns BUSY</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523544#M6180</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 Jul 23 16:40:44 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I wrote the code in August 2012, so memory is a little fuzzy.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I seem to remember that it always lied, but didn't try to pin it down.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyway, I 'fixed' it by blank check and moved on.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The OP remarks about internal EEPROM seem relevant, I have initialised EEPROM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;by the time I call the Flash functions.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards, Mike&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:01:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1788-IAP-erase-sector-always-returns-BUSY/m-p/523544#M6180</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:01:17Z</dc:date>
    </item>
  </channel>
</rss>

