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.

[参考译文] TMS320F280037C:闪存初始化崩溃 DSP

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1259213/tms320f280037c-flash-initialization-crashes-dsp

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

我运行 FapiSetActiveFlashBank(0)。它将转至  Fapi_setupFlashStateMachine(),并在发生非法指令时崩溃。  

CCS 调试窗口中显示的崩溃地址错误(0x88633)。 实际崩溃发生在其他地址为0x84e7e

崩溃时的指令(从非法指令处理程序内的堆栈中获取)  MOVB ACC、#64 (如下面的反汇编中所示)、并通过在该地址放置一个断点和下面的一条指令来验证。  

提示:  

-电路仅连接到 PS, PS 正常,没有噪音源。 否则 DSP 运行正常

-除了这个报告之外,在 DSP 或其软件中没有问题

-调试为 XDS100V3。 通过 XDS110重复了相同的行为、并且在没有 JTAG 连接的情况下从闪存运行时似乎也是如此。  

-问题重复与几个 DSP 板。  

-当在.cmd 文件中排除该地址时,链接器必须将该例程定位在闪存的其他位置。 问题仍然存在,在同一条流水线上(在另一个实际地址)。  

-内存浏览的启示汇编指令0x240= MOVB ACC,# 64就在那里

-当这个例程运行时,我所有的操作中断处理程序都被阻止。  在几行之前阻止中断(直接在 IDE 中的 ST1中设置 INTM)不会改变任何情况

-当单步执行调试器单个汇编步骤时,MOVB ACC,#64执行 OK (在寄存器对话框中观察 ACC),在步进之后 DSP 继续正常运行指令。  

C$L22:
084e69:96EA MOV *+XAR2[5]、AL
084e6a:761F027F MOVW DP、#0x27f
084e6c:0232 MOVB ACC、#50
084e6d:073A 附加 ACC、@0x3a
084e6e:8AA9 MOVL XAR4、@ACC
084e6f:28C4AA55 MOV *+XAR4[0]、#0xaa55
084e71:CC50FF00和 AL、*-SP[16]、#0xFF00
084e73:FFC7 LSR AL、8
084e74:88A9 MOVZ AR6、@AL
084e75:0240 MOVB ACC、#64
084e76:073A 附加 ACC、@0x3a
084e77:8AA9 MOVL XAR4、@μ A ACC
084e78:CCA6000F 和 AL、@AR6、#0xF
084e7a:88A9 MOVZ AR6、Ø@AL
084e7b:CDC4FFF0和 AH、*+XAR4[0]、#0xFFf0
084e7d:99A6或@AR6、AH
084e7e:0240 MOVB ACC、#64
084e7f:073A 附加 ACC、@0x3a

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

    尊敬的 Yahali:

    我可以在一两天内查看并与您联系。

    谢谢。此致、
    瓦姆西

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

    尊敬的 Yahali:

    1) 1)根据您提供的崩溃地址: 是否从闪存执行闪存 API?  请注意、闪存 API (和调用闪存 API 库函数的函数)不应从闪存擦除/编程操作所针对的同一存储体中执行。   

    2) 2)您是否能够按原样执行闪存 API 使用示例(在 C2000Ware 中提供)而不会产生任何问题?   

    3) 3)  有关闪存 API 使用方法的常见问题解答: e2e.ti.com/.../faq-faq-on-flash-api-usage-for-c2000-devices

    谢谢。此致、

    瓦姆西

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

    尊敬的 Yahali:

    如你针对同一主题打开的另一篇帖子所述(见下文): 我在此回复。

    请检查我们提供的闪存 API 使用示例的链接器命令文件。  您会注意到、闪存 API 库 被 映射到闪存进行加载、而映射到 RAM 进行执行。  闪存 API 函数(和.TI.ramfunc)在运行时复制到 RAM。   

    如前所述、闪存 API 不应从擦除/编程操作所针对的同一闪存存储体中执行。  您可能会看到它有时工作正常-但并非总是如此。  闪存泵一次只能支持其中一个电压-读取/取或者擦除/编程。  因此、当擦除/编程操作处于活动状态时、不能从闪存执行代码。   

    谢谢。此致、

    瓦姆西

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

    尊敬的 Yahali:

    我将关闭此帖子、因为您提到问题已解决(基于您的其他帖子 https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1259082/tms320f280037c-crash-on-preparing-flash-to-burn-fapisetactiveflashbank-0/4769975#4769975)。

    谢谢。此致、
    瓦姆西