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.

[参考译文] EK-TM4C1294XL:I don't 了解 EmacBootloader 源代码的行为。

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1564363/ek-tm4c1294xl-i-don-t-understand-the-behavior-of-the-emacbootloader-source-code

器件型号:EK-TM4C1294XL


工具/软件:

我计划在我正在开发的代码中重复使用 EMACbootloader 代码中的 BOOTP 和 TFTP 功能。我对 EMACBootLoader 行为的理解是 UpdateBootp 函数的作用类似于主例程并执行各种过程。 我认为 BOOTP 数据包是通过接收魔术包触发发送的。 请您告诉我魔术包的接收处理是在哪里执行的?另外,如果我的上述理解不正确,如果您能让我知道魔术包的接收处理和随后的 BOOTP 包发送处理在哪里,我将不胜感激。此外,如果可能的话,如果您能提供任何说明 EmacBootloader 处理流程的文档,例如过渡到 TFTP 处理。

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

    您好、

    我计划在我正在开发的代码中重复使用 EMACbootloader 代码中的 BOOTP 和 TFTP 功能。

     您能否说明是要从应用程序发送 BOOTP 和 TFTP、还是要创建自己的以太网引导加载程序? 我想您正在创建一个要发送 BOOTP 和 TFTP 的应用程序固件、是否正确?  

    我对 EMACBootLoader 行为的理解是 UpdateBootp 函数的作用类似于主例程并执行各种进程。

    或多或少、是的。  我强烈建议您参考有关如何调用 UpdateBootp 的 BL_startup_ccs.s 文件。 基本上有两种调用 UpdateBootp 的方法。  

    1.如果闪存为空,则在配置以太网后调用 UPdateBootp。  

    2.应用程序收到一个魔术包,然后应用程序将控制权转移到引导加载程序,该引导加载程序将调用 UpdateBootp。  

    [引用 userid=“574314" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1564363/ek-tm4c1294xl-i-don-t-understand-the-behavior-of-the-emacbootloader-source-code ]我认为 BOOTP 数据包是通过接收魔术包触发的。 [/报价]

    是的、根据我以上回答中的第 2 项。  

    您能告诉我魔术包的接收处理是在哪里执行的吗

    我强烈建议您浏览 boot_demo_emac_flash 示例。 在此示例中、应用程序会初始化以太网控制器和 lwIP 栈。 查看 swupdate.c 文件中的 SoftWareUpdateInit 函数。  此函数将设置 UDP 连接、以接收从引导服务器发送的魔术包。 收到魔术包后、它将调用回调函数 SoftwareUpdateRequestCallback。 SoftwareUpdateRequestCallback 是用户提供的回调函数。 接收到魔术包时、将调用 SoftwareUpdateRequestCallback、并将标志 g_bFirmwareUpdate 更新为 true。 在 main 中、代码位于等待 g_bFirmwareUpdate 为 true 的循环中。 如果为 true、它将通过调用 SoftwareUpdateBegin() 将控件传输到引导加载程序。