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:TM4C1294

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/1126445/ek-tm4c1294xl-tm4c1294

器件型号:EK-TM4C1294XL

尊敬的 TI 支持:

我有 EK-TM4C1294XL 评估套件。 我下载了 SPMA072 (用于 TM4C129x 的串行转以太网转换器)。

我能够使用 CCS 11.2.0进行编译。 应用程序运行正常、我可以打开 Web 服务器。

我对 webserver 进行了一些更改、以确定我们的应用程序。

新要求之一是能够使用网络服务器和以太网通道进行 Tiva 固件更新。 我开始阅读 TivaWare 引导加载程序文档(SPMU301E)。

我想知道您是否有我可以使用的现有代码、或者您是否可以为我提供一些指导。

感谢您的帮助、

Felix V.

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

    您好、Felix、

     请参阅 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_emac_flash 中的示例工程 boot_emac_flash。 BOOT_EMAC_FLASH 是引导加载程序。 您将通过 JTAG 接口将此引导加载程序加载到0x0处的闪存中。 运行后、它将通过以太网端口引导加载应用固件。 C :\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_demo_emac_flash 中还有一个示例应用固件。 引导加载程序将应用固件(BOOT_DEMO_EMAC_FLASH)加载到地址0x4000。 加载应用程序后、当远程主机请求更新固件时、它将跳回到引导加载程序。 远程主机将向客户端(MCU)发送魔术包。 当客户端应用程序检测到魔术包时、它将跳转到引导加载程序以再次更新应用程序固件。

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

    感谢 Charles、如何指定使用 CCS 将 boot_emac_flash 下载到地址0x0? 我是否需要一个实用程序来发送魔术包和下载 boot_demo_emac_flash? 我可以从哪里下载它?

    感谢你的帮助。

    Felix

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

    您好、Felix、

     通过 JTAG 加载 BOOT_EMAC_FLASH 与闪烁示例等任何程序都没有区别。 要运行的实用程序是在 PC 端运行的 LM 闪存编程器(基于 GUI)。 您可以从 https://www.ti.com/tool/LMFLASHPROGRAMR 下载。 或者、您也可以使用 C:\ti\TivaWare_C_Series-2.2.0.295\tools\bin\eflash.exe 中的命令行 eflash.exe。  

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

    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 请求。  

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

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

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

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

    非常感谢 Charles 的回答。 我按照这些步骤操作、一切都很顺利! 固件已更新为 BOOT_DEMO_EMAC_FLASH。

    我不清楚的是接下来会发生什么。 我想再次更新固件。 我已重启电源。 我希望 boot_demo_emac_flash 正在运行。 这次我没有获得调试屏幕上显示的 IP 地址。 我打开 LM Flash 并尝试使用以前的 IP 地址更新固件、但无法正常工作。 LM Flash 一直尝试建立连接失败。 我想 IP 地址错误。 安装 boot_emac_flash 后、我的目标是下载我自己的应用程序、运行它、打开 LM Flash 并能够更新固件。 如何实现这一点?  

    感谢您的支持、

    Felix

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

    您好、Felix、

     我只需点击 LM 闪存编程器上的"Program"按钮多次测试、它始终对我有效。  

    演示应用程序(boot_demo_emac_flash.bin 程序)  将侦听来自服务器的魔术包。  接收到魔术包后、固件将控制权转移给引导加载程序以执行升级。 在 LM Flash 程序中、当您单击"Program"按钮时、它会发出魔术包。 魔术包包含6个字节的0xAA、后跟重复4次的目标 MAC 地址。 引导加载程序再次运行后,它将发出 BOOTP 请求。 您应该在 Wireshark 上看到它。 演示程序是一个简单的闪烁程序、其中包含用于监听魔术包的附加代码。 在演示运行时、您应该会看到 LED 闪烁。 按下"Program"按钮后、LED 应熄灭、以指示它已将控制权转移到引导加载程序。  

     引导加载程序不会定期而是以增量方式发送 BOOTP 请求。 例如,引导加载程序将首先发送 BOOTP 请求。 如果服务器没有回复,它将等待一秒钟以发送另一个 BOOTP 请求。 如果服务器仍然没有回复,它将以增量方式等待2秒,然后等待4秒,然后等待8秒,这样就不会淹没网络。 如果您在单击“编程”按钮之前等待足够长的时间,则可能需要等待64秒才能发送下一个 BOOTP 请求。 因此、问题是您是否在按下"Program"按钮后等待足够长的时间。 最好的方法是在将控制权转移到引导加载程序后立即按"Program"按钮。 如果您按下编程按钮并等待几分钟、但仍然没有任何内容、则这是另一个问题。 使用 Wireshark 查看正在发生的情况。  

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

    首次成功对 boot_demo_emac_flash.bin 进行编程后、请使用 CCS 存储器浏览器查看0x4000起始地址的内容。 您在那里看到了程序映像吗? 如果应用正在运行、您将看到 LED 闪烁。  

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

    Charles、您在上面写下的步骤顺序始终如一。 问题出在 boot_demo_emac 闪存下载后。 LED 闪烁、因此我知道 BOOT_DEMO-EMAC 正在运行、但是当我打开 LM 闪存时、LED 永远不会停止闪烁、换句话说、执行永远不会传输到 BOOT_EMAC_FLASH。

    Felix  

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

    您好、Felix、

     如果 LED 从未关闭、则表示客户端从未收到魔术包。  您是否知道您的 PC 上是否有多个 NIC (网络接口卡)? 我知道 LM 闪存编程器有一个问题,即它可能错误地将 BOOTP 应答和魔术包发送到错误的 NIC。 如果您的 PC 上有多个 NIC、请禁用 Windows 控制面板中的所有 NIC、但与 MCU 连接的 NIC 除外。 在我自己的设置中、如果我使用以太网电缆将 PC 直接插入网络交换机、则会找到正确的 NIC。 但是、如果我的 PC 连接到连接到网络的扩展坞、则 LM 闪存编程器将使用扩展坞内的 NIC、这是错误的。  请告诉我这是否能解决问题。  

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

    谢谢 Charles、我会尝试一下。 我有两个网卡。 我怀疑 LED 未关闭的另一个原因是 BOOT_DEMO_EMAC_FLASH 会覆盖 BOOT_EMAC_FLASH。 在存储器浏览器中、安装 boot_demo_emac_flash 后、地址0x4000似乎不包含图像数据、而0x00则包含图像数据。 如何在 Code Composer 起始地址中指定? 我想检查 boot_demo_emac_flash。

    Felix

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="523811" url="μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126445/ek-tm4c1294xl-tm4c1294/4180594#4180594"]谢谢 Charles、我会尝试此操作。 我有两个 NIC[/报价]

    是的、请移除 其中一个网卡、只需保留与 MCU 位于同一网络上的网卡即可。  

    [~ userid="523811" url="μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forum/1126445/ek-tm4c1294xl-tm4c1294/4180594#4180594"]我怀疑 LED_AC_BOOT_EMAC_MODEM 不会覆盖的另一个原因是 LED_BOOT 被覆盖。 在存储器浏览器中、安装 boot_demo_emac_flash 后、地址0x4000似乎不包含图像数据、而0x00则包含图像数据。

    这很奇怪。 如果您使用库存 TivaWare 示例(BOOT_EMAC_FLASH 和 BOOT_DEMO_EMAC_FLASH)、则它不会覆盖引导加载程序。 这就是应该发生的情况。

    当您第一次通过 JTAG 加载 BOOT_EMAC_FLASH 时、您将在0x0处看到引导加载程序。 使用存储器浏览器确认引导加载程序存在于0x0、所有0xF 位于0x4000。

    对固件进行编程后、您仍应在0x0处看到引导加载程序、在0x4000处看到固件。 再次使用内存浏览器进行确认。 LED 应闪烁。 重启后、引导加载程序将首先运行、并检查0x4000处是否已存在有效的固件映像。 如果是、它将直接跳转到0x4000处的应用程序。  

    在 LM 闪存编程器中、如果在应用程序运行时点击"Program"按钮、它会向 MCU 固件发送一个魔术包。 接收到魔术包后、固件跳转到引导加载程序、步骤1将重复执行。 它将不会在任何时候自行擦除(引导加载程序位于0x0)。 它将仅更新0x4000处的固件。 使用内存浏览器。 如果您说应用程序不在0x0处并覆盖引导加载程序、那么在我看来、这是不可能的。  

    您是否随时修改 boot_demo_emac_flash 链接器命令文件? 请参见下面的。 我唯一能想到的是、您修改链接器命令文件以在0x0而非0x4000处启动应用程序、这可能会无意中覆盖引导加载程序。 但这仍然是不可能的。 原因是引导加载程序默认禁用 ENABLE_BL_UPDATE、因此不允许从0x0到0x4000的区域。 请参见下面的。  

    此时、我真的不明白您是否按原样使用示例(不做任何修改)、并且无法再次更新固件。  

    #define APP_BASE 0x00004000
    #define RAM_BASE 0x20000000
    
    /* System memory map */
    
    MEMORY
    {
        /* Application stored in and executes from internal flash */
        FLASH (RX) : origin = APP_BASE, length = 0x000fc000
        /* Application uses internal RAM for data */
        SRAM (RWX) : origin = 0x20000000, length = 0x00040000
    }

    //*****************************************************************************
    //
    // Enables updates to the boot loader.  Updating the boot loader is an unsafe
    // operation since it is not fully fault tolerant (losing power to the device
    // part way through could result in the boot loader no longer being present in
    // flash).
    //
    // Depends on: None
    // Exclusive of: None
    // Requires: None
    //
    //*****************************************************************************
    //#define ENABLE_BL_UPDATE

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

    您好、Charles、感谢您提供的信息。 我已禁用所有网卡、并将其保留为连接到 MCU 的网卡。 但我仍然无法引导加载。 LED 持续闪烁。

    我已验证 BOOT_DEMO_EMAC_FLASH 是否下载到0x4000地址、并且不应干扰 下载到0x0000的 BOOT_EMAC_FLASH。

    我没有修改链接器命令。 如前所述、如果我按照上述步骤操作、一切都可以正常工作。 但是、如果我循环通电并启动   

    LM Flash Programmer up、我无法重复固件更新。 LM 闪存编程器不断尝试连接。 LED 永远不会熄灭。 它会持续偏置。

    我打开了 Wireshark 并验证了 LM Flash Programmer 使用 UDP 端口9正确发送魔术包。 但是 、BOOST_DEMO_EMAC_FLASH 似乎没有检测到它。  

    我注意到的一点是:当我 使用 LM 闪存编程器通过以太网下载 boot_demo_emac_flash 时、LED 闪烁。 即使我在重新打开时关闭电源、LED 也会闪烁、这表示下载成功。 但是、当我使用 Code Composer 下载 BOOT_DEMO_EMAC_FLASH 并运行它时、LED 不会闪烁。 它就像 BOOT_DEMO_EMAC_FLASH 卡在某个位置。 我无法检测它停止的位置、因为调试探针在运行 boot_demo_flash_时具有硬时间断点。 您看到过这种情况吗?  

    Felix  

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

    您好、Felix、

     我真的没有想法。 我只是再次尝试运行该示例。 首次引导加载固件后、固件开始运行、LED 将闪烁。 如果我点击"Program"按钮、它将再次重新编程。 我可以重置板、然后点击"Program"或重新启动板、然后点击"Program"、我在更新固件时没有任何问题。  

     您是否具有正确的 MAC 地址? 我猜是这样。 否则、您将无法第一次引导加载。  

     您可以看到 BOOTP 请求发送到客户端(MCU)、但 MCU 未检测到魔术包。 您能 显示 Wireshark 捕获吗?

    [~引语 userid="523811" URL"μ C/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126445/ek-tm4c1294xl-tm4c1294/4185307#4185307"]

    如前所述、如果我按照上述步骤操作、一切都可以正常工作。 但是、如果我循环通电并启动   

    LM Flash Programmer up、我无法重复固件更新。

    [/报价]

    如果您不循环电路板、而是只需点击电路板上的复位按钮、然后点击"Program"按钮、该怎么办?  

    [引用 userid="523811" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm-based microcontrollers-forum/1126445/ek-tm4c1294xl-tm4c1294/4185307#4185307]LM Flash Programmer 不断尝试连接。 LED 永远不会熄灭。 它会不断闪变。[/quot]

    这意味着客户端从未收到魔术包? 如果您认为服务器发送了魔术包、请 使用包含魔术包的数据包显示 Wireshark 捕获。  魔术包包含6个字节的0xAA、后跟重复4次的目标 MAC 地址。 请确认数据包中的 MAC 地址是否与 LaunchPad 背面标签上打印的 MAC 地址相匹配。 它们是否匹配?

    [~ userid="523811" url="μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forum/1126445/ek-tm4c1294xl-tm4c1294/4185307#4185307]但是、当我下载 boot_composer 并运行 EMblink、但不使用代码 blink。 它就像 BOOT_DEMO_EMAC_FLASH 卡在某个位置。 [/报价]

     BOOT_DEMO_EMAC_FLASH 从0x4000开始。 当您使用 CCS 加载程序时、很可能会擦除0x0处的引导加载程序。 您可以使用内存浏览器确认。 原因是默认情况下、CCS 将首先擦除整个闪存、然后再加载新程序。 您需要更改此设置、即它不会擦除整个闪存、而只会擦除从0x4000开始的应用程序空间。 请参阅以下内容、以不擦除整个闪存。 当0x0处的引导加载程序被擦除时、处理器将不会在0x0和0x4处找到堆栈指针和复位矢量、因此在下电上电后无法跳转到0x4000处的应用程序。  

      

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

    查尔斯、您好 、回答您的问题:

    如果您不循环电路板、而是只需点击电路板上的复位按钮、然后点击"Program"按钮、该怎么办?  

    即使我不循环通电、只需点击"Program"按钮、它也不起作用。

    我注意到以下情况:当我下载 enet_lwip 并在调试屏幕中看到分配的 IP 地址时、使用命令提示符我可以 ping 该地址(在我的情况下为169.254.94.8)。 在我下载 boot_demo_emac_flash 并运行它之后、LED 闪烁、但是如果我 ping 相同的 IP 地址、我没有得到任何响应。 这意味着 BOOT_DEMO_EMAC_FLASH 以某种方式中断了分配的 IP 地址。 这说明了为什么 LM_Flash Programmer 不起作用、因为这是我再次下载时使用的同一 IP 地址。 我假设您使用相同的 IP 地址、对吧?

    在您的设置中、当 BOOT_DEMO_EMAC_FLASH 正在运行时、您能否验证您是否可以 ping 最初分配的 IP 地址?

    Felix

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

    您好、Felix、

     下面是有关维基百科魔术包的说明。 魔术包是广播消息。 另一方面、当 LM 闪存编程器发送魔术时、它实际上不需要知道目标的 IP 地址。 我想知道您拥有哪种类型的网络? 广播消息不能在 LAN 网络之外工作。 如果您的 MCU IP 地址与您的 PC 不在同一子网中、则广播消息可能不起作用、因为它需要穿过子网、网络上的交换机将阻止它以避免广播消息。 请咨询您的 IT 部门、因为我不是网络系统专家。 请咨询您的 IT 部门,了解是否可以让 DHCP 服务器为客户端分配 IP 地址,使其与您的 PC 位于同一子网中。 查看这是否可以解决问题。 另一种更简单的方法可能是在家庭网络上尝试该示例。 我认为、家庭网络将是一个更简单的网络、您的 PC 和 MCU 将位于同一子网中。   

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

    您好、Charles、非常感谢您提供了富有洞察力的信息。 您回答正确。 问题似乎与网络配置类型有关,特别是网络中 DHCP 和子网掩码的配置方式。 我尝试了一台与公司网络断开连接的笔记本电脑、它马上就能工作了。 我可以始终如一地更新固件。 我将立即引入我的应用并继续测试。

    感谢您的大力支持!

    Felix

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

    Charles、快速提问。 如果要下载应用程序、我需要执行以下操作:

    使用 Code Composer 重新编译我的应用、并将起始地址更改为0x4000。

    运行 enet_lwip 并找出 IP 地址

    在地址0x0000处安装 boot_emac_flash

    运行 boot_emac_flash 并使用 LM_Flash 编程器下载我的应用程序

    上述顺序是否正确?

    谢谢

    Felix

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

    您好、Felix、

     是的、没错。