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:使用控制卡时 SCI 引导卡住

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1455708/tms320f28035-sci-boot-stuck-using-control-card

器件型号:TMS320F28035
主题中讨论的其他器件:TMDSCNCD28035

工具与软件:

尊敬的专家:

我正在使用 TMDSCNCD28035来执行 SCI 引导。 但是、串行闪存编程器输出卡在等待最后一个字发回的过程中  

此时、我连接到 F28035、发现 CPU 已完成引导 ROM 并正在等待闪存内核中的 autobuad。 有什么问题吗?

上述问题是使用 SDK 中的原始示例在未进行任何修改的情况下重现的。 在后台、我将尝试在不更改 GPIO 输入的情况下进入 SCI 引导模式。 因此、我调用 SCI 引导表单应用程序发现了这个问题。 然后、我使用原始的 SCI 启动示例重现此情况。 除了这个问题、对于如何在不更改 GPIO 电压的情况下启动 SCI 引导有什么建议?  

此致、

挂起。  

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

    尊敬的 Hang:

    让我清楚地了解您的要求。

    是否尝试在 F28035上执行实时固件更新(LFU)? LFU 传统上要求将自定义引导加载程序(TI 称为 SCI 闪存内核)驻留在闪存中。 当应用运行时、如果主机发送固件更新命令、则应用将接收此命令(例如通过 SCI)、然后将控制权移交给 SCI 闪存内核。 SCI 闪存内核将下载新映像、擦除并对闪存进行编程。 由于只有1个闪存组、闪存 API 和包装器函数将需要在 RAM 外运行。 此外、如果在 LFU 期间您希望继续运行 ISR、ISR 也将从 RAM 运行。 操作完成后、可以触发器件复位(例如使用看门狗)、然后新固件将生效。

    上述所有操作都可以在闪存引导期间完成。 换句话说、您永远不必使用 SCI 引导模式和/或调用 SCI ROM 引导加载程序。

    此致!

    Matt

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

    尊敬的 Matt:

    该用例类似于 LFU 或 DFU、因为不需要"实时"功能。  

    如您所述、定制引导加载程序也是一种解决方案、实际上客户已经在某些器件上使用引导程序。 但引导加载程序会占用额外的内存空间。 对于存储器空间有限的器件、例如 F28035、引导加载程序没有剩余空间、因此他们必须使用 SCI 引导。

    我尝试在 F280039等其他器件上通过应用调用 SCI boot、该器件可以完成此工作。 现在该问题已经简化为 F28035 EVM 的 SCI 引导。 我无法通过 F28035 EVM 的非常原始的 SCI 引导路由。  

    此致、

    挂起。

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

    尊敬的 Hang:

    感谢您的澄清。 您可以使用软件直接跳转到 ROM 中的 SCI 引导加载程序、但需要记住几点。

    但请注意、当您从应用程序调用 SCI 引导加载程序时、器件可能处于不同的状态。 也就是说、器件状态(就 PLL 和 WD 设置而言)可能不同于在复位后调用加载程序而不是从应用程序调用加载程序、因为您的应用程序可能已经更改了 PLL 和 WD 设置。 考虑这些差异后、SCI 加载程序应该和以前一样运行。

    此致!

    Matt

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

    尊敬的 Matt:

    当您说"像以前一样工作"时、您意味着作为 sci 引导示例工作。 不过、这个示例并不适合我一个人。

    在我执行示例 SCI 启动(更改 GPIO)时截取的第一个屏幕截图。 我需要在 sci 引导示例中帮助解决该问题。 不要从应用程序跳至 sci 引导。

    此致、

    挂起

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

    尊敬的 Hang:

    我以前见过这种情况、但我需要检查一些事项。

    1. 您要使用哪些十六进制实用程序编译后处理步骤来编译应用程序 情况?  
    2. 是否为闪存链接了应用程序目标配置? 应用程序的所有闪存段是否都与链接器命令文件中的128位边界对齐?
    3. 它是否仍在较低的波特率下冻结?

    此致!
    Matt

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

    尊敬的 Matt:

    我将使用 hex2000.exe 生成应用十六进制文件。 我尚未检查应用十六进制。 我想我停留在  ROM 引导加载程序在 RAM 上复制闪存内核的阶段。 我坚持的点是内核十六进制中的最后一个字。 内核十六进制只是示例。

    我在这里附加了内核十六进制的屏幕截图。 它以00结束。 它在最后的00个字处阻塞。

    我还在此处附加了应用文件、以便您可以检查格式。 它只是 FLASH_F28035示例。

    但是,再次,根据它卡住的地方,我认为应用十六进制还没有涉及. 此外、如果这是128位对齐问题、我们应该会在内核中看到程序错误、但没有卡住、对吧?

    我还测试了较慢的广告投放率降低到4800、问题是相同的。

    此致、

    挂起。

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

    尊敬的 Hang:

    Matt 目前在假期期间不在办公室;请预计会延迟回复。

    此致、

    Delaney

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

    大家好!

    在此处更新进度。  

    我切换了串行连接器、现在我可以继续应用自动波特。 之前、我在其他 C2000 Launchpad 上使用集成 XDS110上的 TX/RX、然后跳转至 F2803x CC 的对接底座。现在、我使用的是独立的串行端口连接器。

    但是、我再次停留在自动波特应用程序上。 串行闪存编程器卡在读取第一个块的响应上、这意味着它通过了自动波特率。 但在连接到 F2803x 时、我发现 CPU 仍在等待自动波特。

    串行闪存编程器认为已完成自动波特、但 F2803x 没有。  

    此致、

    挂起

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

    如果连接中出现更多问题、我在此处附上连接的照片。 也许您可以帮助检查是否正确

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

    您好 Hang、

    专家离开办公室到明天,请期待一个延迟的答复。

    谢谢你

    Luke

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

    尊敬的 Hang:

    您能否  使用示波器确认 F28031的 SCIRX 引脚(GPIO 28)是否已从主机正确发送自动波特字符("a")?  

    此致!
    Matt

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

    尊敬的 Matt:

    结果表明、它不会在自动波特时阻塞、而是传递自动波特、但会在此后很快复位并再次返回自动波特。

    我看了内核代码,似乎它在编程第一个块后返回,这是太早了。

    CopyData()函数返回标记行、内核以极慢的速度结束。 我注释掉了此 while 循环中的所有 return 语句(在其他 if-else 分支中更多地注释掉了服务器)、并且我现在可以运行 SCI 引导。

    在我看来、这是内核示例的致命错误、您能帮助我们探究一下吗?

    由于我现在可以运行 SCI 引导示例、我开始从应用程序启动 SCI 引导、因此我使用以下代码跳回 ROM 中的 SCI 引导:

    我在 TRM 中查找了 ROM SCI 引导的地址、并使用指针跳转到该地址。 然而,在我的第一篇文章中的问题再次发生(见图片在第一篇文章)。 串行闪存编程器停滞地等待内核传输最后一个字节的响应。 此时、F2803x 已经跟踪了内核传输并已进入内核(等待自动波特)。

    然后、我只需跳过如下所示的串行闪存编程器中最后一个字节的响应读取(在这里、我知道 i=2164是最后一个字节):

    支持程序正常工作,我可以闪存应用程序并运行它。 但仍然,跳过最后的反应是不是那么合理,所以我需要找出原因这也。  

    有什么想法、这里的问题是什么?

    此致、

    挂起。

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

    尊敬的 Hang:

    如前所述、当您从应用程序调用 SCI 引导加载程序时、器件可能处于不同的状态。 也就是说、器件状态(就 PLL 和看门狗设置而言)可能不同于在复位后调用引导加载程序而不是从应用程序调用引导加载程序、因为您的应用程序可能已更改 PLL 和 WD 设置。  在调用 ROM SCI 引导之前、您是否已考虑过这些差异?

    我还将尝试在我的终端上复制此问题、并在闪存内核专家中复制循环。 我将在明天一天结束前提供最新情况。  

    此致!

    Matt

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

    尊敬的 Matt:

    我在跳转 ti sci_boot ()之前将 bootmode_select ROM 代码中的代码复制到应用程序中、包括 PLL 配置和看门狗禁用。 但问题仍然存在。

    是否可以安排内部在线会议对此进行讨论? 我可以向您展示和分享这些代码。

    此致、

    挂起。

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

    尊敬的 Hang:

    听起来不错、让我们保持讨论不变、并在找到解决方案后更新此主题。

    此致!

    Matt

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

    尊敬的 Hang:  

     通过将串行端口接口的 COM 端口更改为 更高的优先级、我可以复制并解决此问题。 为了确定这一点、我验证了器件是否回显了最后一个"0"字节(尽管闪存编程器拒绝读取该字节)。

    1. 转至 Device Manager > Ports (COM & LPT)
    2. 右键点击下拉列表中的串行端口接口、然后选择"Properties"  
    3. 导航至 Port Settings (端口设置)> Advanced (高级)> COM Port Number (COM 端口号)、然后更改为 降低 COM 编号  
      1. 注意:我 将其 从 COM28更改为 COM1以进行解决方案证明  
    4. 应用更改后重新启动 PC

    我使用 COM1以115200的波特率执行了 serial_flash_programmer、并且能够成功地将内核和应用程序加载到器件中。

    此致!

    Matt