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.

[参考译文] F28M36P63C2:C28闪存 API 部分工作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/662451/f28m36p63c2-c28-flashapi-partially-working

器件型号:F28M36P63C2
Thread 中讨论的其他器件:controlSUITE

我在协处理器 C28内核上使用 FlashAPI、擦除命令会导致 ILLEGAL_ISR()

我将按以下顺序执行命令:

Fapi_initializeAPI -工作、返回成功

fapi_getDeviceInfo()-工作,返回设备信息

FlashGainPump()-无错误

 Fapi_setActiveFlashBank (Fapi_FlashBank0)-工作返回成功

Fapi_issue19 CommandWithAddress (Fapi_EraseSector、Bzero_SectorG_start);失败。

以下是误差的输出:

Fapi_issue19 CommandWithAddress (枚举 ,unsigned long *)() at ASYNC.c:24 0x00A74B
Fapi_issue19 CommandWithAddress (枚举 ,unsigned long *)() at ASYNC.c:25 0x00A74E
Fapi_issue19 CommandWithAddress (枚举 ,unsigned long *)()位于 ASYNC.c:28 0x00A74F
Fapi_issue19 CommandWithAddress (枚举 ,unsigned long *)() at ASYNC.c:32 0x00A752
Fapi_issue19 CommandWithAddress (枚举 ,unsigned long *)() at ASYNC.c:41 0x00A759
_fapi_issueFsmCommand (枚举 )()位于 FlashStateMachine.c:39 0x00A00B
_fapi_issueFsmCommand (枚举 )()位于 FlashStateMachine.c:40 0x00A00D
_fapi_issueFsmCommand (枚举 )()位于 FlashStateMachine.c:41 0x00A018
F28M36x_DefaultIsr.c:87 0x13E4D1处的 ILLEGAL_ISR ()

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

    _fapi_issueFsmCommand():
    00a00b:FE02 ADDK SP、#2
    00a00c:9641 MOV *-SP[1]、AL
    00a00d:761F029E MOVW DP、#0x29e
    00a00f:8F000144 MOVL XAR4、#0x000144
    00a011:0602 MOVL ACC、@0x2
    00a012:560100A4附加 @XAR4、ACC
    00a014:CCC4FFF8和 AL、*+ XAR4[0]、#0xFF8
    00a016:5005 ORB AL、#0x5
    00a017:96C4 MOV *+XAR4[0]、AL
    00a018:0000 ITRAP0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯

    (1)根据您提到的输出、看起来您的应用程序从闪存执行闪存 API 函数。 是这样吗? 请检查并告知我。 您可能已经知道,闪存 API 函数应该从该器件上的 RAM 中执行( 在2.3.3节 www.ti.com/.../spnu595闪存 API 使用的关键事实中提到)

    请查看 ti\controlSUITE\device_support\f28m36x\vx\F28M36x_examples_Dual\flash_prog 中提供的示例。
    您将在链接器命令文件中注意到、闪存 API 库分配给.TI.ramfunc 段、该段具有闪存加载地址和 RAM 运行地址。 在示例代码中,您将注意到调用 memcpy()将 ramfunc 内容从闪存复制到 RAM。

    (2)此外、在调用任何闪存 API 函数之前增益泵。

    请告诉我您观察到的内容。
    闪存 API wiki: processors.wiki.ti.com/.../C2000_Flash_FAQ

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。
    API 从 L2 RAM (A000-AFFF)运行。

    结果...
    我将 API 移动到从 L3 RAM (B000-BFFF)运行、似乎已经解决了这个问题。
    在我的应用程序中使用我们的自定义库和 FlashAPI 时、似乎存在链接器冲突。

    共享 L2 RAM 是一个问题、CCS 不会对此提出任何投诉、这是很奇怪的。
    是否有任何链接器标签可确保闪存 API 的各个部分不会被覆盖?

    错误--(在 a018时为 itrap0):
    _fapi_issueFsmCommand():
    00a00b:FE02 ADDK SP、#2
    00a00c:9641 MOV *-SP[1]、AL
    00a00d:761F029E MOVW DP、#0x29e
    00a00f:8F000144 MOVL XAR4、#0x000144
    00a011:0602 MOVL ACC、@0x2
    00a012:560100A4附加 @XAR4、ACC
    00a014:CCC4FFF8和 AL、*+ XAR4[0]、#0xFF8
    00a016:5005 ORB AL、#0x5
    00a017:96C4 MOV *+XAR4[0]、AL
    00a018:0000 ITRAP0

    好的--移到了 L3 RAM:
    _fapi_issueFsmCommand():
    00b00b:FE02 ADDK SP、#2
    00b00c:9641 MOV *-SP[1]、AL
    00b00d:761F02DE MOVW DP、#0x2de
    00b00f:8F000144 MOVL XAR4、#0x000144
    00b011:0602 MOVL ACC、@0x2
    00b012:560100A4附加 @XAR4、ACC
    00b014:CCC4FFF8和 AL、*+ XAR4[0]、#0xFF8
    00b016:5005 ORB AL、#0x5
    00b017:96C4 MOV *+XAR4[0]、AL
    00b018:8F000106 MOVL XAR4、#0x000106
    00b01a:0602 MOVL ACC、@0x2
    00b01b:560100A4附加 @XAR4、ACC
    00b01d:9241 MOV AL、*- SP[1]
    等等...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯

    在运行时执行期间、应用程序或您的自定义库可能会覆盖 RAM 中的闪存 API 库? 请检查。

    或者您是否调用 memcpy()两次以将两组内容从闪存复制到 RAM?

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在应用程序中调用 memcpy 两次。 我还尝试使用链接器文件中的组标签。 这没用。

    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
    memcpy (&F021APIRunStart、&F021APILoadStart、(size_t)&F021APILoadSize);

    链接器命令文件:

    #ifdef __use_F28M36x__

    FLASH_API:

    -lF021_API_C28x_FPU32.lib
    }负载= FLASHD,
    运行= RAML3、
    LOAD_START (_F021APILoadStart)、
    load_size (_F021APILoadSize)、
    RUN_START (_F021APIRunStart)、
    PAGE = 0

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

    瑞吉斯

    请共享显示闪存 API 和 Ramfuncs 段分配的链接器 cmd 文件-您可以隐藏不想公布的详细信息。

    谢谢、此致、
    Vamsi

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

    F28M36H63C2_generic_wshared_C28_flash.cmd
    F28M36x_Headers_nonBIOS.cmd
    2个定制的。

    只有一个地方使用 RamFuncs。。。


    #if_TI_Compiler_version_< 15009000
    错误"TI 编译器版本错误"
    #endif

    .TI.ramfunc:{}负载= FLASHD,
    运行= RAML0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    瑞吉斯

    根据您到目前为止共享的两个快照、您可以在不同的 RAM 块中加载 Ramfuncs 和 Flash API、而无需对它们进行分组、这很适合您-这很好。

    如果您想使用相同的 RAM 块(只要它们合适)、您应该能够对它们进行分组。
    当您尝试对它们进行分组时、您遇到了什么问题? 如果您想进行调试、我可以要求我们的编译器团队提供帮助。 请告诉我。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从不同的 RAM 块运行它们是否存在问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    瑞吉斯

    不、这不是问题。  我总结了讨论情况----什么是有效的,什么不是对你有效的。

    如果您需要有关此主题的进一步帮助、请告诉我。  如果没有、我们可以关闭它。

    谢谢、此致、

    Vamsi

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