请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 相关的参数、但结果仍然相同。