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 的 TCP/UDP

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/584136/ek-tm4c1294xl-tcp-udp-using-lwip

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

大家好、

我最近开始了一个项目、在该项目中、我需要通过以太网将 TM4C1294XL 板连接到 PC。 我没有网络背景、因此我很难理解编写代码使其正常工作的方法。 我已经阅读过有关网络的内容、并且还收集了该接口的所有必要细节、但我无法理解如何将它们整合在一起。

我的应用是:我想使用 TCP/UDP 协议通过以太网将 TM4C1294XL 与我的 PC 相连、我只需要发送像数字这样的原始数据、我只需要在 TeraTerm 上的 PC 上显示这些数据、或者在 PC 上的 HyperTerminal 类型的 Docklight 上显示这些数据。

应用程序对大家来说可能很简单、但我以前从未这么做过、所以我在将所有应用程序组合在一起时发现了一些困难。 我们将感谢您的任何帮助。

我是第一次在论坛上发帖、因此如果需要其他信息、请告知我。

注意:我已经阅读了 LwIP 原始 API 文档、因此我知道所有函数都可以正常工作、我所需要的只是一个"工作代码或示例代码"、我可以使用它来了解如何将所有内容相结合、 我也了解了 Tiva 软件系列中提供的示例、但它们都是基于 HTTP 服务器客户端的、不符合我的目的。 请帮帮我。

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

    您必须在 PC 上安装 Code Composer Studio 6.x 或更高版本、然后使用 View 菜单上的 Resource Explorer 搜索项目示例。 其中许多设备需要安装 Windows 虚拟 COM 端口 USB 端口驱动程序、以便启动板上的 ICDI 集成 UART 可以将 TM4C 中的数据发送到超级终端。 Windows CDM 驱动程序位于 Tivaware 库中、REX 将安装到桌面 c:\ti 文件夹中。

    这样您就可以开始使用正确的路径。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可能误解了我的问题。

    我想通过以太网而不是 UART 实现连接。

    有了 UART、操作相当简单、但我没有在以太网上完成、所以我只需要一个示例代码来演示如何执行(如果有)。  

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

    您好、Jay、

    我了解您 的要求、例如以太网 TCP/UDP http 等。  您还 表示 需要 将数据输出到超级终端、这需要通过 TM4C UART 访问虚拟 COM 端口。

    REX 云门户访问中的许多示例都 预先编写了类似代码、例如 LWIP 天气和物联网示例。 您可以通过这些示例构建项目、并学习编程、使用新固件写入闪存等。

    无论您是需要安装 Code Composer Studio v6.x-v7.x、 还是 可能忘记您的想法。  CCS v7 具有一些新功能、例如 为  您的项目制作定制板所需的云链接 GUI 编写器、以便用户控件访问 TM4C LaunchPad。

    http://processors.wiki.ti.com/index.php/Download_CCS

     

       

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

    [引用用户="Jay Shah54"]我只需要发送原始数据,如数字,我只需要在 TeraTerm 上的 PC 上或 PC 上的 Docklight 上显示。[/引用]

    因此  您的 Docklight 必须 准备好以太网吗?  即使如此、仍需要安装 CCS 才能将数据发送到 PC。

    我们 修改了 Tivaware USB 批量驱动程序示例、以 高速将数据从 EK 发送到 Windows。 Windows 虚拟 USB 批量设备客户端是一个 VS2000项目、源代码易于修改、仅 在回显模式下接收数据、e 添加到启动中。  批量 USB 的 EK 部分 是 CCS 项目、但 REX 云中有 B2B 以太网项目 、可根据需要进行修改。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您的回复。
    实际上、我的电路板和 PC 只能通过以太网(无 UART)进行通信。 因此、我想将文本数据与 PC 进行通信、作为电路板的命令、接收到电路板后、电路板将执行一些预定义的指令集(我已经使用 UART 完成并测试过)、执行预定义的任务后、电路板将发回处理过的数据。 所有示例都更多地用于基于 HTTP 服务器客户端的、这不符合我的目的、因为信息交换将使用 Docklight 或 LabView 进行。
    是的、Docklight 配置为通过以太网接收数据、但当我连接 Tiva 板时、它会显示没有连接。 我可能会弄清楚这个部分。 我只需要一些有关 PC 和我的板之间通信的帮助。

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

    [引用用户="Jay Shah54"]我的意思是我的主板和 PC 只能通过以太网进行通信(无 UART)。[/quot]

    以太网传输是较慢数据包 TX/RX 的一种超限、除非为 数据(如 Telnet TCP 23 )提供 Windows GUI 服务、并使用 UDP 23  命令。 当然 、您的 PC 有 一个 USB 端口 、更易于编码 以 高达250kbps 的速率处理数据、这不会降低传输速度。  从未在连接的任一端看到 USB 溢出缓冲器。 在 一秒内计数32548个数据包。

    telnet 示例是可能与您搜索的代码接近的唯一其它代码。  注意  :小数据包计数使用 USB 时数据速率较慢。它是通用串行 的,每台计算机都有一 个 USB 端口,这与 TCP 不同,TCP 要求在 PC 附近放置一个交换机。  这可能适合研究、但由于 USB 设备传输已成为后期的冠军、因此在实际的机器领域中不会进行实践。

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

    尊敬的 B.P.:

    之前我们"喜欢"您对海报的回应。 我们支持您选择以太网 USB 的方向。

    "批量 USB 示例"中的"kicker"就是这样一个事实:"仅主机可以启动传输!" ("回波"功能在开发过程中证明是有用的、但对于"真实"应用来说(超出)是浪费。

    您的帖子(此主题:3月28日、09:17)注意到:"REX 云中的 B2B 以太网项目"。  该项目是否使 TM4C 能够(同时)发起和响应来自"主机"(无论是 PC 还是其他 MCU) 的请求、再减去任何"回波"?

    非常感谢您的时间/关注。

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

    就像明智的!!!

    目标(TM4C)也从 PC 主机接收 USB 数据包。 示例 MS Visual Studio Bulk 客户端项目易于修改、以实现更多功能。 在控制台(上面发布的对话框)处理用户击键的示例、将相同的数据发送到目标、目标将其回传到主机。 批量客户端的一些更改可以轻松地将其转换为目标的 GUI。 对 C++编程背景较少的个人来说、改变现有代码剪切会更容易。

    我们使用批量客户端将数据从目标发送到主机并禁用 RXD 事件标志、尽管一旦您在 Windows 中启动串行 CDM 连接、它是一种双向串行传输。 编程器只需从目标 RXD 缓冲区事件处理程序中获取数据、并对其进行处理、使其成为目标的命令处理器。 因此、请在(USB_dev_bulk.c)中移回回部分并修改 VS bulk 主机程序、然后您会看到一个排序的命令 GUI。

    //
    //
    //处理与传输通道(到
    // USB 主机的数据)相关的批量驱动程序通知。
    //
    //\param pvCBData 是此通道的客户端提供的回调指针。
    //\param ulEvent 标识我们收到通知的事件。
    //\param ulMsgValue 是特定于事件的值。
    //\param pvMsgData 是特定于事件的指针。
    //
    //此函数由批量驱动程序调用,以通知我们
    与传输数据通道(向
    USB 主机传输//数据的输入通道)操作相关的任何事件//。
    //
    //返回值是特定于事件的。
    ////
    *****************
    uint32_t
    TxHandler (void *pvCBData、uint32_t ui32Event、uint32_t ui32MsgValue、
    void *pvMsgData)
    {
    //
    //我们不需要对任何发送事件进行任何响应
    //。 我们所做的就是更新传输计数器。
    //
    if (ui32Event == USB_EVENT_TX_COMPLETE)
    {
    
    G_ui32TxCount += ui32MsgValue;
    }
    退货(0);
    }
    
    //*********
    //
    //处理与接收通道相关的批量驱动程序通知(
    来自// USB 主机的数据)。
    //
    //\param pvCBData 是此通道的客户端提供的回调指针。
    //\param ui32event 标识我们收到通知的事件。
    //\param ui32MsgValue 是特定于事件的值。
    //\param pvMsgData 是特定于事件的指针。
    //
    //此函数由批量驱动程序调用,用于通知与
    接收数据通道(执行
    来自 USB 主机的//数据的输出通道)操作相关的任何事件//。
    //
    //返回值是特定于事件的。
    ////
    *****************
    uint32_t
    RxHandler (void *pvCBData、uint32_t ui32Event、uint32_t ui32MsgValue、
    void *pvMsgData)
    {
    //
    //我们要发送哪个事件?
    //
    switch (ui32event)
    {
    //
    //我们已连接到主机,现在可以进行通信。
    //
    案例 USB_EVENT_Connected:
    {
    G_bUSBConfigured = true;
    G_ui32Flags |= COMMAND_STATUS_UPDATE;
    
    //
    //刷新缓冲区。
    //
    USBBufferFlush (&g_sTxBuffer);
    USBBufferFlush (&g_sRxBuffer);
    
    中断;
    }
    
    //
    //主机已断开连接。
    //
    案例 USB_EVENT_DISCONNECTED:
    {
    
    G_bUSBConfigured = false;
    G_ui32Flags |= COMMAND_STATUS_UPDATE;
    
    //
    //刷新缓冲区。
    //
    USBBufferFlush (&g_sTxBuffer);
    USBBufferFlush (&g_sRxBuffer);
    
    中断;
    }
    
    //
    //已收到新的数据包。
    //
    案例 USB_EVENT_RX_Available:
    {
    
    //
    //从回调数据获取指向我们的实例数据的指针
    //参数。
    //
    psDevice =(tUSBDBulkDevice *) pvCBData;
    
    /*永远不能从客户端返回数据*/
    USBBufferFlush (&g_sRxBuffer);
    
    中断;
    
    //
    //读取新数据包并将其回传到主机。
    //
    //return (EchoNewDataToHost (psDevice、pvMsgData、ui32MsgValue));
    }
    
    //
    //忽略暂挂并立即恢复。
    //
    案例 USB_EVENT_SUSPEND:
    案例 USB_EVENT_RESUME:
    中断;
    
    //
    //忽略所有其它事件并返回0。
    //
    默认值:
    中断;
    }
    
    返回(0);
    }
    

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

    谢谢-谢谢。 因此、不要劫持海报的线程-您是否可以描述"如何甚至测量" 250kbps 的传输速度?   假设速度已正确测量/有效-这可能会诱使海报遵循您的"使用 USB"方向。

    在海报的"高速"愿望目标中、我们注意到 LX4F 和 TM4C123 (两者)支持高达5Mbps 的 UART 波特率!   和- UART 可能会驱动到 RS-422/485 (平衡、差分)收发器中-尤其是适应高"速度和距离"-远远超过"单端" USB 电缆获得的数据。  如果"速度单独"是首要问题-这种(淘汰的) UART 可能会"从灰烬中上升"、则需要进一步考虑...

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

    [引用 USER="CB1_MOBILE "]如果"速度单独"是首要问题-此(已淘汰的) UART 可能"从灰烬中上升"-需要进一步考虑...[/引述]

    也许 这是一个有效的点、因为大多数以太网 Tivaware 示例似乎都涉及 到 UART 、而 USB 电缆的销售长度为12英尺或更长。

    [引用 USER="CB1_MOBILE "]“如何测量或即使测量了”250kbps 的传输速度? [/报价]

    客户端 软件测试 USB 回显速度、但谁可以键入除 AI 机器人以外的其他快速命令。  数据的正电子大脑可能 会以 这样的速度产生一个组织性的二维条 、即固态眼睛和手指处理这种快速的命令 。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果应用程序是"Command-Response"(传递的字符数非常有限)-则"Need for Speed"(需要速度)可能会被高估。

    当数据传输超过几百个字符时-无需使用(必要的) USB "内务处理/瓶颈"(Windows 要求)可能会使低功用 UART 更加可取。

    如果目标是非 PC - MCU 到 MCU、甚至是"MCU 多分支"- UART 在通信食品链中的上升甚至更高。

    我们发现的最长 USB (pro)电缆为25英尺(可能存在更长的电缆)、但 RS422/485在波特率为900Kbps +且具有适当的 CAT6 (我认为)电缆的情况下可超过300米。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需提及 USB、即 CCSv7中的 GUI Composer 通过云支持 LaunchPad ICDI/JTAG、如果安装轻量级 GCv2运行时、GUI 可在本地 PC 上运行。 GCV2云安装程序为桌面用户执行大部分操作、他们安装返回到目标 LaunchPad 的链接以运行 GUI。

    如果没有高速、示波器小工具看起来很慢、并且尚不支持以太网。 被告知、在不需要 JTAG 端口的情况下、应在不远的将来保持开放状态直接支持 UART/USB 和以太网。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="BP101"]……在不需要 JTAG 端口的情况下,几乎未来会直接支持 UART/USB 和以太网。[/quot]

    我们被告知复活节兔子已经完全雪橇了(还是圣诞老人?)   我希望这种"直接支持"能够在(两者)一个可以理解且负担得起的保健计划之后实现。   (请记住-如果您喜欢 Docter/JTAG/SWD -您可以保留"他/她/她"。)  (也许...)