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.

[参考译文] TMS320F28379D:CPU2 的闪存 API F021_F2837xD/F2837x_C28x

Guru**** 2562120 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1571765/tms320f28379d-flash-api-f021_f2837xd_c28x-for-cpu2

部件号:TMS320F28379D
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好:

Matthew 在这个论坛上帮助我写 了 CPU1 的闪存。 现在一切都很好...但我需要在 CPU2 上做同样的事情。 我非常确定 API 出现了问题。 也许对于一位专家来说是显而易见的。

1) 与 CPU1 相同的功能写入闪存 (N、0x98000) 并加载到 RAM LS3 (0x9800) 中

2) 在仿真模式下执行时没有问题

3) 在写入函数中、活动闪存组在 Bank0 处设置(根据 Matt 的建议)。 API 将 F021_CPU0_BASE_ADDRESS 考虑在内的初始化位置(仅仅因为它是唯一可用的符号)

注意:写入函数是 以下调用的序列:

oReturnCheck = Fapi_initializeAPI (F021_CPU0_BASE_ADDRESS、SYSTEM_FREQUENCY);-->我必须说我希望指定类似 CPU1……

oReturnCheck = Fapi_setActiveFlashBank (Fapi_Flash 组 0);

oReturnCheck = Fapi_issueAsyncCommandWithAddress (uint32_t Fapi_Erase、(uint32_t *) Bzero_Sector);

oReturnCheck = Fapi_doBlankCheck ((uint32_t *) StatusWord.N_START、BZERO_16KSector_u32length、Bzero_Sector);

oReturnCheck = Fapi_issueProgrammingCommand (...);

oReturnCheck = Fapi_doVerify (...);-->该函数检测到写入没有完成

Flash0EccRegs.ecc_enable.bit.enable = 0xa;->我输入这个值是因为我被告知输入这个值

ReleaseFlashPump();--> 我把它放在这里、因为我被告知要把它放在这里

有人有什么想法吗?

谢谢

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

    Vince、

    很高兴为您提供帮助;由于我们正在运行第 2 个 CPU、因此我们需要获取闪存泵信标的控制、以便对闪存进行编程。  虽然有独立的闪存存储体;但只有一个泵必须在 2 个 CPU 之间共享。

    此代码部分位于 F2837xD/sysctrl.c 中:

    作废 SeizeFlashPump (void)

    EALLOW;
    #ifdef CPU1
    while (FlashPumpSemaphoreRegs.PUMPREQUEST.bit.PUMP_Ownership!= 0x2)

    FlashPumpSemaphoreRegs.PUMPREQUEST.ALL = IPC_PUMP_KEY | 0x2;
    }
    #elif defined (CPU2)
    while (FlashPumpSemaphoreRegs.PUMPREQUEST.bit.PUMP_Ownership!= 0x1)

    FlashPumpSemaphoreRegs.PUMPREQUEST.ALL = IPC_PUMP_KEY | 0x1;
    }
    #endif
    EDIS;
    }

    如果要导入 C2000Ware 中预制工程的一部分、该工程如下所示:

    C:\ti\c2000\C2000Ware_6_00_00\device_support\f2837xd\examples\dual\flash_programming\cpu02\

    如果有帮助、同一路径中有一个等效的 cpu01。

    此致、

    Matthew

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

    您好 Matthew、

    很清楚、它实际上解决了我的问题。

    请尽快发言。

    Vincent