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.

[参考译文] 编译器/TMS320F28386D:CM 闪存 API 程序失败

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/969084/compiler-tms320f28386d-cm-flash-api-program-fail

器件型号:TMS320F28386D
主题中讨论的其他器件:C2000WARE

工具/软件:TI C/C++编译器

您好!

我使用 armhex.exe 将 cm.out 转换为 b0、并使用以下命令。 (从 C:\ti\ccs930\ccs\tools\compiler\ti-cgt-arm_18.12.6.LTS \bin)

..\%TOOLDIR%\armhex.exe cm.out -boot -GPIO8 -b

e2e.ti.com/.../OpenDrive_5F00_F2838x_5F00_cm_5F00_b0.txt

然后按照 cm 闪存 API 解释.b0文件和程序数据。

某些地址可以按预期进行编程、但有些地址失败。

例如、  

成功地址:

故障地址:0x208AE8

当失败时、我已检查以下内容:

fapi_issueProgrammingCommand()中的地址参数、缓冲区数据均正确。

fapi_checkFsmForReady() 准备就绪后, fapi_getFsmStatus()返回零。 这意味着没有错误。

3. fapi_doVerify ()返回 Fapi_Error_Fail、比较日期正确、但存储器中的值全部为0xFFFF

地址 0x208AE8是否与128位对齐不匹配?

但是、我在.cmd 文件中添加了 align (8)。

e2e.ti.com/.../2838x_5F00_FLASH_5F00_lnk_5F00_cm.txt

请给我一些建议。

谢谢你。

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

    弗雷德里克

    请对齐 align (16)的链接器 cmd 中的段。  对于 ARM 内核、使用 align (16)可实现128位对齐。   e2e.ti.com/.../951658的常见问题解答中对此进行了介绍。

    0x208AE8不是128位对齐。  它是64位对齐的。  因此、在为此地址调用程序函数时、最多可以对64位(8字节)进行编程。  也许您正在尝试编程多于该值(128位)的内容?  请检查。   

    当失败时、程序函数会返回错误-您是否检查了程序函数的返回值? 如果没有、请检查。

    如果上述内容不能帮助解决问题,请提供您调用程序函数 Fapi_checkFsmForReady()、 Fapi_getFsmStatus()和 Fapi_doVerify ()的代码快照。

    谢谢、此致、
    Vamsi

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

    您好、 Vamsi、

    将 cm.cmd 修改为 align (16)后、我可以成功刻录代码、而不会出现错误。

    我调用 API 函数、就像版本 3.2.0中的 C2000Ware 示例 flashapi_cm_ex1_programming.c 一样。

    我看到 "TMS320F2838x 闪存 API 版本1.60.00.00 参考指南"、这意味着所有3.x.x C2000Ware FlashApi 示例应匹配128位对齐。

    关键点缓冲区大小是否为16?  

    fapi_issueProgrammingCommand (((uint32 *) u32Index、Buffer+I、16、0、0、Fapi_AutoEccGeneration);

    这是否意味着如果修改为 缓冲区大小8、可以对地址对齐64位进行编程?  

    fapi_issueProgrammingCommand (((uint32 *) u32Index、Buffer+I、8、0、0、Fapi_AutoEccGeneration);

    谢谢、此致、

    弗雷德里克

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

    弗雷德里克

    很高兴它帮助了我们。

    是的、如果为程序函数传递的地址是128位对齐的、则可以对16字节进行编程。

    您可以通过提供一个64位对齐地址来对8个字节进行编程。

    谢谢、此致、
    Vamsi

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

    Vamsi、

    我已经理解并解决了我的问题。

    感谢你的帮助。

    谢谢、此致、

    弗雷德里克