This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LS1224:FEE 写入/读取异常行为

Guru**** 2383030 points
Other Parts Discussed in Thread: HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1419638/tms570ls1224-fee-write-read-weird-behaviour

器件型号: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 相关的参数、但结果仍然相同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 

    我认为此配置或代码没有任何问题。

    是否有可能在我的最后共享您的完整项目以进行快速调试

    甚至您也可以通过私人聊天发送。

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jagadish、

    我想出来了-一个由我引起的简单的缓冲区溢出。 与 F021和 FEE 相关的一切都可以正常工作。

    我为困惑感到抱歉、为我感到羞耻。

    您可以忽略并现在关闭线程。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没问题、Varaban。

    这些事情有时会发生。

    祝你度过美好的一天!