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.

[参考译文] TM4C129ENCPDT:通过LM Flash编程器使用以太网对设备进行编程

Guru**** 2931100 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/1094039/tm4c129encpdt-programming-the-device-using-ethernet-via-lm-flash-programmer

零件号:TM4C129ENCPDT
主题中讨论的其他部件:EK-TM4C1294XL

您好,

我们正在尝试通过以太网对设备进行编程。

我们可以通过以太网端口与设备通信,没有任何问题。 当设备通过Ethrenet端口直接连接到计算机时,我们已使用以太网端口对设备进行了编程。 我们将该设备安装在一个拥有数千台设备的拥挤网络中 ,并且能够毫无问题地进行通信。

但是,当我们尝试使用LM Flash Programmer's Build 1613对其进行编程时。 按Program (程序)按钮,它将进入"Attempting to connect"(正在尝试连接),并将永远留在那里。

我只想重复一遍,当通过本地以太网端口直接连接到计算机时,我们可以对设备进行编程。 但是,我们已经看到,当直接连接到计算机时,仍需要几分钟时间才能发现设备。

以下是LM Flash编程器的快照;

我不认为这是与代码相关的问题,因为我们能够通过以太网端口直接连接到计算机进行编程。 但是,我共享调用远程编程模式时处理器经过的顺序;

//IntMasterDisable();
HWREG(NVIC_DIS0) = 0xFFFFFFFF;
HWREG(NVIC_DIS1) = 0xFFFFFFFF;
HWREG(NVIC_DIS2) = 0xFFFFFFFF;
HWREG(NVIC_DIS3) = 0xFFFFFFFF;
HWREG(NVIC_DIS4) = 0xFFFFFFFF;
ROM_SysTickIntDisable();
ROM_SysTickDisable();

ROM_UpdateEMAC(sys_clock);

感谢大家的参与和帮助。

Regars,

