请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LS1224 主题中讨论的其他器件:HALCOGEN
工具与软件:
您好!
我在使用仿真 EEPROM 时遇到了一个怪异的问题。 每当 我将块大小设置为大于8个字节(例如16或32个字节)时、索引12、13和14处的字节始终为零。
这是我的 printf()日志:
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
在主循环内部(在调用 FreeRTOS 相关函数之前)、我将执行以下操作:
// // 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 //
在我处理费用的任务中、代码如下所示:
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();
这是我的 HALCoGen 配置:
我曾尝试禁用所有与 ECC 相关的参数、但结果仍然相同。