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.

[参考译文] TMS320F28388D:CM 内核上的闪存/EEPROM 存储器读取问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1428894/tms320f28388d-flash-eeprom-memory-read-issues-on-cm-core

器件型号:TMS320F28388D

工具与软件:

您好、  和团队

我们将在 TMS320F28388D 上开发 EEPROM 仿真特性。 当 EEPROM 仿真功能在 CPU1和 CPU2上按预期工作时、我们当前也尝试为 CM 内核开发相同功能。

/* Programming Commands */
#if defined(_C28X)
extern Fapi_StatusType Fapi_issueProgrammingCommand(
                                            uint32 *pu32StartAddress,
                                            uint16 *pu16DataBuffer,
                                            uint16  u16DataBufferSizeInWords,
                                            uint16 *pu16EccBuffer,
                                            uint16  u16EccBufferSizeInBytes,
                                            Fapi_FlashProgrammingCommandsType oMode
                                            );

extern Fapi_StatusType Fapi_issueProgrammingCommandForEccAddresses(
                                                           uint32 *pu32StartAddress,
                                                           uint16 *pu16EccBuffer,
                                                           uint16 u16EccBufferSizeInBytes
                                                           );
#else
extern Fapi_StatusType Fapi_issueProgrammingCommand(
                                                   uint32 *pu32StartAddress,
                                                   uint8  *pu8DataBuffer,
                                                   uint8  u8DataBufferSizeInBytes,
                                                   uint8  *pu8EccBuffer,
                                                   uint8  u8EccBufferSizeInBytes,
                                                   Fapi_FlashProgrammingCommandsType oMode
                                                   );

extern Fapi_StatusType Fapi_issueProgrammingCommandForEccAddresses(
                                                                  uint32 *pu32StartAddress,
                                                                  uint8 *pu8EccBuffer,
                                                                  uint8 u8EccBufferSizeInBytes
                                                                  );
#endif

我们已确定上述 API 的变化、其中针对 CPU1和 CPU2将数据类型指定为 uint16、而针对 CM 内核将数据类型指定为 uint8。  (请参阅上述代码)。

将 C28x 闪存库替换为 CM 闪存库并修改数据类型后、将组状态、页面状态和页面数据写入存储器的功能现在可以正常工作。

从闪存读取数据时、它会作为 NMI 生成。  

uint8 Read_Buffer[DATA_SIZE] = {0};
EEPROM_Read(Read_Buffer);
    
void EEPROM_Read(uint8* Read_Buffer)
{
    uint16 i;
    if (Empty_EEPROM)
    {
        
    } else
    {
        EEPROM_GetValidBank(1);
        Page_Pointer += 16;             // data type is uint8  and globally declared
        for(i=0;i<DATA_SIZE;i++)
        {
            Read_Buffer[i] = *(Page_Pointer++);  // This code generates NMI
        }
    }

我们已经验证、在复制操作期间、page_pointer 是否正确指向了预期的存储器位置(用于保存页数据)。

调试窗口消息- 存储器映射阻止读取0xFFFFFFF8 [代码= 0x20000]

使用 Fapi_Auto EccGeneration 配置选项对数据进行编程。

闪存配置:  
Flash_initModule (FLASH0CTRL_BASE、FLASH0ECC_BASE、4);
oReturnCheck = Fapi_initializeAPI (F021_CPU0_BASE_ADDRESS、125);
Flash_Disable 452-SW_Workaround (FLASH0CTRL_BASE);
oReturnCheck = Fapi_setActiveFlashBank (Fapi_Flash 0);
Flash_Enable 452-SW_Workaround (FLASH0CTRL_BASE);

您能帮助我们读取 EEPROM 存储器吗? 此外、您能否提供有关如何确定生成 NMI 的根本原因的指导?

谢谢、此致、

Vikram Tathe.

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

    Vikram

    我目前正在研究这一问题、明天应该有一个答复。

    谢谢!

    Alex

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

    Alex、您好!

    我想就上述问题再补充一点看法。

    我们使用以下 API 来测试读取和写入操作。

    WriteDataToEEPROM();

    ReadDataFromEEPROM(); // Stuck at this operation. Generates an NMI and gets stuck in a while loop inside the NMI ISR.

    WriteDataToEEPROM();

    ReadDataFromEEPROM();

    WriteDataToEEPROM();

    ReadDataFromEEPROM();

    调试会话期间、当它卡在 NMI ISR 内部的 while 循环中时。

    我发现、点击"CPU reset"、然后点击"restart"按钮来重新启动调试会话(无需重新刷写程序)、它按预期运行。 所有操作(包括 EEPROM 读取和写入操作)均按预期工作、且未生成 NMI。

    谢谢!

    Vikram

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

    尊敬的 Vikram:

    您是否可以尝试单步执行反汇编并确认地址是否正确?

    谢谢!

    Alex

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

    尊敬的 Vikram:

    我有一段时间没有收到您的消息、因此我要将此问题标记为已解决。

    谢谢!

    Alex