Part Number: TMS570LS1224
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.