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.

[参考译文] TM4C129XNCZAD:以太网引导加载程序卡在 PacketTransmit 中

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612287/tm4c129xnczad-ethernet-bootloader-stuck-in-packettransmit

器件型号:TM4C129XNCZAD

您好!

  对于定制的 TM4C129XNCZAD 板、我实施 了(基于闪存)以太网引导加载程序。

大部分时间都可以正常工作、我可以对新的二进制文件进行编程。 此过程连续执行4或5次、然后在再次尝试时、"EMAC 闪存"引导加载程序卡住、无法传输新的二进制文件。 从调试到查看服务器、我认为引导加载程序停留在很早的阶段、甚至不发送 BOOTP_REQUEST。

然后、我需要对器件进行下电上电、然后引导加载再次正常。

一些详细信息:

在 Code Composer 中进行调试时、我可以看到引导加载程序卡在名为"PacketTransmit"的函数中的 BL_EMAC.c 中。 更详细地说、它卡在这个 while 环路中

   while (g_psTxDescriptor[g_ui32TxDescIndex].ui32CtrlStatus & DES0_TX_CTRL_own){}

 

服务器端(发送魔术包的端)的状态是它从未从 Tiva 获得 BOOTP_REQUEST、因为它尝试继续发送魔术包。

 

有关如何调试/修复此问题的任何帮助都很好、因为下电上电并不是一个简单的选择。

 

谢谢、

Robert

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

    这是与 TivaWare 库中的基于闪存的以太网引导加载程序示例相同、还是您自己的示例或从 TivaWare 中修改的示例?

    看起来 EMAC 仍然拥有 TX 描述符、这意味着数据包传输尚未完成。 抱歉、我不是以太网专家。 这是我到目前为止看到的量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    是的、它是 TivaWare 库中的引导加载程序。

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

    不确定这是否有用、但值为

    G_psTxDescriptor[g_ui32TxDescIndex].ui32CtrlStatus

    是 F0D00000。 (其中 g_ui32TxDescIndex 为0)

    感谢您的任何帮助。

    谢谢你。

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

    想知道您的 PC 和 LaunchPad 是否连接到桌面上的本地交换机?

    过去发现 Linksys 交换机端口扩展冲突域的问题同样可能会阻止交换机端口之间的广播,集线器端口不能阻止。 这就是企业从集线器升级到交换机的原因之一,它旨在阻止网络上的广播风暴,防止 PC 上的恶意以太网或嵌入式病毒尝试 DOS 网络攻击。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 BP101提供提示。 我还建议在 launchpad 上运行相同的代码、并查看是否可以在同一网络中重现此类故障。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我的评论之后、有趣的是、想法是相同的、但出于原因、定制 PCB 以太网差分对布局有点关键。 推荐用于 TM4C129x 变压器 TCT/RCT 中心抽头 去耦电容0.1uf 或更高、具体取决于平面或布线 连接(1uf 或更高)、 似乎相对于+3V3上拉噪声水平。 SPMA056–2013年10月

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

    您好 BP101、

    我的 PC 和 Tiva 之间没有连接任何开关或集线器。 我已将 Tiva Launchpad 直接连接到我的计算机。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有任何方法(在我卡住太久的情况下)可以释放 TX 描述符的所有权? 并释放所有必要的缓冲区/描述符?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Robert Preissl"]我已将 Tiva Launchpad 直接连接到我的计算机。

    更具体地说、 如果使用交叉电缆 作为直通电缆 、则不起作用。 回想一下、您报告 的 TX 描述符自身的位挂起问题也是如此。  引导加载程序客户端 过去使用交叉电缆和  while (1)循环使用 中断调用((*(void (*)(void)(*(uint32_t *) 0x2C)))();在删除 while 循环测试并直接调用函数后、由于 任何原因、引导加载程序会在自己的位上挂起。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    供我参考、我有一个令人不快(当然也不是超级满意)的解决方案:如果我在 PacketTransmit while 循环中停留了超过10秒、我将调用 EnetReconfig。
    到目前为止、这似乎运行良好。 我只能希望在 TFTP 阶段不会卡住。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它必须与 NVIC 命令和 调用 BootP 信标后的执行速度时序有关、因为 当应用 程序打孔进入 信标处理程序时、它永远不会挂起。 另一件事是应用程序循环 在 进入 INT 0x2C 之前禁用 NVIC 中断、如下所示、但当 TXD 中的 OWM 位挂起时、while (1)循环布尔开关不会被置位。

    //
    //禁用所有处理器中断。 与一次禁用它们
    //(如果
    添加了新的源//可能会丢失中断)不同,直接写入 NVIC 可禁用所有
    //外设中断。
    //
    HWREG (NVIC_DIS0)= 0xffffffff;
    HWREG (NVIC_DIS1)= 0xffffffff;
    
    //
    清除任何激活的中断。 如果引导加载程序使用
    //任何中断,它们将按预期响应。
    //
    HWREG (NVIC_APINT)=(NVIC_APINT_VECTKEY |
    NVIC_APINT_VECT_CLR_ACT);
    
    //
    将控制权返回给引导加载程序。 这是
    对引导加载程序中 SVC //处理程序的调用。
    //
    (*((void (*)(void))(*(uint32_t *) 0x2C))();//0x2C