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

LPC2138 Flash Write Problem

Hi
I am trying to write to flash on a LPC2138. I am using Keils sample code with just the sector number and the ram address changed. Cannot get anything to happen other than I must reconnect to device.
Compiling in thumb. Freq=60MHz
Here is the code
Any help appliciated

typedef void (*IAP)(unsigned int [],unsigned int []);
IAP iap_bypointer;
void iap_byfunction (unsigned *cmd,unsigned *rslt,unsigned entry);

unsigned int command[5];
unsigned int result[5];
char Ram_Arry[512] = "Hello World";
char *Ram_Pointer;

void flash_write(void)
{ unsigned char index;

iap_bypointer = (IAP) 0x7FFFFFF1; //set IAP entry address in function pointer

Ram_Pointer = &Ram_Arry;

for (index = 0; index<0x0B; index++)
//Copy data to be written to flash into the RAM
{ *Ram_Pointer = Ram_Arry[index];
Ram_Pointer++;
} Ram_Pointer = &Ram_Arry;

command[0] = 0x36; //command code for "Read part ID"
iap_bypointer(command,result);

command[0] = 50; //Prepare sector ten for a write operayion
command[1] = 10;
command[2] = 10;
iap_bypointer(command,result);

command[0] = 52; //erase sector ten
command[1] = 10;
command[2] = 10;
command[3] = 60000; //Cclk == 12Mhz Pll is disabled in startup code
iap_bypointer(command,result);

command[0] = 50; //Prepare sector ten for a write operayion
command[1] = 10;
command[2] = 10;
iap_bypointer(command,result);

command[0] = 51; //write 512 bytes from address Pointer
command[1] = 0x00018000; //to 0x0000A000 in flash memory;
command[2] = Ram_Pointer;
command[3] = 512;
command[4] = 60000; // see erase comment above

while(1)
{ ;
}

}

Parents
  • Maybe someone could answer this question
    (maybe this is the problem)

    In the Keil sample code, sector 5 is prepared for write
    and then when the write command is invoked, the address used is:

    command[1] = 0x0000A000;

    However, the LPC2138 manual gives sector 5 address as:

    0X0000 5000 - 0X0000 5FFF

    So 0x0000A000 is outside this range.

    where do Keil get 0x0000A000 from and if this is correct, what address should I use for sector 10?

Reply
  • Maybe someone could answer this question
    (maybe this is the problem)

    In the Keil sample code, sector 5 is prepared for write
    and then when the write command is invoked, the address used is:

    command[1] = 0x0000A000;

    However, the LPC2138 manual gives sector 5 address as:

    0X0000 5000 - 0X0000 5FFF

    So 0x0000A000 is outside this range.

    where do Keil get 0x0000A000 from and if this is correct, what address should I use for sector 10?

Children