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:通过以太网刻录新的 Tiva 应用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1344073/tm4c1294ncpdt-burn-new-tiva-application-via-ethernet

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

大家好!

我 在 Tiva 上运行一个应用、其 TCP 服务器使用 lwip 库并等待消息。 我想 通过以太网刻录新的应用程序。 我的 Tiva 直接连接到我的 PC、我知道它的 Mac 和 IP。

是否可以在没有引导加载程序的情况下使用我的一个应用程序执行此操作?  
Tiva 附带了 ROM 引导加载程序吗?我可以使用它通过我已知的 IP 和 Mac 连接 LM 闪存编程器工具。

或者、 我是否必须为此目的编写闪存引导加载程序?  

我们将感谢您提供任何帮助、

Tzipi

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

    您好!

     请参考示例应用 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_demo_EMAC_rom。 此示例将调用 ROM 引导加载程序 ROM_UpdateEMAC()以再次更新应用。

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

    我会检查它,谢谢!

    因此、在我的微控制器中有一个 ROM 引导加载程序来处理这一情况、对吧? 我不需要自己对它进行编程? 来 编写应用程序?

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

    是的。  

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

    尊敬的 Charles:

    我们发现需要找到不包含 LM 闪存编程器工具的解决方案。 你知道 我怎么能做到这一点吗?

    谢谢!

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

    尊敬的 Tzipi:

     如果您需要创建自己的串行编程器、请参阅以下应用手册。  

    https://www.ti.com/lit/pdf/spma074

     另请参阅引导加载程序用户指南。  

    https://www.ti.com/lit/pdf/spmu301

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

    我需要创建我的一个 ETH 编程器、而不是串行... 您对此有什么建议、文档或示例吗?  

    谢谢!

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

    尊敬的 Tzipi:

     是的、针对这样一个被称为 eflash 的工具的源代码可在 C:\ti\TivaWare_C_Series-2.2.0.295\tools\eflash 中找到。 eflash.exe 位于 C:\ti\TivaWare_C_Series-2.2.0.295\tools\bin 中。  

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

    尊敬的 Charles:

    我对该示例还有另一个问题。 我想将其合并到我的应用中、为了我的理解、我需要在 lwipopts.h 下启用 LWIP_UDP 标志、以确保可以通过 UDP 端口9接收魔术包。   

    我将 LWIP_TCP 用于我的应用。 启用两者 都会导致我出现问题?

    谢谢。

    Tzipi

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

    尊敬的 Tzipi:

     如果要同时使用 TCP 和 UDP、则需要启用 LWIP_TCP 和 LWIP_UDP。 请参考 opt.h 文件。 这两个#define 可以选择使用 lwipopts.h 文件在应用程序级别进行定义。 如果它们没有在 lwipopts.h 文件中定义、那么它们在 opt.h 文件中都被设置为1。 这意味着将两者都设置为1不会产生问题。  

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

    尊敬的 Charles:  

    感谢您的全力帮助!   现在、我能够将示例合并到我的代码中、并通过 LM 闪存程序对 Tiva 进行编程。  

    下一步是使用  eFLASH 代码构建我自己的工具。

    但我还有另一个问题: 是否有办法从不成功的计划中恢复? 如果通信失败、并且闪存 没有有效的应用程序、我必须再次使用 JTAG 对有效的应用程序进行编程。 有 一种方法可以避免这种情况?

    有任何解决方案没有使用 JTAG 来解决这一问题?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是我有另一个问题: 是否有方法从不成功的程序中恢复? 如果通信失败、并且闪存 没有有效的应用程序、我必须再次使用 JTAG 对有效的应用程序进行编程。 有 一种方法可以避免这种情况?

    您好!

     有关使用 CHECK_CRC 的详细信息、请参阅引导加载程序用户指南。 您可以启用 CRC 校验、以便如果通过以太网进行应用编程/更新在中间失败、引导加载程序将再次尝试重新加载程序。  

    //*****************************************************************************
    //
    // Enables runtime and download CRC32 checking of the main firmware image.
    // If this is defined, the boot loader will scan the main firmware image for
    // an image information header (stored immediately above the vector table and
    // marked by the words 0xFF01FF02 and 0xFF03FF04). If the header is found and
    // the CRC32 value it contains matches that calculated for the image, the
    // firmware is run. If the CRC32 does not match or the image information
    // is not found, the boot loader retains control and waits for a new download.
    // To aid debugging, if this option is used without ENFORCE_CRC being set, the
    // image will also be booted if the header is present but the length field is
    // set to 0xFFFFFFFF, typically indicating that the firmware file has not been
    // run through the post-processing tool which inserts the length and CRC values.
    //
    // Note that firmware images intended for use with CRC checking must have been
    // built with an 8 word image header appended to the top of the vector table
    // and the binary must have been processed by a tool such as tools/binpack.exe
    // to ensure that the required length (3rd word) and CRC32 (4th word) fields
    // are populated in the header.
    //
    // Depends on: ENFORCE_CRC
    // Exclusive of: None
    // Requires: None
    //
    //*****************************************************************************
    //#define CHECK_CRC

    //*****************************************************************************
    //
    // This definition may be used alongside CHECK_CRC to remove the debug behavior
    // which will allow an image with an uninitialized header to be run. With
    // ENFORCE_CRC defined firmware images will only be booted if they contain a
    // valid image information header and if the embedded CRC32 in that header
    // matches the calculated value.
    //
    // Depends on: None
    // Exclusive of: None
    // Requires: CHECK_CRC
    //
    //*****************************************************************************
    //#define ENFORCE_CRC

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

    文档中显示:  

    "如果标头缺失、或计算出的 CRC 与预期值不匹配、引导加载程序会保留控制权并等待下载新的固件映像。"

    ROM 引导加载程序此时可以使用 LM 闪存通过以太网获取新映像? 它不需要应用程序来获取魔术字数据包?

    它如何知道 IP 地址?

    此外、"check_crc"和"enforce_crc"定义位于"bl_config.h"文件下。 该文件与 ROM 引导加载程序相关? 我认为它仅适用于闪存引导加载程序。

    我不明白 ROM 引导加载程序是如何在应用程序未 从 LM 闪存中获取 PROGRAM 命令并将其传输到引导加载程序的情况下获得新映像的。

    感谢您的帮助!

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

    您好!

     CHECK_CRC 仅适用于基于闪存的引导加载程序、不适用于 ROM 引导加载程序。 我建议您考虑使用基于闪存的引导加载程序来提高稳健性。  如果在以太网编程过程中掉电、则固件可能已进行了部分编程。 0x0和0x4处可能已经有有效的堆栈指针和复位向量。 在本例中、ROM 引导加载程序将假定在0x0处存在有效的应用程序、尽管它只是部分编程。 ROM 引导加载程序重新启动固件更新的唯一方法是为 BOOTCFG 寄存器指定一个 GPIO 引脚、或完全擦除闪存、使0x0和0x4再次变为0xFFFFFFFF。 有关详细信息、请参阅引导加载程序用户指南。  

    2 ROM 引导加载程序
    ROM 引导加载程序从片上 ROM 存储器运行、可以通过三种方式调用


    1. ROM 引导加载程序运行并通过读取数据来检查是否存在有效的应用程序
    在0x0000.0004。 如果该地址的数据是0xFFFF.FFFF、那么映射 ROM 引导装载程序
    写入地址0x0000.0000并继续执行。 如果该地址的数据是任何其他值、
    然后应用程序将以该方式启动。


    BOOTCFG 寄存器指定了一个 GPIO 和一个状态。 如果该 GPIO 在读取数据时
    器件复位时、会调用 ROM 引导加载程序。 请参阅
    器件数据表、了解更多详细信息。


    3.用户应用程序可以使用特定于接口的 ROM API 调用 ROM 引导加载程序。 正在执行
    因此、强制 ROM 引导加载程序仅使用所选的接口来查找更新。
    如果没有找到有效的应用程序、ROM 引导加载程序将通过扫描支持的
    通信接口、直到其收到通过特定应用下载固件的
    获取位置反馈。 如果可以检测到多个接口、则检查这些接口的顺序为:USB (如果
    1)>以太网(如果适用)> I2C > SSI > UART。 不过、该序列不能
    确保先选择特定接口、然后再选择其他接口、因为最重要的是第一个
    接收到的命令来自给定的接口。