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.

[参考译文] TMS320F28379D:在闪存编程之后从闪存引导时出现 Launchpad 问题

Guru**** 2558820 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1303718/tms320f28379d-launchpad-issue-with-booting-from-flash-after-flash-programming

器件型号:TMS320F28379D

你好。

此电路板有问题。

我正在闪存中对器件进行编程。 一切都运行正常、即使在复位电路板后、器件也会复位并执行代码。  

我的程序允许在闪存上写入(一个用户参数)我使用存储器地址0x0BC000将一个参数存储在闪存中、为此、我使用提供的闪存 API 和示例。  

当我将参数保存在闪存中时、主板无法再次重新启动。 我对电路板下电上电或将电路板复位、但不执行代码。 电路板似乎未正确启动。  

如果我不使用该函数写入闪存中的参数(在地址0x0BC000中)、则该电路板能够在复位/下电上电和程序完美运行后正确引导和重新启动。

如果我启动调试会话、程序运行良好、甚至我可以将用户参数存储在闪存中、并在调试会话中重新启动代码、程序就会继续运行。  

我在调试中选中了、该参数被正确地写入地址0x0BC000中、并且没有修改其他代码。 设置此参数后、0x080000中的代码不会被修改。  

此外、在反汇编模式下的调试会话中、我可以看到第一条指令不是从0x080000开始、而是从0x080567开始。 调试重新启动是否会将 PC 指针发送到该地址并引导至0x080000。 我如何发送复位或引导指令到 PC 计数器来指向第一个主地址指令?  

我为什么要面对这个问题? 如何解决?  

此致。

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

    扫罗

    我同意您关于使用仿真会话来模拟独立启动来正确调试它的最后一点。  如您所说、CCS 在程序/加载之后可以进入 main、这可能会绕过正常的引导流程。

    在你连接至器件后(这个器件已经被闪存并且带有违反代码)、在 CCS 中转到 Run->Reset。  然后转至"Scripts->EMU_boot->FLASH Boot"。  这将在 RAM 中对 EMU 引导字段进行编程、而 BROM 将拦截此字段并模拟独立运行的闪存引导。  您应该能够跟随代码一起了解正在发生/未发生什么情况、或者这是否符合您的预期。

    如果您查看.map 文件(应与.out 文件位于同一目录中)、您还可以验证加载到0x80000的内容、这通常只会在 codestartbranch.asm 中进行函数调用、这是我们包含的一个文件、用于设置内核/寄存器以实现正确执行。  您还可以在这篇文章中附加您的.map 文件、我们也可以查看其中的内容。

    此致!

    马修