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:加载内核后串行闪存无法正常工作

Guru**** 2589275 points
Other Parts Discussed in Thread: C2000WARE, TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117779/tms320f28379d-serial-flashing-not-working-after-loading-kernel

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

您好!

我正在串行闪存 C2000。  

我能够刷写内核(通过为发送的每个字节接收正确的字节进行确认)。 当我发出 DFU CPU1命令时、我还会收到正确的响应。

下载应用程序(映像)时出现问题。

我能够写入前22个字节(根据手册 https://www.ti.com/lit/an/sprabv4e/sprabv4e.pdf?ts=1657732093236&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F28379D)
我得到正确的校验和。

但是、在这之后、MCU 似乎停止响应。 我根据示例 C++文件中给出的.cpp 源代码发送块大小、地址以及数据的前128个字*。 之后、我应该从 MCU 获取一个校验和、但我没有。

使用相同的闪存编程器、我能够刷写另一批电路板、但它们有时会遇到相同的不响应错误、但通常在发送更多数据后会出现。 大多数时候、我可以通过串行编程器来刷写这些板、一切都很好。

我已经检查了电源线和复位线。 我已经检查了 TX 和 RX 线路、它们工作正常。 不过出于某种原因、MCU 似乎在下载应用程序时在前22个字节后停止响应。

请提供任何帮助。

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

    啊、还有一件可能有用的事情:我注意到 ERRORSTS 引脚在我等待校验和的同时从0变为1、但我不确定我要用它寻找什么。

    此外、我不通过 USB 连接:我正在通过 TX 和 RX 线路从一个器件(而不是 C200)刷写到另一个器件。

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

    Adrian、我们将在一天内对此做出回复。

    谢谢、

    Sira

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

    您好!

    我刚刚注意到、MCU 复位引脚在初始化块完成后的一段时间内会被拉低。 我现在正在进行调查。

    编辑:看起来它每30ms 进入一个复位周期、在这个周期中、引脚下降至大约0.5V、这个复位周期从这时开始。 启动时也会发生这种情况、但由于某种原因、当我刷写内核时不会发生这种情况。

    值得注意的是、我可以使用物理调试器通过 JTAG 对 MCU 进行编程。

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

    进一步探究:MCU 将在前128个字的最后一个字发送后立即进入复位周期。

    即使我在这部分中有延迟、MCU 仍仅在发送最后一个字后进入复位周期、这意味着它与时序无关。

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

    我将查看寄存器、我注意到:

    我连接了通过 SCIA 对 C2000进行编程的器件以及物理调试器。 这样我就可以读取 RESC 寄存器。

    当我仅通过 调试器刷写 C2000时、我会得到一个清除 RESC 寄存器。

    但是、当我通过 SCIA 刷写 C2000并遇到上述突然复位循环时、然后我使用物理调试器刷写并检查 RESC 注册表时、我看到以下情况:


    请注意 NMIWDRS 标志已启动。

    但是、当我检查 NMISHD 注册表时、它全为0。



    我们在生产构建中受到此错误的严重阻碍、因此我们非常感谢您的任何帮助、

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

    Adrian、  

    您将何种版本的 C2000Ware 用于闪存内核项目和串行编程器? 您是否对 SCI 初始化进行了任何修改、如果是、它们是什么?

    Anu

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

    Anu、您好!

    我将 C2000Ware 3.4.0.00用于闪存内核项目和串行编程器、我根据串行闪存编程器示例项目下提供的 C++源代码编写了一个基于 Python 的系统。


    我没有对闪存内核进行任何修改。 我正在使用 C:\ti\C2000Ware_3_04_00_00_Software\device_support\f2837xd\examples\dual\F2837xD_sci_flash_kernels (分别为 CPU1和 CPU2)中提供的一个。

    我可以使用完全相同的闪存内核和串行编程器对之前迭代的其他电路板进行编程、但我无法对这些新电路板进行编程。  

    让我知道您需要哪些其他信息、也很高兴能够接听电话以获得更快的响应。

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

    Adrian、  

    感谢您提供信息。 两组电路板上的时钟源是什么?

    Anu

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

    TMS320F28379D 的时钟源是25MHz 缓冲时钟、振荡器是 SG-8101CE。缓冲器是 NB3N551MNR4G。

    编程器是 Raspberry Pi。 我相信时钟源是一个19*MHz 的板载振荡器,但网上的硬件内部信息不是很清楚。

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

    Adrian、  

    感谢您提供此信息。 我将邀请另一位专家来帮助您查看 RESC 寄存器并确定电路板是否存在任何问题。  

    Anu

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

    Anu、您好!

    感谢您的回答。

    我在前一批的其中一个电路板上做了一些测试、间歇性地显示了此问题、我想强调一下我正在获得的日志:

    我可以越过前128个字块、甚至在 MCU 开始复位之前完成几个块。

    您是否有什么想法导致这种情况? 编写内核代码时、即使出现程序错误、也应继续执行、而不是复位 MCU。

    此外、我是否可以通过 任何方式使用物理调试器刷写内核代码、以便更好地了解正在发生的情况? 也许我能够在 MCU 复位之前向其添加断点并查看寄存器。

    图1:经过前几个街区


    图2:连接断开(MCU 根据示波器处于复位周期)

    图3. 该函数似乎在其中复位

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

    您好!
    此处仅提供一些更新:

    我发现我可以使用 XDS110调试器和 CPU1_RAM 构建配置来刷写内核。
    然后、我可以使用定制 SCIA 调试器、我可以看到器件似乎在 shared_Boot.c 文件的 CopyData 中与闪存组相关的命令周围的某个位置重新启动。



    此外、当我运行调试器时、我无法"跳过"与闪存相关的命令、例如 F2837xD_sci_flash_kernels_cpu01.c 中的 Init_flash

    我最终陷入其中  


    这是正常行为吗?

    我必须"移动到"沿着这里的一条线、以连接 EntryAddr。


    我重点介绍的原因是、程序似乎在闪存时遇到问题、因为此时 MCU 正在复位。


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

    您好!

    点击此项查看可见性。 TI 有什么帮助?

    谢谢、
    Adrian

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

    Adrian、

    连接调试器后、您看到 NMIReset 标志为高电平后、能否检查 NMI_INTRUPT_REGS 寄存器组中的 NMIFLG 寄存器的内容。  这将有助于我们缩小 NMI 的原因。

    如果您可以在尝试编程时对 VDDIO 和 XRSn 线路进行示波、这也会很好。 在对闪存进行编程时、查找由额外电流需求导致的 VDDIO 线路上的任何类型的压降。  有一个内部总线监控器、如果我们超出电源总线的规格、可能会跳闸。

    最棒的

    Matthew

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

    Matthew、您好!

    感谢您的回答。

    但是、在周末、我设法缩小了范围。 闪存损坏是由内核中的 PLL 未正确配置引起的。

    不知道为什么这会导致复位、但更改 PLL 配置设置可解决此问题。

    我没有示波 VDDIO、但我示波了 XRSn 和 VDD 线路、它们很好:完全没有下降到3.3V 以下。