Other Parts Discussed in Thread: HALCOGEN
Tool/software:
Hi,
I am facing a weird issue with the emulated EEPROM. Whenever I set the block size larger than 8 bytes (like 16 or 32 bytes), the bytes at index 12,13 and 14 are always zero.
This is my printf() log:
flashLibInfo: 0 flashDevInfo: 1280 BLK 1 --- write: 0 | read: 0 BLK 1 --- write: 1 | read: 1 BLK 1 --- write: 2 | read: 2 BLK 1 --- write: 3 | read: 3 BLK 1 --- write: 4 | read: 4 BLK 1 --- write: 5 | read: 5 BLK 1 --- write: 6 | read: 6 BLK 1 --- write: 7 | read: 7 BLK 1 --- write: 8 | read: 8 BLK 1 --- write: 9 | read: 9 BLK 1 --- write: 10 | read: 10 BLK 1 --- write: 11 | read: 11 BLK 1 --- write: 12 | read: 0 BLK 1 --- write: 13 | read: 0 BLK 1 --- write: 14 | read: 0 BLK 1 --- write: 15 | read: 15 BLK 1 --- write: 16 | read: 16 BLK 1 --- write: 17 | read: 17 BLK 1 --- write: 18 | read: 18 BLK 1 --- write: 19 | read: 19 BLK 1 --- write: 20 | read: 20 BLK 1 --- write: 21 | read: 21 BLK 1 --- write: 22 | read: 22 BLK 1 --- write: 23 | read: 23 BLK 1 --- write: 24 | read: 24 BLK 1 --- write: 25 | read: 25 BLK 1 --- write: 26 | read: 26 BLK 1 --- write: 27 | read: 27 BLK 1 --- write: 28 | read: 28 BLK 1 --- write: 29 | read: 29 BLK 1 --- write: 30 | read: 30 BLK 1 --- write: 31 | read: 31 BLK 2 --- write: 0 | read: 0 BLK 2 --- write: 1 | read: 1 BLK 2 --- write: 2 | read: 2 BLK 2 --- write: 3 | read: 3 BLK 2 --- write: 4 | read: 4 BLK 2 --- write: 5 | read: 5 BLK 2 --- write: 6 | read: 6 BLK 2 --- write: 7 | read: 7 BLK 2 --- write: 8 | read: 8 BLK 2 --- write: 9 | read: 9 BLK 2 --- write: 10 | read: 10 BLK 2 --- write: 11 | read: 11 BLK 2 --- write: 12 | read: 0 BLK 2 --- write: 13 | read: 0 BLK 2 --- write: 14 | read: 0 BLK 2 --- write: 15 | read: 15 BLK 2 --- write: 16 | read: 16 BLK 2 --- write: 17 | read: 17 BLK 2 --- write: 18 | read: 18 BLK 2 --- write: 19 | read: 19 BLK 2 --- write: 20 | read: 20 BLK 2 --- write: 21 | read: 21 BLK 2 --- write: 22 | read: 22 BLK 2 --- write: 23 | read: 23 BLK 2 --- write: 24 | read: 24 BLK 2 --- write: 25 | read: 25 BLK 2 --- write: 26 | read: 26 BLK 2 --- write: 27 | read: 27 BLK 2 --- write: 28 | read: 28 BLK 2 --- write: 29 | read: 29 BLK 2 --- write: 30 | read: 30 BLK 2 --- write: 31 | read: 31 CHAN: 0
Inside the main loop (before calling the FreeRTOS related functions), I do the following:
// // FEE Start // uint32 loop; for(loop = 0; loop < 100; loop++) SpecialRamBlock[loop] = loop; /* Initialize FEE. This will create Virtual sectors, initialize global variables etc.*/ TI_Fee_Init(); do { TI_Fee_MainFunction(); __delay_cycles(1000); Status = TI_Fee_GetStatus(0); } while(Status != IDLE); // // FEE End //
Inside the task where I work with the FEE, the code looks as follows:
taskENTER_CRITICAL(); register uint32_t u32Mode = 0x1F; /* Privileged */ u32Mode = switchCpuMode(u32Mode); // const TickType_t xDelay = pdMS_TO_TICKS(500); const TickType_t xDelay = 500 / portTICK_PERIOD_MS; Fapi_LibraryInfoType flashLibInfo = Fapi_getLibraryInfo(); Fapi_DeviceInfoType flashDevInfo = Fapi_getDeviceInfo(); printf("flashLibInfo: %u\n", flashLibInfo.u8ApiTechnologyRevision); printf("flashDevInfo: %u\n", flashDevInfo.u16DeviceMemorySize); uint8 ReadBuffer[8] = { 0x00 }; Std_ReturnType FeeRetVal = E_NOT_OK; uint32 BlockNumber; const uint32 LastBlockNumber = 2; for (BlockNumber = 0x01; BlockNumber <= LastBlockNumber; BlockNumber++) { FeeRetVal = TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[0]); if (FeeRetVal != E_OK) printf("FATAL: TI_Fee_WriteAsync failed!\n"); do { TI_Fee_MainFunction(); __delay_cycles(100); Status = TI_Fee_GetStatus(0); } while(Status != IDLE); } for (BlockNumber = 0x01; BlockNumber <= LastBlockNumber; BlockNumber++) { FeeRetVal = TI_Fee_Read(BlockNumber, (uint16)0, ReadBuffer, 32); if (FeeRetVal != E_OK) printf("FATAL: TI_Fee_Read failed!\n"); do { TI_Fee_MainFunction(); __delay_cycles(100); Status = TI_Fee_GetStatus(0); } while(Status != IDLE); uint32 i = 0; for (i = 0; i < 32; i++) { printf("BLK %u --- write: %u | read: %u\n", BlockNumber, SpecialRamBlock[i], ReadBuffer[i]); } } taskEXIT_CRITICAL();
This is my HALCoGen configuration:
I tried with disabling all ECC-related parameters, but the result is still the same.