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.

[参考译文] RTOS/TM4C129XNCZAD:如何远程更新 TI 嵌入式软件?

Guru**** 2605855 points
Other Parts Discussed in Thread: EK-TM4C1294XL, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/733314/rtos-tm4c129xnczad-how-can-i-update-ti-embedded-software-remotely

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

工具/软件:TI-RTOS

您好!

在我们的项目中 、需要  通过网络更新电路板的嵌入式软件。 是否有可能或有任何有关此问题的参考?  需要远程更新".bin"文件。

感谢您的回答。

此致、

Cengizhan YAPICIOĞLU ć   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    TivaWare 库中提供了各种引导加载程序示例。 您可以使用引导加载程序通过以太网、UART、SPI、USB 和 I2C 更新嵌入式软件。 有关详细信息、请参阅中的引导加载程序用户指南 /docs/SW-TM4C-BOOTLDR-UG-2.1.4.178.pdf.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我在我的安装文件中看到已重新调整的文档,并找到"4. 以太网更新"部分。 其中提到了 Configureenet()和 UpdateBootp()函数,尽管未看到这些函数采用任何“.bin”文件,而且我在该部分找不到任何其他内容。此外,我找不到 导入 Configureenet()和 UpdateBootp()所需的“BL_*.c”文件。 我想 让 LM FLAH 程序员做些什么、但有一个不同之 处是我想使用以太网。请就这些主题向我提供帮助。 提前感谢。

    此致、

    Cengizhan YAPICIOĞLU ć  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否有机会运行 TivaWare boot_EMAC_FLASH 示例? CCS 项目位于下 /examples/boards/ek-tm4c1294xl/boot_emac_flash. BOOT_EMAC_FLASH 工程是引导加载程序、需要首先使用 CCS 或 Uniflash 闪存编程器将其编程到闪存中。 还有 boot_demo_emac_flash 示例、这是您要用于通过 LM 闪存编程器加载到闪存中的应用程序 bin 文件。 当 boot_emac_flash 引导加载程序在 MCU 上启动时、它将向运行在 PC 端的 LM 闪存编程器发送 BOOTP 命令。 然后、LM 闪存编程器将使用 TFTP 协议将 boot_demo_emac_flash.bin 文件发送到 MCU、同时 MCU 将 bin 数据编程到闪存中。

    以下帖子可能对您有所帮助。
    e2e.ti.com/.../2453437
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    开机自检链接已断开、我在查找时也遇到问题  不存在的/examples/boards/dk-tm4c1294xl/boot_emac_flash。 此外,我查看了引导加载程序文档,并注意到 Configureenet()和 UpdateBootP()位于 BL_EMAC.c 文件中,尽管我有 BL_config.h.Tmpl 文件,但这些文件需要 bl_config.h。 当我尝试将其与转换为头文件一起使用时、它需要 UIP 第三方软件包、但我使用 TI-RTOS。 另一件事是、我查看了示例(它不在我的安装文档中、但我从 Web 上找到了它)、但在 boot_emac_flash 上找不到任何内容、只是注释行。 然后,我聚焦 了 boot_demo_emac_flash,但无法找到 SoftwareUpdateBegin();SoftwareupdateInit();。 相关文档无法包含这些内容、我找不到它们。  

    当我关注文档时、我有一个基于 udpecho 示例的 TI-RTOS 项目、不使用 UIP 或 lwip 或类似的东西。 请就这些主题向我提供帮助吗? 相关的问题无法解决。  

    提前感谢。

    此致、

    Cengizhan YAPICIOĞLU ć  

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

    您是否安装了中的完整 TivaWare

     如下所示?

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

    回复:已断开链接-尝试此帖子链接、它应该可以使用: e2e.ti.com/.../667007
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,
    我按照链接操作、首先插入通过从 JTAG 接口进行调试来提供 IP 地址所需的.bin 文件。 在子序列中、我使用"Portgram Address Offset 0x0"对 emac_boot_flash.bin 进行编程、并遇到错误。"说明 BOOTP 服务器的问题"我是否可以做错误? 我将重点放在 UDP 端口67和69上、也是计算机使用的端口、但我移至另一个不使用67和69端口的端口、但结果是相同的、我有相同的错误。  从论坛问题中了解到、我还关闭了防火墙。
    此致、
    Cengizhan Yapıcıoğlu ć

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否首先运行 enet_lwip 示例以记录 IP 地址?

    1.运行 enet_lwip 示例并记录 IP 地址。 IP 地址将通过终端窗口显示。
    2.通过 JTAG 接口将 EMAC_BOOT_FLASH 编程到闪存中。
    3.打开 LM 闪存编程器并输入步骤1中的 IP 地址和 MAC 地址,如我之前的答复图片所示
    4.运行 EMAC_BOOT_FLASH 程序
    5.转到"Program"选项卡下的 LM 闪存编程器,指定 boot_demo1.bin 并点击"Program"按钮

    编程完成后、您应该会看到 boot_demo1.bin 编程到闪存中、从0x4000开始。 打开内存浏览器进行检查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是否需要为此使用 enet_lwip 示例? 我们有一个 RTOS 项目、它将 UDP 与静态 IP 结合使用。 初始化时、我运行 thsi 并记录 MAC 和 IP 地址。随后、通过 JTAG 接口地址0x0对 EMAC_BOOT_FLASH 进行编程。 然后、我打开 LM 闪存并选择以太网接口并填充 MAC 和 IP 字段、然后运行 EMAC_BOOT_FLASH、但我在 Wireshark 上看不到任何内容。Furthermeore、我无法使用 ping 命令从记录的 IP 地址接收任何答案。

    另一件事是、我们希望通过编程方式实现它、我看到"bl_emac.c"- Funct、ons to Update via Internet、我必须使用其中的哪一个来从它更新映像(.bin)? 在引导加载程序文档中没有有关这方面的详细文档。您能就这两个主要主题向我们提供帮助吗?

    *是否应该使用静态 IP 而不是 DHCP (enet_UIP 或 lwip)?

    *我必须使用哪些函数或.c .h 文件来以编程方式执行它?

    提前感谢您的回答。这对我们来说是一个非常重要的要求。

    此致、

    Cengizhan YAPICIOĞLU ć

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

    您好!

    [ Yapıcıoğlu 用户="Cengizhan Δ Σ"]随后、通过 JTAG 接口地址0x0对 EMAC_BOOT_FLASH 进行编程。 然后、我打开 LM 闪存并选择以太网接口并填充 MAC 和 IP 字段、然后运行 EMAC_BOOT_FLASH、但我无法在 Wireshark 上看到任何内容[/QUERP]

     您是否按如下所示进入了"Program"选项卡以提供.bin 文件并按"Program"按钮? 您没有提到您已转到"Program"选项卡、单击"Program"按钮。  

    BOOT_EMAC_FLASH 运行后、它应该已向 LM 闪存编程器发送 BOOTP 请求。 LM 闪存编程器接收到 BOOTP 请求后、在 ARP 之后、.bin 将通过 TFTP 协议下载到 MCU。  

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

    您好!
    我们使用 TivaWare C 系列2.0.1.11577、在 examples/boards/dk-tm4c129x only boot_demo_UART 和 boot_demo_USB 下没有 boot_demo_emac_flash 示例。 可能与这些相关?

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

    您好!

     最新版本为2.1.4.178。 您的版本很旧。 可从下载最新版本  

    您应该在 dk-tm4c129x 或 ek-tm4c1294xl 文件夹中看到 boot_emac_flash 和 boot_demo_emac_flash。 我真的建议您按原样尝试这些示例、并在尝试根据您的自定义需求进行修改之前了解其工作原理。  

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

    您好!
    问题是我使用的软件版本。现在、我可以通过以太网启动 tftp。 但电路板无法打开、发送映像包括 UDP、UART 和 i2c 通信、而不是 BOOT_EMAC_DEMOH_FLASH。  是否有任何引导加载程序起始地址和固件程序起始地址设置? 我看到了带 Wireshark 的 tftp 数据包。
    提前感谢您的回答。
    此致、
    Cengizhan YAPICIOĞLU ć

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

    [ Yapıcıoğlu user="Cengizhan Δ Σ">但电路板无法打开、发送映像包括 UDP、UART 和 i2c 通信、而不是 BOOT_EMAC_DEMOH_FLASH。  [/报价]

    很抱歉,我不能理解你在这里想说什么。 发送包含 UDP、UART 和 i2c 的映像意味着什么? 我迷路了。 在屏幕截图中、您显示电路板正在生成 BOOTP 请求、随后 TFTP 开始将固件下载到闪存。 就引导加载程序而言、我认为这是有效的。  

    [ Yapıcıoğlu user="Cengizhan Δ t"]是否存在引导加载程序起始地址和固件程序起始地址的任何设置? 我看到了带 Wireshark 的 tftp 数据包。[/quot]

    请参阅 bl_config.h 文件。 有 APP_START_ADDRESS 的定义。 请参见下面的示例。 APP_START_ADDRESS 是应用固件将编程到的地址。 0x4000是示例选择使用的地址。 您可以根据需要使用不同的地址。  

    //
    //
    //应用程序的起始地址。 这必须是1024的倍数
    //字节(使其与页边界对齐)。 矢量表的预期值为
    //此位置,以及向量表(位于的栈)的感知有效性
    //在 SRAM 中、位于闪存中的复位矢量)用作的指示
    //应用程序映像的有效性。
    //
    //引导加载程序的闪存映像不得大于此值。
    //
    //取决于:无
    //不包括:无
    //要求:无
    //
    //
    #define APP_START_ADDRESS 0x00004000

    如果您查看 boot_demo_emac_flash_ccs.cmd 文件以获取 boot_demo_emac_flash 示例、则应用程序链接到地址0x4000 、该地址与 boot_emac_flash bootloader 中 bl_config.h 文件中的 app_start_address 0x00004000匹配。 引导加载程序本身必须从0x0开始。  

    /*应用程序的起始地址。 通常是中断矢量*/
    /*必须位于应用程序的开头。 *
    #define APP_BASE 0x00004000
    #define RAM_base 0x20000000

    /*系统内存映射*/

    存储器

    /*存储在内部闪存中并从内部闪存执行的应用程序*/
    闪存(RX):origin = app_BASE,length = 0x000fc000
    /*应用程序使用内部 RAM 进行数据*/
    SRAM (rwx):origin = 0x20000000,length = 0x00040000

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    正如您建议的那样、问题在于程序基址、我可以更新固件、但我无法通过以太网安装第二次固件。

    1) 1)是否应在通过 ICDI 更新以太网后或仅进行一次操作后每次安装 boot_EMAC 和 lw_IP 的.bin 文件?

    2) 2)在我的案例中、它仅在第一次运行时才真正起作用、如下所示。 我检查了程序的起始地址、该地址为0x0、但当我将 bin 更改为启动0x4000 (通过.cfg 文件)时(只有映像在您的情况下不更新第一个固件、而不是 Enet_lw IP)、远程更新成功。

    3)另一件事是、我将第一个程序地址更改为0x4000 (假设为 lw_IP 端)、并通过 ICDI 调用 boot_EMAC。 但我无法在 Wireshark 上查看 BOOTP 请求。 如果 lw_ip 端启动0x0、它将完美工作。

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

    [引用 USER="Cengizhan Yapıcıoğlu "]1-)是否应在通过 ICDI 更新以太网后或仅一次运行后每次安装 boot_EMAC 和 lw_IP 的.bin 文件? [/报价]

    很高兴您取得了良好的进展。  

    不需要、每次都不需要安装 boot_emac_flash (引导加载程序)。 这应该是一次性的过程。 如前所述、引导加载程序将首先检查0x4000处是否存在有效的应用程序固件(或您指定的任何应用程序起始地址)。 它检查有效应用程序固件的方法是验证堆栈指针和复位矢量是否等于0xFFFFFFFF。 如果它们都是 F、则表示没有应用程序存在。 然后,它将向服务器发送 BOOTP 请求。 服务器收到 BOOTP 请求后,TFTP 将开始下载应用程序固件。 如果0x4000处已经存在应用程序固件、会发生什么情况? 在本例中、引导加载程序将跳转到应用程序。 它不会发送 BOOTP 请求。 您可能会有这样的印象:每次重新加载 boot_emac_flash 时,它都会重新启动 BOOTP。 原因可能是您擦除整个闪存。 每次擦除整个闪存并再次对 boot_emac_flash 进行编程时、0x4000处的堆栈指针和复位向量都为空、引导加载程序将执行 BOOTP 进程。

    [引用 user="Cengizhan Yapıcıoğlu "]2-)在我的案例中,它仅在第一次运行时才真正起作用,如下所示。 我检查了程序的起始地址、该地址为0x0、但当我将 bin 更改为启动0x4000 (通过.cfg 文件)时(只有映像在您的情况下不更新第一个固件、而不是 Enet_lw IP)、远程更新成功。 [/报价]

    如果将 APP_START_ADDRESS 更改为0x0、则会覆盖位于0x0的引导加载程序(BOOT_EMAC_FLASH)。 我已经提到 BOOT_EMAC_FLASH 必须位于0x0、您的应用程序可以位于0x4000或您选择的其他应用程序。 您要求引导加载程序覆盖自身、当然、由于应用程序固件会覆盖引导加载程序、因此下次引导加载程序将无法引导加载。  

    boot_demo_emac_flash 是示例应用固件。 这是一个简单的闪烁程序。 但是、它还包含用于检测服务器是否发送了魔术包的代码。 当演示程序正在运行时(使 LED 闪烁)、如果您在 LM 闪存编程器中单击"Program"按钮、 演示程序将跳转到引导加载程序以重新启动 BOOTP 进程。 请检查演示代码。 这就是为什么我要求您按原样运行 boot_emac_flash 和 boot_demo_emac_flash、并在修改它们之前了解它们的工作原理。

    如果您要构建自己的应用固件、并且希望能够跳回到引导加载程序、则必须整合代码来检测服务器发送的魔术包。 请读取 boot_demo_emac_flash 代码。  

    BOOT_EMAC_FLASH (引导加载程序)还具有相应的配置、允许您通过检测按压的引脚来强制执行引导加载、即使已经存在应用程序固件。 在 bl_config.h 中检查#define Forced_update_Periph、 Forced_update_port、 Forced_update_PIN、 Forced_update_polarity。

    [引用 USER="Cengizhan Yapıcıoğlu "]3-)另一件事是我将第一个程序地址更改为0x4000 (假设为 lw_IP 端)并通过 ICDI 调用 boot_EMAC。 但我无法在 Wireshark 上查看 BOOTP 请求。 如果 lw_ip 端启动0x0、它将完美工作。

    正如我说过的、如果您打算首先对 bootloader boot_emac_flash 进行编程、那么它必须位于0x0。 不能更改为0x4000。 思考一下。 CPU 复位后、它将在0x0处获取堆栈指针和复位矢量、如果没有任何内容、那么它如何能够引导加载? 您是否在询问是否可以将应用程序固件设置为0x0 (boot_demo_emac_flash)、而引导加载程序设置为0x4000 (boot_emac_flash)? 这不奏效。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    问题是否已解决? 我现在要关闭这个线程。 如果您有疑问、可以重新打开此主题或打开新主题。