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:通过以太网进行固件更新

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122317/tm4c1294ncpdt-firmware-update-through-ethernet

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

您好!

我在项目中使用 EK-TM4C1294XL 评估板。 我已经使用使用使用 lwip 库的 Tivaware 库示例实现了基于以太网的项目。 现在 、对于我的项目、我想 使用以太网远程更新固件。 请有人建议我如何实施。  

是否有任何示例代码或文档、以便我可以在我的应用中引用这些代码或文档。

谢谢你。

此致、

Balaji TS

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

    您好!

     请参阅 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_emac_flash (这是一个以太网引导加载程序)和 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\emac_flash (这是一个以太网引导加载程序的引导加载程序)、当收到该应用程序时、该应用程序将跳回魔术包(此例)。 引导加载程序会将应用程序固件加载到闪存中。 应用程序运行后、如果应用程序检测到请求了更新、它可以跳回到应用程序更新的引导加载程序。  

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

    感谢蔡夏的回应、

    我尝试使用以下主题中给出的建议来实施。 但 LM 闪存编程器显示正在尝试连接但未连接。

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/667007/ek-tm4c1294xl-problem-in-ethernet-based-firmware-upgrade-functionality-using-flash-based-bootloader-boot_emac_flash-and-eflash-exe-utility

    我的实现方式如下。

    1.将 enet_lwip 编程到 TM4C1294XL launchpad 以获取 DHCP IP 地址。 找到 IP 地址。

    现在 使用 CCS 将 EMAC_BOOT_FLASH 编程到我的 Tiva Launchpad 中。

    3.现在我使用 LM 闪存编程器对 boot_demo_emac_flash 二进制文件进行编程、方法是 在 LM 闪存编程器的配置窗口中提及客户端 IP 地址、MAC 地址。 当我单击编程按钮时、它卡在尝试连接时。

     

    您能告诉我哪里出错了、还是请建议我正确的程序。

    谢谢你。

    此致、

    Balaji TS

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

    您好!

     客户端(MCU)将以"增量"时间方式向服务器(PC)发送 BootP 请求。 例如、它将首先发送 BootP 请求。 如果服务器没有响应、则在发送另一个请求之前等待1秒。 如果它仍然没有接收到响应、那么它将等待2s。 它将继续等待4S、8s、16s、32s… 我想说的是、如果您启动 boot_emac_flash 并在您单击 LM 闪存编程器上的"program"按钮之前等待一段时间、那么您只需要等待一段时间、客户端才会发送 BootP 请求。 例如,当您单击“程序”按钮时,您可能需要等待64秒,然后客户端才会发送下一个请求。 您可以做的是、一旦启动引导加载程序、您就会快速点击 LM 闪存编程器上的"program"按钮。

     如果这不是您的问题、请显示您的 Wireshark 捕获。  

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

    蔡国荣、

    将 EMAC_BOOT_FLASH 代码编程到 Tiva 板后、我没有收到任何 BootP 请求。  Wireshark 上未显示任何数据。

    是否有任何其他方法可以检查 EMAC_BOOT_FLASH 是否正常工作?

    我还有一个疑问:我已将 TM4C Launchpad 以太网端口直接连接到我的 PC 以太网端口。 这是否正常、或者我是否需要将 TM4C Launchpad 和 PC 以太网端口连接到路由器?

    谢谢你。

    此致、

    Balaji TS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~引脚 userid="476365" URL"/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122317/tm4c1294ncpdt-firmware-update-through ethernet/4165764#4165764"]我还有一个疑问:我已将我的以太网端口直接连接到我的以太网 Launch4C 以太网端口。 这是否正常、或者我是否需要将 TM4C Launchpad 和 PC 以太网端口连接到路由器?

    如果您要直接连接到 PC、则需要使用交叉电缆。 交叉电缆意味着来自 LaunchPad 的 TX+/TX-信号将连接到 PC 端的 RX+/RX-、反之亦然。 您不能使用直通电缆。 直通意味着 LaunchPad 上的 TX 连接到上的 TX、这将不起作用。 通过 Google 搜索了解您为何需要交叉电缆。 我建议您首先尝试通过开关将 LaunchPad 和 PC 连接到网络。 该开关具有自动 MDIX 功能、因此可通过检测获取直通电缆或交叉电缆。

    您应该在 Wireshark 上看到类似的内容。

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

    蔡国荣、

    现在、我在使用以太网交换机并使用 LM 闪存编程器而不是 CCS 来编程 boot_emac_flash 程序后、收到 BOOTP 请求。

    但我无法使用 LM 闪存编程器对 boot_demo_emac_flash 程序进行编程。 它卡在尝试连接部件上。 未连接。

    我可以在 Wireshark 上看到 BootP 请求、但 LM 闪存编程器显示正在尝试连接。 我只提到了正确的 MAC 地址和 IP 地址。

    您能告诉我是什么原因导致了此问题吗?

    谢谢你。

    此致、

    Balaji TS

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

    您好、Balaji、

     很高兴您正在取得进展-现在已经看到了 BOOTP 请求。  您是否知道您的 PC 上是否有多个 NIC (网络接口卡)。 我知道 LM 闪存编程器有一个问题,即它可能错误地将 BOOTP 应答和魔术包发送到错误的 NIC。 如果您的 PC 上有多个 NIC、请禁用 Windows 控制面板中的所有 NIC、但与 MCU 连接的 NIC 除外。 请告诉我这是否能解决问题。  

      

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

    蔡国荣、

    我已签入 LM 闪存编程器。 它已选择正确的以太网适配器。 是否必须禁用除 MCU 连接的 NIC 之外的所有 NIC?

    还有一件事是、如果直接使用 CCS 的程序 boot_demo_emac_flash 程序未运行? 如果我在.cmd 文件中将闪存起始地址更改为0x0000000、那么它将持续运行。 闪存起始地址为0x4000、为什么它不能连续运行?

    谢谢你。  

    此致、

    Balaji TS

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

    您好!

    [~用户名="476365" URL"μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122317/tm4c1294ncpdt-firmware-update-through ethernet/4180607#4180607"]我已签入 LM 闪存编程器。 它已选择正确的以太网适配器。 是否必须禁用除 MCU 连接的 NIC 之外的所有 NIC?

    是的、由于 LM 闪存编程器中存在错误、请移除其他网卡、但连接到与 MCU 相同网络的网卡除外。  

    [~ userid="476365" URL"μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122317/tm4c1294ncpdt-firmware-update-through ethernet/4180607#4180607"]还有一件事是程序 boot_demo 不直接使用其 EMAC_demo 运行? 如果我在.cmd 文件中将闪存起始地址更改为0x0000000、那么它将持续运行。 闪存起始地址为0x4000、为什么它不能连续运行?

    您很可能通过使用 CCS 对 boot_demo_emac_flash 进行编程来擦除引导加载程序 boot_emac_flash。 默认情况下、当您在 CCS 中加载程序时、它将擦除整个闪存。 因此、尽管应用程序编程为0x4000、但0x0处的引导加载程序会被擦除。 由于 bootlaoder 为空、因此当您执行下电上电时、闪存中没有栈指针和复位矢量、程序将不会运行。 如果要在不影响引导加载程序的情况下在0x4000处对应用程序进行编程、则需要单击"By Address Range"作为擦除选项。  

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

    蔡国荣、

    感谢您的建议、现在我可以在禁用控制通道中不需要的 NIC 后对短波进行远程编程。

    现在、我想在我的定制板项目中实现同样的东西。 该板包含 TM4C129DNCPDT 芯片和外部 PHY。 您能否告诉我们我需要在 BOOT_EMAC_FLASH 项目和 BOOT_DEMO_EMAC_FLASH 项目中进行哪些更改?

    谢谢你。

    Balaji TS

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

    您好!

     我认为您需要进行的更改是 MII 接口使用外部 PHY 的配置。 我们没有任何使用外部 PHY 的示例。 但我发现这些帖子很有用。  https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/559297/tm4c129dncpdt-with-external-phy-through-mii/2048845?tisearch=e2e-sitesearch&keymatch=EMAC_PHY_TYPE_EXTERNAL#2048845

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/559297/tm4c129dncpdt-with-external-phy-through-mii/2162933#2162933

     这是我强烈推荐的。 在修改外部 PHY 的引导加载程序之前、请从 TivaWare 以太网示例开始。 修改 TivaWare 以太网示例以使用外部 PHY、并确保它首先工作。 稍后、根据您从修改的 TivaWare 示例中学到的内容、相应地修改引导加载程序。 与我们分享、这将有益于社区。   

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

    蔡国荣、

    我已经通过访问上面的链接在我的客户电路板中实现了 enet_s2E (Tivaware 库示例)。 应用程序可以与外部 PHY 正常配合使用。 现在、我需要在同一应用程序中实施远程软件更新。 因为我已经尝试了以下方法、但它现在可以工作。

    在 EMAC_BOOT_FLASH 应用中、我已更改  

    LOCAL_EMAC0_BASE (EMAC_PHY_TYPE_内部| EMAC_PHY_INT_MDIX_EN | EMAC_PHY_AN_100B_T_FULL_DUPLEX);

     使用  

    LOCAL_EMAPPHYConfigSet (EMAC0_BASE、EMAC_PHY_TYPE_EXTERNAL_RMII);

    并按照与 TM4C1294XL Launchpad 相同的步骤操作。 但我没有收到电路板的任何 BOOTP 请求。  

    我是否需要更改 EMAC_BOOT_FLASH 代码中的任何其他内容?  

    我已经尝试了下面的另一种方法

    1。编程使用 LM 闪存编程器在地址0x0000处更新了 EMAC_BOOT_FLASH 工程。 (在正常配置中)我没有接收任何 BootP 请求、正如我在 Wireshark 中观察到的那样。

    2、 使用 LM 闪存编程器在地址0x4000处编程更新了 EMAC_BOOT_FLASH 项目、方法是在擦除方法中选择选项擦除必要页。 (在正常配置中)。 现在、我 的应用 程序运行正常。

    3.现在我已将配置更改为手动配置并输入了设备的 IP 地址和 MAC。 然后、我尝试对电路板进行编程、但它显示仅尝试连接。

    若要检查我的器件是否接收到魔术包、我在项目的 sw_update.c 文件中有 kep 测试打印语句。 我观察到 的是、我的器件正在成功接收魔术包并使用器件 MAC 地址(比较成功)对其进行通信、并调用  SoftwareUpdateBegin (system_clk);  当调用此函数时、我的系统停止工作、它不会再次启动。

    您能告诉我导致此问题的原因吗?

    如何检查我的器件中是否存在 Boolloader 应用?

    谢谢你。

    此致、

    Balaji TS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="476365" URL"μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forum/1122317/tm4c1294ncpdt-firmware-update-through ethernet/4183451#4183451"]

    我是否需要更改 EMAC_BOOT_FLASH 代码中的任何其他内容?  

    我已经尝试了下面的另一种方法

    1。编程使用 LM 闪存编程器在地址0x0000处更新了 EMAC_BOOT_FLASH 工程。 (在正常配置中)我没有接收任何 BootP 请求、正如我在 Wireshark 中观察到的那样。

    2、 使用 LM 闪存编程器在地址0x4000处编程更新了 EMAC_BOOT_FLASH 项目、方法是在擦除方法中选择选项擦除必要页。 (在正常配置中)。 现在、我 的应用 程序运行正常。

    [/报价]

    我在这里很困惑。 您曾三次提到 EMAC_BOOT_FLASH。 您实际上是说 boot_emac_flash (这是示例引导加载程序)还是说 boot_demo_emac_flash (这是示例应用固件)? 您说过您将  EMAC_BOOT_FLASH (引导加载程序)编程为0x4000、它正在工作。 如果 EMAC_BOOT_FLASH 是只应在0x0进行编程的引导加载程序、这是怎么可能的。

    请非常清楚、如果您重命名 Bootlaoder 名称和应用程序名称、那么我们都在同一页面上、什么是 Bootlaoder 名称和应用程序名称。  

    当您说 它通过外部 PHY 为 Enet_s2E 工作时、您唯一改变的是  

    LOCAL_EMAPPHYConfigSet (EMAC0_BASE、EMAC_PHY_TYPE_EXTERNAL_RMII)、除此之外什么都没有? 我认为、无论您为使 Enet_S2E 与外部 PHY 协同工作所做的任何更改、您都需要执行相同的操作。  

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

    蔡国荣、

    很抱歉造成混淆。 输入错误。 请考虑以下各行。

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    我是否需要更改 EMAC_BOOT_FLASH 代码中的任何其他内容? (任何其他更改将此行  local_EMACPHYConfigSet 花费)。  

    我已经尝试了下面的另一种方法

    1。编程使用 LM 闪存编程器在地址0x0000处更新了 EMAC_BOOT_FLASH 工程。 (在正常配置中)我没有接收任何 BootP 请求、正如我在 Wireshark 中观察到的那样。

    2. 使用 LM 闪存编程器在地址0x4000处编辑 my_enet_S2E 应用项目、方法是在擦除方法中选择选项擦除必要页。 (在正常配置中)。 现在、我 的应用 程序运行正常。

    3.现在我已将配置更改为手动配置并输入了设备的 IP 地址和 MAC。 然后、我尝试对电路板 my_enet_S2E 应用进行编程、但它显示仅尝试连接。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    您的问题:

    当您说 它通过外部 PHY 为 Enet_s2E 工作时、您唯一改变的是  

    LOCAL_EMAPPHYConfigSet (EMAC0_BASE、EMAC_PHY_TYPE_EXTERNAL_RMII)、除此之外什么都没有? 我认为、无论您为使 Enet_S2E 与外部 PHY 协同工作所做的任何更改、您都需要执行相同的操作。  

    答案:

    我已经更改了 lwipopts.h、lwipplib.c、 lwip-1.4.1/ports/Tiva-tm4c129/netif/TIVA-tm4c129.c 文件中的许多内容、使其能够与外部 PHY 配合使用。 因此、Enet_S2E 应用可以正常工作。

    但现在我的问题是 EMAC_BOOT_FLASH 引导加载程序项目、因为 此项目不包含与 lwip 相关的任何内容。  我的问题是、要使用外部 PHY、需要在 EMAC_BOOT_FLASH 引导加载程序项目中实现哪些更改。

    谢谢你。

    此致、

    Balaji TS

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

    您好!

     引导加载程序不使用 lwIP 堆栈、因为引导加载程序应该是一个小型程序。 lwIP 会占用过多的内存空间。 我认为引导加载程序使用 UIP 堆栈。 我建议您单步执行 bl_emac.c 中的 SendBOOTPRequest()函数,然后查看 BOOTP 请求是否已发出或失败的原因。  在 BOOTPThread()中调用 SendBOOTPRequest()。  这就是我目前可以提出的所有建议、因为我在使用外部 PHY 时、自己在这一领域没有太多的专业知识。 很抱歉缺少指导。  

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

    您好、Charles、

    感谢您的建议。 我将根据您的建议进行检查。

    谢谢你。

    此致、

    Balaji TS