Sahil

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

    我刚刚注意到我的PC位于不同的子网中,而设备位于不同的子网中。 这可能是个问题吗? 它们是否都需要在同一子网上?

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

    您好,Sahil:

    仅供参考:Cisco交换机通常不会在未启用IP帮助程序的情况下通过其他VLAN发送广播数据包。 这是一种防止来自一个子网的广播风暴的保护措施,它以全连续广播模式将整个网络从流氓以太网卡中断开。 这可能是LM Flash无法获得BootP magic数据包请求到FTP数据获取请求的原因。

    此致,

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

    您好,

     这很可能是问题的原因。 请将您的设备和PC保留在子网中,看看是否可以解决问题。 另请显示Wireshark捕获。  

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

    好的,谢谢。 我注意到处理器将通过以太网以远程模式编程,但不会重置。 我必须手动重启设备。 我的代码中是否缺少任何代码行(请参阅主线程中的代码)我已选中标记,以便在LM Flash编程器中编程后重置处理器。

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

    您好,

     读取BL_EMAC.c bootloader代码后,它将在TFTP传输完成后重置MCU。 您使用的是基于ROM的引导加载程序还是基于闪存的引导加载程序。  

     另外,为了提醒大家,我将从明天开始到下星期二离开。  

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

    我不确定,但看了ROM_UpdateEMAC(sys_clock);在主开机自检中,似乎是基于Rom的bootloader?

    请指导如何识别其他信息?

    谢谢

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

    您好,Sahil:

     我所指的BL_EMAC.c是基于闪存的引导加载程序。 调用 ROM_UpdateEMAC()时,它正在执行存储在ROM中的引导加载程序。 我想您的应用程序从地址0x0开始,对吗?  我相信,无论使用闪存还是基于ROM的引导加载程序,它都将在最后启动软件重置。我刚刚在 C:\ti\tiviaWare_C_Serie-LM.LM\Examples\boards\EK-tm4c1294xl\boot_demo_emac_rom尝试了示例,0.295 我可以反复点击2.2 闪存编程器中的"程序"程序"按钮,它将一次又一次地更新固件。 这意味着在更新后,处理器将被重置,并开始执行 应用程序代码,通过侦听主机上的魔力来等待下一次更新。 请尝试 boot_demo_emac_rom示例并与您自己的代码进行比较。  

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

    这是我的.cmd文件。

    我认为它是从0x0开始的,其中提到了闪存(RX):源站

    --retain=g_pfnVectors
    
    MEMORY
    {
    FLASH (RX) : origin = 0x00000000, length = 0x00100000
    SRAM (RWX) : origin = 0x20000000, length = 0x00040000
    }
    
    /* The following command line options are set as part of the CCS project. */
    /* If you are building using the command line, or for some reason want to */
    /* define them here, you can uncomment and modify these lines as needed. */
    /* If you are using CCS for building, it is probably better to make any such */
    /* modifications in your CCS project and leave this file alone. */
    /* */
    /* --heap_size=0 */
    /* --stack_size=256 */
    /* --library=rtsv7M4_T_le_eabi.lib */
    
    /* Section allocation in memory */
    
    SECTIONS
    {
    .intvecs: > 0x00000000
    .text : > FLASH
    .const : > FLASH
    .cinit : > FLASH
    .pinit : > FLASH
    .init_array : > FLASH
    
    .vtable : > 0x20000000
    .data : > SRAM
    .bss : > SRAM
    .sysmem : > SRAM
    .stack : > SRAM
    }

    请注意,我的应用程序基于FreeRTOS。 不确定它是否与它有关系?

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

    是的,您的应用程序从0x0开始。 无论这是由于FreeRTOS,我都不知道。 为什么不在重置后插入一些代码来切换引脚? 您的代码是否到达那里?

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

    我正在使用基于ROM的引导加载程序。 所以我不知道你在重置后马上切换一个针脚是什么意思。 我已在关闭设备电源后重启时切换LED指示灯。

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

    如果您不关闭设备电源再打开,会发生什么情况? 如果调试器连接到目标,程序计数器在哪里? 处理器当时在做什么?

    我的意思是在您的应用程序固件中,在启动FreeRTOS计划程序之前,插入一些代码以切换PIN。 固件更新后,如果发生重置,处理器将跳转至重置矢量,然后开始执行代码。 如果您看到您的针脚已切换,则表示它应该已完成重置序列。  

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

    因此,当我通过以太网下载固件时。 LM闪存编程器显示"完成",LED指示灯熄灭,并且在我关闭电源后才切换。之后,我通过以太网读取固件版本,它确实报告了固件的新版本号,这意味着它在重置中的某个位置成功地对设备进行了编程 序列挂起。

    让我在FreeRTOS计划程序之前闪烁一个LED并向您报告。

    通过以太网编程后,我没有使用JTAG中断处理器。  请您指导如何在通过以太网编程时中断处理器并检查PC寄存器?

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

    我能够使用JTAG捕获事件。

    它进入FaultISR()

    static void
    FaultISR(void)
    {
        //
        // Enter an infinite loop.
        //
        while(1)
        {
        }
    }

    它不会在调度程序之前打开LED。  

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

    您需要调试导致故障发生的原因。 下面是一个应用程序注释,展示了该技术。 https://www.ti.com/lit/pdf/spma043

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

    我不理解重启和通过以太网发送重置基本上是同一件事。 为什么在关闭并重新打开电源与发送重置时处理器不会进入FaultISR()。

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

    我也不太确定。  很多时候,故障是由于缺少足够的堆栈大小或您正在访问的外围设备尚未启用。  一些建议:

     1.使用应用程序注释技术来调试导致故障的原因。 是因为堆栈溢出,还是因为您正在访问未启用的外围设备。  

     2.尝试前面提到的示例,确保它工作正常,然后集成到FreeRTOS环境中,再试一次。 您是否可以重复相同的故障。 如果工作正常,请与您自己的代码进行比较。  

     我又要离开了,直到下周二才能回复。  

      

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

    谢谢你Charles。

    我能够捕获NVIC故障STAT。 它引发了指令访问冲突。 我不明白为什么当我们使用基于ROM的引导加载程序进行远程编程时会这样做。  

    请参见下图;

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

    请参阅下文。  

    我认为潜在原因可能是:

    -分支到MPU中未定义或定义为不可执行的区域。

    -由于堆栈内容损坏,返回无效。

    例外向量表中的输入不正确。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ,405.4632万,我不明白为什么在使用ROM启动程序时,它不会远程启动。  [/引述]

    也许尝试使用Wire Shark来确保TFTP服务器从客户端接收到的文件传输已完成。 BTW所有网络广播都在路由器上停止,因此引导加载程序TFTP客户端/服务器将无法通过Internet工作。

    有些版本的TFTP服务器似乎不通过Internet广播文件并将其下载到Windows TFTP客户端。  由于包含源IP地址和目标IP地址,因此它似乎可以通过Internet工作。 https://www.tftp-server.com/tftp-client.html