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.

[参考译文] CCS:擦除&使用 F021 API 进行编程

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/571221/ccs-erase-program-with-f021-api

主题中讨论的其他器件:TMS570LS3137

工具/软件:Code Composer Studio

您好!
我尝试使用 F021 API 擦除闪存(TMS570LS3137)的数据并对其进行编程、
但是这两种操作都不成功。

我想擦除数据并将其编程到"FlashBank1 Sector0"。

我的代码如下所示。

我的代码有什么问题?


//擦除阶段

Fapi_initializeFlashBanks (50);

Fapi_setActiveFlashBank (Fapi_FlashBank1);

Fapi_enableMainBankSectors (Fapi_FlashSector0);

Fapi_issueAppe19OPandCommandWithAddress (Fapi_EraseSector、(uint32_t *) 0x00180000U);

while (fapi_Status_FsmBusy =fapi_checkFsmForReady());


//程序阶段
Fapi_initializeFlashBanks (50);

Fapi_setActiveFlashBank (Fapi_FlashBank1);

Fapi_enableMainBankSectors (Fapi_FlashSector0);

Fapi_issueProgrammingCommand ((uint32_t *) 0x00180000U、
                            pu8DataBuffer、
                            u8DataBufferSizeInBytes、
                            0、
                            0、
                            Fapi_AutoEccGeneration);

while (fapi_Status_FsmBusy =fapi_checkFsmForReady());

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

    我正在调查此问题、并将很快返回给您。 但是、需要检查的一点是、如果您已将 API 例程复制到从 RAM 而不是闪存运行、或者至少已确认它们不是从您尝试擦除/编程的同一组运行?

    您是否看过这篇文章、了解他们的解决方案是否有用? e2e.ti.com/.../1859354
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否有机会查看过 e2e.ti.com/.../1859354帖子 、以了解这是否有助于您取得成功?

    如果您需要进一步的帮助、请告诉我。 您还可以在我们的引导加载程序示例中看到类似 F021闪存 API 的实现。 这些应用手册可在以下链接的页面上找到:TMS570LS3137
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您能否检查代码中调用的 F021闪存 API 函数的返回值?
    如果返回非零值、则表示器件配置/初始化有问题。

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

    您好!

    感谢您的回复。

    我检查了 F021闪存 API 函数的返回值。
    所有返回值均为零(Fapi_Status_Success)。

    我看到 并尝试了 e2e.ti.com/.../1859354、但我不能成功。


    调试启动时、我将擦除选项设置为所有组和扇区。
    但是 、在 main 函数之前、我通过内存浏览器看到0x00180000U、
    值是"???????? "。

    为什么不使用0xFFFF?


    我对 EEPROM (Bnak7)尝试了相同的操作、成功。

    当我使用 F021 API 函数将数据编程到 EEPROM 时、我的主要函数如下所示。

    /* EEPROM 的程序代码*/
    
    int main (void)
    {
    /*用户代码开始(3)*/
    uint8_t u8Buf[8]={0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08};
    Fapi_StatusType oReturnCheck = Fapi_Status_Success;
    
    /*初始化 FlashBats */
    oReturnCheck = Fapi_initializeFlashBanks (60);
    
    if ((Fapi_Status_Success =oReturnCheck)&&
    (fapi_Status_FsmBusy!= flash_control_register->fmstat.fmstat_bits.Busy)
    {
    /*启用 Bnak7 */
    oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank7);
    
    /*在 Bnak7中启用 Sector0 */
    oReturnCheck = Fapi_enableEpromBankSecors (0x01U、0x00U);
    
    /*程序数据*/
    oReturnCheck = fapi_issueprogramming Command (((uint32_t *) 0xF0200000U、
    u8buf、
    sizeof (u8buf)、
    0、
    0、
    Fapi_AutoEccGeneration);
    
    /*等待完成*/
    while (fapi_Status_FsmBusy =fapi_checkFsmForReady());
    }
    /*用户代码结束*/
    
    返回0;
    } 


    当我使用 F021 API 函数将数据编程到 FlashRom 时、我的主要函数如下所示。

    /* FlashRom 的程序代码*/
    
    int main (void)
    {
    /*用户代码开始(3)*/
    uint8_t u8Buf[8]={0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08};
    Fapi_StatusType oReturnCheck = Fapi_Status_Success;
    
    /*初始化 FlashBats */
    oReturnCheck = Fapi_initializeFlashBanks (60);
    
    if ((Fapi_Status_Success =oReturnCheck)&&
    (fapi_Status_FsmBusy!= flash_control_register->fmstat.fmstat_bits.Busy)
    {
    /*启用 Bnak1 */
    oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);
    
    /*启用安全0*/
    oReturnCheck = Fapi_enableMainBankSectors (Fapi_FlashSector0);
    
    /*程序数据*/
    oReturnCheck = fapi_issueprogramming Command (((uint32_t *) 0x00180000U、
    u8buf、
    sizeof (u8buf)、
    0、
    0、
    Fapi_AutoEccGeneration);
    
    /*等待完成*/
    while (fapi_Status_FsmBusy =fapi_checkFsmForReady());
    }
    /*用户代码结束*/
    
    返回0;
    } 


    为什么我无法将数据编程到 FlashRom?