I'm trying to write a structure to FLASH.
The structure:
typedef struct TEST_S
{
unsigned int start;
unsigned int length;
unsigned int text_addr;
unsigned int padding;
}TEST;
TEST test;
Initialization:
uint32_t struct_size = sizeof(TEST); //16 bytes
test.start = 0xDADA;
test.length = total_len;
test.text_addr = 0;
tests[test_idx].padding = 0;
Write operation:
uint32_t FLASH_PageProgram(uint32_t page_num, uint32_t addr, uint8_t *buffer, uint32_t size)
{
uint32_t dest;
DisableInterrupts;
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(page_num*FTFx_PSECTOR_SIZE) + addr;
ret = FlashProgram(&flashSSDConfig, dest, size, buffer, FlashCommandSequence);
EnableInterrupts;
return ret;
}
Usage:
flash_addr = 0; //from the start of the page -> 0x000FA000, USER_PAGE = 250
ret = FLASH_PageProgram(USER_PAGE, flash_addr, (uint8_t*) &test, struct_size );
if (ret)
return ret;
I get an error (ret = 1) - Protection violation is set in FSTAT register. In the debugger I see first 8 bytes it writes ok. On second 8 bytes the error is generated.