I am trying to write some data to Flash. While Prepare sector (cmd 50) and Erase sector (cmd 52) returns CMD_SUCCESS, I am having a hard time figuring out what should I send as a parameters to command 51.
uint8_t data[] = {0x12, 0x88}; uint8_t *dataPtr = &data[0]; command[0] = 51; command[1] = a_dest; //destination address 0x1ff0 command[2] = (uint32_t)dataPtr; command[3] = 2; command[4] = 48000000UL/1000; //frequency in kHz iap_entry(command, output);
This command returns output[0] == 0x0D, which doesnt even exist in datasheet as an error code...
While datasheet says that param 3 needs to be 256/512/1024 bytes long, I am not sure what should I do if I only want to update 2 bytes? Do I need first to read 256 bytes from (0x1ff2-256) and then change last two bytes in buffer and send that as a param2 ?
Microcontroller is LPC11C14.
Thanks
Thanks, I will try that way.
Yes, you need to copy out old flash data into the RAM buffer and patch it, so you can do a large copy from RAM to flash. The flash doesn't support any 2-byte updates because the flash data is based on sectors and the sectors are using ECC error correction forcing the size of the copy operations.
View all questions in Keil forum