This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Not Able to erase Sector 0 when using IAP in LPC2214

Thanks Peter....... My Apology for not putting the

Code in proper format ......

I want to implement the functionality of IAP in LPC2214.... for testing purpose I have taken the sample code from keil..... C:\Keil\ARM\Flash\LPC_IAP_256...In this code I have tried to erase all the sector & write data . I am able to erase all the sectors & write the data successfully.......except sector 0 ? as I try to erase sector 0 and write some data on it ......... it erases all the sectors and not data has been written ? The sample code form keil is ......
As You can see in the main function, we have disable the Interrupt function .........

/* IAP Download Function */

#include "FlashOS.H" // FlashOS Structures

#define M8(adr) (*((volatile unsigned char *) (adr)))

void IAP_download(void);

volatile int ret; // Return Code
unsigned char TempBuf[1024] = " CMS CMS CMS ";
static unsigned char TempBuf2[1024];
unsigned int Cnt;

void IAP_download (void ) { unsigned long n; unsigned short Cnt; ret = Init(0, 48000000, 1); //ret |= EraseChip();

ret |= EraseSector(0x00000000);

ret |= EraseSector(0x00002000);

ret |= EraseSector(0x00004000);

ret |= EraseSector(0x00006000);

ret |= EraseSector(0x00008000);

ret |= EraseSector(0x0000A000);

ret |= EraseSector(0x0000C000);

ret |= EraseSector(0x0000E000);

ret |= EraseSector(0x00010000);

ret |= EraseSector(0x00020000);

ret |= EraseSector(0x00030000);

ret |= EraseSector(0x00032000);

ret |= EraseSector(0x00034000);

ret |= EraseSector(0x00036000);

ret |= EraseSector(0x00038000);

ret |= EraseSector(0x0003A000);

ret |= EraseSector(0x0003C000);

/* Fill the buffer for writeing in Flash Sector */

for (n = 0; n < 1024; n++)

{

buf[n] = ( unsigned char )n;

}

/* Fill the buffer for writeing in Flash Sector */

for (Cnt = 0; Cnt <1024; Cnt++)

{

TempBuf2[Cnt] = '*';

}

ret |= ProgramPage(0x00000000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00002000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00004000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00006000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x00008000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x0000A000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x0000C000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x0000E000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x00010000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00020000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x00030000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00032000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x00034000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x00036000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x00038000 ,1024, (unsigned char *)TempBuf2 );

ret |= ProgramPage(0x0003A000 ,1024, (unsigned char *)TempBuf );

ret |= ProgramPage(0x0003C000 ,1024, (unsigned char *)TempBuf2 );

while (1); // Wait forever
}

/* Main Function */

#include <lpc21xx.h>
#include <stdio.h>
#include "FlashOS.H"

#define M8(adr) (*((volatile unsigned char *) (adr)))

extern void IAP_download(void);

int main(void)

{

IODIR0 = 0xFFFFFFFF;

IODIR1 = 0xFFFFFFFF;

//#pragma arm

VICIntEnClr = 0xFFFFFFFF; // Disable all interrupt IAP_download( );

// #pragma thumb

while (1);
}

/* FlashDev.c Function */

#include "FlashOS.H" // FlashOS Structures

struct FlashDevice const FlashDevice =

{

FLASH_DRV_VERS, // Driver Version, do not modify!

"LPC2000 IAP 256kB Flash", // Device Name

ONCHIP, // Device Type

0x00000000, // Device Start Address

0x0003E000, // Device Size without Boot Loader

// (248kB)

1024, // Programming Page Size

0, // Reserved, must be 0

0xFF, // Initial Content of Erased Memory

100, // Program Page Timeout 100 mSec

3000, // Erase Sector Timeout 3000 mSec

// Specify Size and Address of Sectors

0x002000, 0x000000, // Sector Size 8kB (8 Sectors)

0x010000, 0x010000, // Sector Size 64kB (2 Sectors)

0x002000, 0x030000, // Sector Size 8kB (7 Sectors)

SECTOR_END
};

Parents
  • No need to create new threads. It just creates confusion for people reading or answering - remember that Google and other people may not know that the threads are related, or that the discussion has moved to a new thread.

    But you still haven't read the text directly above the message input box. If you had, then your code would have looked like (assuming you did indent the code with spaces):

    #include <stdio.h>
    
    int main(void) {
        printf("Hello world!\n");
        return 0;
    }
    

Reply
  • No need to create new threads. It just creates confusion for people reading or answering - remember that Google and other people may not know that the threads are related, or that the discussion has moved to a new thread.

    But you still haven't read the text directly above the message input box. If you had, then your code would have looked like (assuming you did indent the code with spaces):

    #include <stdio.h>
    
    int main(void) {
        printf("Hello world!\n");
        return 0;
    }
    

Children