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.

[参考译文] TMS320F28035:应用不是从内部闪存存储器运行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1452277/tms320f28035-application-is-not-running-from-internal-flash-memory

器件型号:TMS320F28035
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我正在使用 TI 28035实验套件。 我将程序更改为从闪存而不是 RAM 运行。 它工作一次、但当我进行下电上电时、它停止工作  

已参考 SPRA958L 及其示例程序、但无法解决我的问题。 我能够运行示例程序"F28035_example_nonBIOS_flash"

 遵循的步骤:

  • 将28035_RAM_lnk.cmd 替换为 F28035.cmd
  • 我已经有 DSP2803x_CodeStartBranch.asm 和 DSP2803x_Headers_nonBIOS.cmd
  • 声明在变量下面

 

     // Exterail 通过链接器定义 d

      外部 UINT16 RamfuncsLoadStart;

      外部 UINT16 RamfuncsLoadSize;

      外部 UINT16 RamfuncsRunStart;

 

  • 在函数 InitPieVectTable()后添加以下代码;

 

      //将闪存驻留函数复制到 RAM

      memcpy ((UINT16*)&RamfuncsRunStart、(UINT16 *)&RamfuncsLoadStart、

                   (unsigned long)&RamfuncsLoadSize);  

       //启用闪存等待状态

       InitFlash();

 

  • 在函数 InitPieCtrl 中、添加了此代码

      asm (" EALLOW");                    // Enable EALLOW protected register access (启用 EALLOW 受保护寄存器访问)  

      //逐步检查前三个32位位置(六个16位位置)。

      //这些位置由 ROM 引导加载程序在调试期间使用。

      memcpy ((UINT16 *)&PieVectTable+6、(UINT16 *)&PieVectTableInit+6256-6);  

      asm (" EDIS");                      // Disable EALLOW protected register access (禁用 EALLOW 受保护寄存器访问)

是否必须将  GPIO 37和 GPIO 34配置为引导模式?

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

    对于独立闪存操作、您需要使两个引导引脚为逻辑高电平= 3.3V (VDDIO)。  除非已修改 OTP 值、否则 Get Mode 的默认操作是引导至闪存。

    此致!

    Matthew

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

    我的应用也没有在调试器模式下运行。 至少 它应该 在调试器模式下工作、即使 我没有将引导引脚设置为高电平、对吗?

    示例程序"F28035_example_nonBIOS_flash"不会设置引导引脚。 它在我的 EVM 中作为独立应用程序运行。

    您能否查看我所做的更改并帮助我解决问题

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

    最新动态:

    在将 "F28035.cmd"文件替换为示例中给出的链接器文件后、我能够在调试模式下运行程序。 此外、当我正常加载程序时、程序也会运行。

    问题是、它在我重启电源后无法正常工作

    我排除了将启动引脚设置为高电平的可能性、因为在下电上电后可以运行示例程序

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

    我会在 C2000Ware 中查看此示例 、C:\ti\c2000\C2000Ware_5_04_00_00\device_support\f2803x\examples\c28\flash_F28035;这将显示从 RAM 引导到闪存以进行代码转换所需的步骤。

    需要注意的一点是、在这个示例中有重新分配的 PIE 矢量、我想您希望在 PIE 矢量存储器复制之后使 RAM 发生闪存、并确保正确分配新的矢量。  如果你没有任何中断、这无关紧要、只需想一想这些中断是否需要从 RAM 运行、并且在一定程度上假定代码被复制。

    此致!

    Matthew

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

    您好、Matthew:

    感谢您的答复。 我的问题现已解决。 坦率地说、我不知道  以前的问题是什么。 通过选择已处理的闪存命令文件来创建全新项目。

    很抱歉、我没有更新该主题