主题中讨论的其他器件:EK-TM4C1294XL、 TM4C129DNCPDT
您好!
我在项目中使用 EK-TM4C1294XL 评估板。 我已经使用使用使用 lwip 库的 Tivaware 库示例实现了基于以太网的项目。 现在 、对于我的项目、我想 使用以太网远程更新固件。 请有人建议我如何实施。
是否有任何示例代码或文档、以便我可以在我的应用中引用这些代码或文档。
谢谢你。
此致、
Balaji TS
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 评估板。 我已经使用使用使用 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 闪存编程器显示正在尝试连接但未连接。
我的实现方式如下。
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
如果您要直接连接到 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"作为擦除选项。
您好!
我认为您需要进行的更改是 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
这是我强烈推荐的。 在修改外部 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
我是否需要更改 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 时、自己在这一领域没有太多的专业知识。 很抱歉缺少指导。