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.

[参考译文] TM4C1294NCPDT:TM4C1294NCPDT 的定制 PCB 上的引导加载程序问题

Guru**** 2614405 points

Other Parts Discussed in Thread: TM4C1294NCPDT, EK-TM4C1294XL, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1006668/tm4c1294ncpdt-bootloader-trouble-on-custom-pcb-with-tm4c1294ncpdt

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: EK-TM4C1294XLUNIFLASH

大家好! 我有一个具有 TM4C1294NCPDT 的定制 PBC。 我的客户决定我们需要在该 PCB 上安装 EMAC 引导加载程序。 首先、我尝试在 EK-TM4C1294XL 上执行此操作。 一切都很好、一切都很好、但我后来尝试将相同的固件下载到 PCB ... 我遇到了一个问题。 LM 闪存编程器找不到 TM4C1294NCPDT。 也许是因为我们最初没有考虑引导加载程序、然后决定添加它、我们错过了一些跳线或类似的东西? 可以帮我解决这个问题吗? 提前感谢您

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

    您有一个新 PCB、其中包含空白的 TM4C1294CPDT 器件。 您需要对以太网引导加载程序进行编程。 您如何尝试对引导加载程序(哪个接口、JTAG、UART)进行编程?  

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

    进行通信。 如果有任何问题、JTAG 会正常工作、因为我已经通过它下载了其他固件、一切都正常。 现在的问题是 LM 闪存编程器没有看到在 PCB 中加载的引导加载程序

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

    您能否在硬件上运行一些以太网示例以验证以太网接口硬件是否正确?

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

    已经完成了。 一切都很好

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

    对于以太网引导加载程序而言、硬件中没有什么特别之处。 我将与我的同事进行核实。

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

    非常感谢!

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

    查尔斯有两个评论。 首先、 您如何 在 LM 闪存编程器中选择 IP 地址?  您可以先运行其他以太网示例并获取租用的 DHCP IP 地址。 在 LM 中使用该 IP 地址进行引导加载。

    其次 、LM 闪存编程器中存在一个错误、即如果 PC 上有多个魔术包、它将把魔术包发送到不正确的 NIC (网络接口卡)。 请禁用 Windows 控制面板中的所有网络适配器,但您使用的 NIC 接口除外。

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

    您好! 正如您所说的! 它可以正常工作、可以通过引导加载程序下载固件! 但是、在首次刷写之后、引导加载程序停止工作。 很可能、引导加载程序和固件在某些存储器区域重叠(但我不知道如果我将引导加载程序和固件起始地址设置为0x4000、这是怎么可能的)。 您认为问题可能出在哪?

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

    使用 UniFlash、我收集了存储器转储。 一种是仅加载引导加载程序、另一种是通过引导加载程序加载固件。 内存中没有交叉点。 因此问题是其他问题。 问题是、什么? 让我提醒您、EK-TM4C1294XL 上未观察到该问题。 我们是否能够肯定地排除硬件问题?

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

    使用引导加载程序加载应用程序代码(首次)后、您可以通过 JTAG 连接调试器并在引导加载程序中设置硬件断点。 然后验证应用程序是否已将控制权正确地传回引导加载程序。

    我不认为这可能是一个硬件问题、但最好了解这个问题、以便我们可以确定。

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

    我不明白应该在何处放置断点来查看固件是否将控制权传递给引导加载程序。 请告诉我吗?

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

    我犯了一个大错误。 我通过 USB 而非以太网刷写 EK-TM4C1294XL。 它无法通过以太网工作。 您能告诉我如何通过以太网逐步刷写 EK-TM4C1294XL 吗?

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

    您好!

    以下是您需要执行的步骤。

    1.使用 CCS 或 LM 闪存编程器通过 JTAG 接口将诸如 enet_lwip 的 TivaWare 示例编程到 MCU 闪存中。  

    2.运行 enet_lwip,您应该会在终端窗口中看到已打印的 IP 地址。 您需要记录此 IP 地址。 此 IP 地址由 DHCP 服务器动态生成。 稍后在运行 EMAC_BOOT_FLASH 示例时需要使用此 IP 地址。 原因是运行 LM 闪存编程器的 PC 也是 BootP 服务器和 TFTP 服务器。 BootP 服务器本质上是静态的。 您需要手动将客户端的 IP 地址与 BootP 服务器中固定表中的客户端 MAC 地址关联。  请注意、运行 enet_lwip 的唯一目的是获取 IP 地址。 获取动态地址后、它将在您的网络上租赁给您几个小时。 您可能能够配置路由器以无限期租用 IP 地址。 请咨询您的 IT 部门。  

    3.通过 JTAG 接口将 EMAC_BOOT_FLASH 编程到 MCU 的闪存中。 您可以使用 CCS 或 LM 闪存编程器加载代码。 请注意、EMAC_BOOT_FLASH 从0x0开始。

    4.运行 EMAC_BOOT_FLASH 引导加载程序。 EMAC_BOOT_FLASH 应立即发送 BootP 请求。 但是、由于您尚未启动 BootP 服务器、客户端将继续发送请求。 如果您有 Wireshark、您应该会在1s、2s、4s、8s 等位置看到 BootP 请求。 因此,您可能需要等待一段时间,服务器才能收到请求并响应请求。 不要仅仅等待一小会、认为它没有工作或损坏。 启动 Wireshark 以观察跟踪。 这非常有用。  

    5.打开 LM 闪存编程器。 请参见下面的。 在 Client IP address (客户端 IP 地址)字段中输入刚从运行 enet_lwip 中获取的 IP 地址。 然后输入客户端的 MAC 地址。 如果您使用的是 LaunchPad、则应在电路板背面的贴纸上看到 MAC 地址。 您在这里所做的更像是手动更新 BootP 服务器的 IP 地址和 MAC 地址关联表。 请注意、下面的捕获显示了我的 IP 地址和 MAC 地址。 您的将与我的完全不同。  

    6.转到“Program”选项卡,将 boot_demo_emac_flash.bin 指定为您的应用程序映像,然后按“Program”按钮。 请参见下面的。  

    7.留出一些时间,您应该可以通过以太网看到正在进行的下载。  

    8.如果您等待很长时间但没有发生任何情况、请确保您的 PC 和 LaunchPad 处于同一子网中。 如果是这种情况、请显示您的 Wireshark 捕获。

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

    非常感谢! 我分步完成了所有工作、我将能够下载新固件一次! 但问题仍然存在、在1次引导后、引导加载程序无法控制。 我应该在代码中写入什么内容以将控制权传递给引导加载程序?

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

    BOOT_DEMO_EMAC_FLASH (应用固件示例)旨在在 LaunchPad 上按下 SW1时跳回到引导加载程序? 您是否按下了 SW1? 请参阅源代码(boot_demo_emac_flash.c 文件)。

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

    是的、即使我不按 SW1、BOOST_DEMO_EMAC 也会按我需要的次数进行刷写。 我冒昧地假设 boot_demo_emac_flash 文件中第324行的代码负责将控制权传递给引导加载程序。 C:

    //
    // Pass control to whichever flavour of boot loader the board is configured
    // with.
    //
    SoftwareUpdateBegin(g_ui32SysClockFreq);

    我是对的吗?

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

    很高兴它能为您服务。 请确认。 当您按下 LM 闪存编程器上的"Program"按钮时、它会向客户端发送一个魔术包。 然后,客户端将在  SoftwareUpdateRequestCallback()中设置 g_bFirmwareUpdate 标志。    设置 g_bFirmwareUpdate 后、应用程序将调用 SoftwareUpdateBegin。  SoftwareUpdateBegin 最终将通过调用 SVC 将控制权返回到引导加载程序。  

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

    是的。  一切都和你说的一样

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

    尝试将 SoftwareUpdateBegin 函数调用集成到我的固件中失败。 在初始化 IP 堆栈后、我添加了对 SoftwareUpdateInit 函数的调用、在 Callback 函数中、我调用了 SoftwareUpdateBegin。 编译失败、因为编译器不想编译 swupdate 文件、尽管 utils 文件夹所在文件夹的路径已指定给链接器。 错误-"未解析的符号 SoftwareUpdateBegin、首先在...中引用..."、但如果单击 SoftwareUpdateInit 函数 LMB+Ctrl、则会打开 swupdate 文件。 可能出什么问题了?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="390283" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1006668/tm4c1294ncpdt-bootloader-trouble-on-custom-pcb-with-tm4c1294ncpdt/3724493 #3724493"]在回调函数中,我调用了 SoftwareUpdateBegin[/quot]

    不能从中断例程中调用 SoftwareUpdateBegin()。 (回调函数仍在中断例程中。) 按照 boot_demo_emac_flash 中的示例操作。 在 SoftwareUpdateRequestCallback()中设置全局标志,然后在主循环中检查该标志。 设置标志时调用 SoftwareUpdateBegin()。 有关 boot_demo_emac_flash.c 的第177-180行有一条重要说明:

    //*****************************************************************************
    //
    // This function is called by the software update module whenever a remote
    // host requests to update the firmware on this board.  We set a flag that
    // will cause the main loop to exit and transfer control to the bootloader.
    //
    // IMPORTANT:
    // Note that this callback is made in interrupt context and, since it is not
    // permitted to transfer control to the boot loader from within an interrupt,
    // we can't just call SoftwareUpdateBegin() here.
    //
    //*****************************************************************************
    void SoftwareUpdateRequestCallback(void)
    {
        g_bFirmwareUpdate = true;
    }
    

    [引用 userid="390283" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1006668/tm4c1294ncpdt-bootloader-trouble-on-custom-pcb-with-tm4c1294ncpdt/3724493 #3724493"]编译失败,因为编译器不想编译 swupdate 文件,尽管 utils 文件夹所在文件夹的路径已指定给链接器。

    我建议您再次按照 boot_cemo_emac_flash 的示例操作、并将链接复制到 lwiplib.c、swupdate.c 和 ustlib.c 到您的项目中。 这将导致编译器编译这些文件、并将对象的副本放入链接器将在其中找到的"Debug"目录中。

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

    我能够编译并尝试运行我的固件。 我调用了 SoftwareUpdateInit (我将我的 void (void)函数用作参数)、在该函数中设置标志、并通过计时器检查其状态。 标记时、我调用了 SoftwareUpdateBegin 函数。 因此、我的固件不想工作、并且由于我通过引导加载程序下载了它、我甚至无法正确调试所有内容、也无法了解为何无法将控制传输到引导加载程序

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

    您可以调试由引导加载程序加载的程序。 将 JTAG 连接器连接到电路板并启动目标配置。  

    "View"->"Target Configurations"

    然后展开项目并找到项目的目标配置。 右键单击、然后选择"Launch Selected Configuration"  

    然后选择"Run"->"Connect Target"、这将阻止代码执行。

    然后选择"Run"->"Load"->"Load Symbols"、并选择用于生成.bin 文件的.out 文件。 这将加载调试信息、而不擦除或编程闪存。  

    现在、您可以像通常那样进行调试。

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

    谢谢! 我的固件在 swupdate.c (udp_recv)文件的第291行上崩溃。 正如我从 SoftwareUpdateInit 函数的说明中所理解的那样、我必须初始化 lwip 堆栈。 如果我使用 RTOS、该怎么办? 如果这是不可能的、那么如何将控制权转移到引导加载程序? 自行获取魔术包并调用 SoftwareUpdateBegin?

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

    我能够让我的固件将控制权传递给引导加载程序。 一切都很完美! 现在有一个小问题:我可以通过某种方式为引导加载程序设置静态 IP 地址吗? 因为在进行现场工作时、我无法负担使用 DHCP 的费用

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

    您好!

     您使用的是静态 IP 地址。 请返回到我之前的回答中的步骤2。 我曾要求您首先运行 enet_lwip 示例、以便您可以找到网络上可用的 IP 地址、以便您可以在 LM 闪存编程器上为您的客户端使用该 IP 地址。 如果您向 IT 管理员咨询、或者您是否可以登录到路由器并找出可用的 IP 地址、则您可以直接将静态 IP 地址输入 LM 闪存编程器、而无需首先运行 enet_lwip。  

     作为 BootP 协议的一部分、作为 MCU 的客户端将从 BootP 服务器中找到其 IP 地址。 请参阅 bl_emac.c 文件中的以下代码。  

    //
    //
    //! 解析数据包检查 BOOTP 应答消息。
    //!
    //! 此函数解析数据包以确定它是否是对我们的 BOOTP 应答
    //! 当前未决的 BOOTP 请求。 如果找到有效的回复
    //! 从数据包中提取并保存适当的信息。
    //!
    //! 如果找到有效的 BOOTP 应答消息,则返回1,否则返回0。
    //
    //
    静态 uint32_t
    ParseBOOTPReply (空)

    tBOOTPPpacket *psBOOTP =(tBOOTPPpacket *) UIP_appdata;
    uint32_t ui32Idx;

    //
    //查看这是否是对我们当前 BOOTP 请求的回复。
    //
    if ((psbootp->ui8Op!= bootp_reply)||
    (psBOOTP->ui32XID != g_ui32XID)||
    (*(uint32_t *) psbootbootp -> pui8CHAddr!=*(uint32_t *) g_sMACAddr.addr)||
    (*(uint16_t *)(psBOOTP->pui8CHAddr + 4)!=
    *(uint16_t *)(g_sMACAddr.addr + 4))

    返回(0);

    //
    //从响应中提取我们的 IP 地址。
    //
    *((uint32_t *)(void *)(&uip_hostaddr)= psbootbootp -> ui32YIAddr;

    //
    //从响应中提取服务器地址。
    //
    *((uint32_t *)(void *)(&g_sServerAddr)= psBOOTP->ui32SIAddr;

    //
    //保存引导文件名。
    //
    for (ui32Idx = 0;
    ((g_pcFilename[ui32Idx]= psBOOTP->pcFile[ui32Idx])!= 0)&&
    (ui32Idx <(sizeof (g_pcFilename)- 1));
    ui32Idx++)


    G_pcFilename[ui32Idx]= 0;

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

    谢谢! 这一切都取决于我在 LM 闪存编程器中输入的 MAC 地址? 更改 BL_CONFIG file.h 中 ENET_MAC_ADDR0 - ENET_MAC_Addr5的值未提供所需的结果、因为引导加载程序未在任何 MAC 地址(既不对写入电路板的地址)响应 Lm 闪存编程器发出的魔术包、 也不会与我在 BL_CONFIG 中指定的值相同。 h)。 如何更改 MAC 地址?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="390283" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1006668/tm4c1294ncpdt-bootloader-trouble-on-custom-pcb-with-tm4c1294ncpdt/3727318 #3727318"]引导加载程序未响应任何 MAC 地址处 Lm 闪存编程器发出的魔术包(既不响应板上写入的数据包、也不响应 BL_CONFIG 中指定的数据包。 h)。 如何更改 MAC 地址?

    我很困惑。 我想您的一切都正常工作了。 EK-TM4C1294XL LaunchPad 使用 MAC 地址进行了预编程。 查看下面的 BL_EMAC.c 文件。 如果闪存中已经存储了一个 MAC 地址、那么它将只使用那个地址。 如果要使用闪存的新 MAC 地址重新编程、则需要首先对 MCU 执行批量擦除。 请参见下图。 首先执行"解锁"、这样将完全擦除芯片中的 NVM 存储器。 将芯片批量擦除至出厂设置后、您可以在右上角对新的 MAC 地址进行编程。 无需擦除 LaunchPad 中的 MAC 地址。 如果您想进行实验、这是您的选择。 对于定制板、如果没有有效的 MAC 地址、则必须具有该地址。  

    //
    //从闪存用户寄存器获取 MAC 地址。 如果没有
    //已编程,然后使用引导加载程序的默认 MAC 地址。
    //
    ROM_FlashUserGet (&ui32User0、&ui32User1);
    if ((ui32User0 == 0xffffffff)||(ui32User1 == 0xffffffff)

    //
    // MAC 地址尚未编程,请使用默认值。
    //
    G_sMACAddr.addr[0]= 0x00;
    G_sMACAddr.addr[1]= 0x1A;
    G_sMACAddr.addr[2]= 0xb6;
    G_sMACAddr.addr[3]= 0x00;
    G_sMACAddr.addr[4]= 0x64;
    G_sMACAddr.addr[5]= 0x00;

    其他

    G_sMACAddr.addr[0]= ui32User0 & 0xff;
    G_sMACAddr.addr[1]=(ui32User0 >> 8)和0xff;
    G_sMACAddr.addr[2]=(ui32User0 >> 16)& 0xff;
    G_sMACAddr.addr[3]= ui32User1 & 0xff;
    G_sMACAddr.addr[4]=(ui32User1 >> 8)& 0xff;
    G_sMACAddr.addr[5]=(ui32User1 >> 16)& 0xff;

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

    非常感谢 Bob 和 Chrales! 一切都很好! 如果将来有人与我有类似的问题、请参阅以下快速指南:
    1) 1) 1)通过 Resource Explorer Classic 导入 BOOT_EMAC_FLASH 工程
    2) 2)在 BL_CONFIG file.h 中找到第884-889行并取消注释
    3) 3)在其中设置所需的 MAC 地址(然后您需要在 LM 闪存编程器中写入此 MAC 地址)
    4) 4)在 BL_EMAC.c 文件中、注释掉1512到1533之间的行、并将其写入其中

    g_sMACAddr.addr[0] = ENET_MAC_ADDR0;
    g_sMACAddr.addr[1] = ENET_MAC_ADDR1;
    g_sMACAddr.addr[2] = ENET_MAC_ADDR2;
    g_sMACAddr.addr[3] = ENET_MAC_ADDR3;
    g_sMACAddr.addr[4] = ENET_MAC_ADDR4;
    g_sMACAddr.addr[5] = ENET_MAC_ADDR5;

    5) 5) 5)通过 CCS 将 BOOT_EMAC_FLASH 下载到您的器件
    6) 6)在主项目中、添加一些条件(例如、接收特殊的 UDP 封包)、您将通过这些条件调用 
    SoftwareUpdateBegin(g_ui32SysClockFreq)
     函数。  
    g_ui32SysClockFreq
     必须在代码中声明如下:  
    volatile uint32_t g_ui32SysClockFreq

    7)当然、不要忘记将.h 文件与 SoftwareUpdateBegin 函数连接。 #include "utils/swupdate.h"
    8) 8)通过 Resource Explorer Classic 导入 BOOT_DEMO_EMAC_FLASH 工程
    9) 9)从此项目中、将 swupdate.c 文件复制到主项目中
    10) 10)配置主项目中的 creation .bin: 指向 e2e 论坛的链接
    11)在第13行的主项目.cmd 文件中、将值替换为0x00004000和0x000FC000
    12) 12)打开。 通过 HGCONF 生成主项目的 CFG 文件
    13)在左上角,单击箭头 XDCtools->System->Programm -> View -> sectMap ->。 resetVecs->loadAddress 并在其中写入值0x00004000
    14)编译主项目。 如果链接器存在问题、请将必要的目录连接到主工程
    15)运行 LM 闪存编程器
    16)在“Configuration->Quick Set”列中,设置“Manual Configuration”(手动配置)
    17)在 Interface (接口)列中、设置 Ethernet (以太网)
    18) 18)输入您在步骤3中输入的 MAC 地址
    19) 19)输入 LM Flash Programmer 将分配给器件的 IP 地址
    20) 20)确保已禁用所有网络适配器、但连接到设备的网络适配器除外
    21)在 Programm 列中、选择主项目的.bin 文件
    21) 21)点击 Programm
    22) 22)几秒钟后、您将看到将固件下载到器件的过程
    23)要重新下载固件、您需要满足调用 SoftwareUpdateBegin 函数的条件
    再次感谢 Bob 和 Chronales!

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

    这种喜悦是不成熟的。 所有功能都可以在 EK-TM4C1294XL 上运行、但在我的 PCB 引导加载程序上不想工作。 此外、问题很奇怪:我通过调试器启动了引导加载程序、点击了 LM 闪存编程器和 UDP 监听器中的"Programm"按钮。 LM Flash Programmer 发送72字节长的数据包、引导加载程序捕获76字节长的数据包(尽管数据包的内容正确)。 已检查 UIP_Buf 变量)。 因此、引导加载程序在从第1783行开始的循环中不断旋转(if (!(g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus & DES0_RX_CTRL_own))。 问题可能出在哪呢?

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

    您好!

     当您说它在 LaunchPad 上完全正常工作时、真的不知道出现了什么问题。 您确定它与在定制板上运行的引导加载程序和应用程序固件完全相同吗?

     我建议您检查一些事项。

     -定制板上是否有25MHz OSCIN?

     -您是否在定制板上编程了 MAC 地址? 为了进行实验、您为什么不为定制板上的 LaunchPad 编程相同的 MAC 地址? 有什么不同吗?

     -如果您仅使用引导加载程序而没有应用程序启动定制板 MCU,它是否会至少启动一次? 我只是想知道它是否会引导加载一次。 还是仅 LM 闪存编程器中的后续"程序"失败?

     -在 Wireshark 上、LaunchPad 与定制板之间的区别在哪里?

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

    是的、我从同一台计算机上的 LaunchPad 和 PCB 上下载了相同的引导加载程序。 我没有在下载到器件之间更改引导加载程序本身。

    -是的、PCB 是25MHz OSCIN。

    -在上面的回答中、我介绍了如何设置 MAC 地址、在监听器中、我看到 LaunchPad 实际上使用了此 MAC 地址。

    -虽然 LaunchPad 会根据需要刷写多次、但 PCB (在按下 Programm 键后)不会显示任何生命体征、并且 LM 闪存编程器会在尝试连接的状态下无限期挂起。

    -在监听器中、可以看到 LaunchPad 和 PCB 之间的差异-后者不会对端口67提供答案。

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

    您好!

     您是否解决了该问题? 您是否确定您的 PC 上只有一个 NIC? 您等待了多长时间才声称它不工作。 我提出的原因是、客户端不会定期发送 BootP 请求、而是会增加持续时间以避免干扰网络。 如果您查看以下捕获、则客户端第一次发送 BootP 请求、如果它没有收到服务器的响应、它将等待1秒钟、然后再发送下一个请求。 如果它仍然没有收到响应、那么它将等待2秒钟、然后再发送下一个请求。 如您所见、它将等待1s、2s、4s、8s、16s、 32s 和64s、然后再发送 BootP 请求。 如果在客户端发送其请求时碰巧按下"Program"按钮、则服务器可能需要等待长达64秒、然后客户端发送其下一个请求。 您可能认为它不起作用、但如果您等待足够长(超过64秒)、它应该会出现。  

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

    大家好、我没这么说。 是的、我有一个且唯一的 NIC (我检查了 Wireshark 中的输出数据包)。 我等了30分钟、所以我不认为这就是为什么我的 PCB 上的引导加载程序不起作用的原因。 我想、问题是硬件。 这是我的 PCB 和 Launchpad 之间的唯一区别(正确使用哪个引导加载程序)

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

    定制板是否仍适用于其他以太网示例?  

    您能否至少共享以太网部分的原理图?

    您能否共享 Wireshark 捕获以在 LaunchPad 和定制 板上运行?

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

    1) 1)是的、仍然可以工作
    2)
    3) 3)我稍后会分享

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

    查看原理图、我们看不到隔离变压器或保护二极管。 它们是否集成在 RJ45连接器中? 仍然不解释其他应用程序的工作原理、但引导加载程序不工作。 让我们知道您何时获得 Wireshark 捕获。