Hello all,
I am using the EK-TM4C1294XL board to develop my project and I am facing a problem when writing on flash. Also, I am using the driverlib and ti-rtos.
I need to persist some data on flash and, on the first load of the program, I write the data direct to the flash but, after this write, the program freezes in the next command, in my case, a simple System_printf. The debug just stops on this command and does not goes forward. I also started a single program just to nake sure I have no other problems in the original project. My new project does almost nothing in the main.
Please, see the attached code below.
#define FLASH_CONFIG_SECTOR 0xC0000 typedef struct { uint32_t programmed; // The default value for a programmed section is 0x0000ABCD uint32_t serverIpAddress[4]; // Server IPAddress uint32_t serverPort; // Server Port uint32_t localServerPort; // Local server port uint32_t equipmentId[8]; // Equipment ID uint32_t serialNumber[14]; // Equipment SerialNumber uint32_t partNumber[16]; // Equipment PartNumber uint32_t reserved[467]; // (512 - number of items above) } RemottaConfig; int main(void) { uint32_t clock; unsigned int programmed; RemottaConfig rc; // Usar 120MHZ de clock clock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); /* Call board init functions */ Board_initGeneral(); Board_initGPIO(); programmed = HWREG(FLASH_CONFIG_SECTOR); if (programmed == 0xFFFFFFFF) { System_printf("First RUN.\n"); System_flush(); rc.programmed = FLASH_PROGRAMMED; rc.serverIpAddress[0] = 192; rc.serverIpAddress[1] = 168; rc.serverIpAddress[2] = 10; rc.serverIpAddress[3] = 122; rc.serverPort = 5000; rc.localServerPort = 8000; memset(rc.equipmentId, 0, sizeof(rc.equipmentId)); memset(rc.serialNumber, 0, sizeof(rc.serialNumber)); memset(rc.partNumber, 0, sizeof(rc.partNumber)); memset(rc.reserved, 0, sizeof(rc.reserved)); FlashErase(FLASH_CONFIG_SECTOR); FlashProgram((uint32_t *)&rc, FLASH_CONFIG_SECTOR, sizeof(RemottaConfig)); } System_printf("Here is where my code stops\n"); System_flush(); ...
After FlashProgram, I see in the MemoryBrowser the data correctly stored in the flash, as expected.
When I remove the code that uses flash, everything goes ok.
What m I doing wrong?
Hi,
Just to trying to do something different, I added the following code before the line: programmed = HWREG(FLASH_CONFIG_SECTOR);
protection = FlashProtectGet(FLASH_CONFIG_SECTOR); switch(protection) { case FlashReadWrite: System_printf("We can read and write on flash"); break; case FlashReadOnly: System_printf("Just for reading"); break; case FlashExecuteOnly: System_printf("just for executing"); break; } System_flush();
And I am receiving the value FlashReadWrite.
Tks in advance.
Leandro