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.

[参考译文] Linux/EK-TM4C1294XL:Tiva Launchpad 和 Linux 系统之间的 TCP 连接不工作

Guru**** 2473260 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/678475/linux-ek-tm4c1294xl-tcp-connection-between-tiva-launchpad-and-linux-system-not-working

器件型号:EK-TM4C1294XL

工具/软件:Linux

我正在使用连接 Tiva 的 Launchpad (EK-TM4C1294XL)从传感器获取一些 ADC 数据、并使用 TCP 通过以太网将其发送到另一个系统(BeagleBone Black、PC)。 在 Tiva 端、我使用 LwIP 进行连接、在系统(PC)端、使用 python 中的套接字编程。 我在两侧都提供了静态 IP。 我直接连接 Tiva Launchpad 和系统之间的以太网线。  

我的 Tiva 板相关代码如下所示

typedef 结构{
uint32_t pui32IPArray;
uint8_t pui8MACArray[8];
struct pbuf *p;
struct tcp_pcb *tpcb;
struct ip_addr server_ip、local_ip;
}以太网;

以太网 eth0;

void tcp_initialize (void){
IP4_ADDR (&eth0.server_ip、169、254、0、1);
IP4_ADDR (&eth0.local_IP、169、254、0、2);
eth0.tpcb = tcp_new();
tcp_bind (eth0.tpcb、&eth0.local_ip、5002);
tcp_arg (eth0.tpcb、0);
tcp_recv (eth0.tpcb、tcp_recv_callback);
tcp_sent (eth0.tpcb、tcp_seted_callback);
tcp_Nagle_disable (eth0.tpcb);
tcp_connect (eth0.tpcb、&eth0.server_ip、5002、tcp_connected_callback);

int main (void){

lwIPInit (ui32SysClock、pui8MACArray、(169u<<24)|(254u<16)|(0<8)| 2、(255u<24)|(IPu<<16)|(0<8)| 0、(0U<24)|(0U<8)|(0U<8)|静态(IPU<8)|)|(IPU<8)|使用<1)|(IPu<8)|静态(IPu<8)

tcp_initialize();

尽管它在 Windows 系统中运行良好(我在其中使用 Spyder 运行 python)、但它在 Ubuntu 或 Debian 系统中不起作用。 代码不会超出 socket.accept()。 PC 端的 Python 代码如下所示。 Ubuntu 系统上的防火墙已禁用。

导入套接字
S = socket.socket (socket.AF_iNet、sock_stream)

S.bind (('169.254.0.1'、5002))
S.Listen(1)
连接器、addr = s.accept ()

打印“连接地址:”,地址

因此它卡在 s.Accept()上,无法连接。 如果我需要做更多的事情来将其连接到 Linux 而不是 Windows、请帮助我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    让我尝试理解。 Tiva 板可与网络上的 Windows PC 配合使用。 但您在 Tiva 板和 Linux 机器之间遇到了问题。 这是正确的理解吗?

    您能否从 Linux 计算机 ping Tiva 板? 它说什么?

    您的 Linux 计算机是否与 Tiva 板位于同一网络(同一子网)上?

    请使用 Wireshark 捕获网络流量、并比较 Windows PC 与 Linux 计算机。

    如果您使用 DHCP 而不是静态地址、该怎么办? 您看到了什么结果?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    不可以、我不是将 Tiva 板连接到任何网络或路由器、而是通过以太网电缆将 Linux 系统直接连接到板以发送和接收数据。 我在 Tiva 板中刷写了我的代码、只需按下复位按钮即可运行代码并为电路板供电、从而为5V 引脚提供外部电源。 不同之处在于、当我尝试与 Windows 系统进行相同的连接时、它可以正常工作。   

    是的、我可以从 Linux 终端 ping Tiva 板。 它会返回、直到我使用 Ctrl+C 终止它

    是的、我对 Linux 机器和 Tiva 板都设置了相同的子网。

      将 Tiva 板连接到 BeagleBone Black (Debian O.S)时、我使用了 Wireshark。 在 BeagleBone Black 上安装了 Wireshark、它表明德州仪器(TI)询问的 IP 具有相同的网络掩码、但 IP 与我为 BeagleBone 设置的 IP 不同。 这是一个来自德州仪器源的 ARP 数据包、我觉得它是 Tiva 板。 除此之外,没有显示任何相关内容。

    对于 Windows Wireshark,TCP 数据包在两个 IP (Windows 和 Tiva 板)之间交替显示为源和目标。 它显示了令人满意的结果。

    我没有尝试使用 DHCP。 那么、我要将 Tiva 板和 Linux 机器都保留在 DHCP 上还是只保留在 Tiva 板上?

    此致、

    Sourav

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否尝试使用 DHCP 地址将 Tiva 板和 Linux 计算机都放在 LAN 上、然后再尝试静态地址?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我尝试使用 DHCP、但它不起作用。 我可以从 Linux 系统 ping Tiva launchpad、但套接字程序不会超出 socket.Accept()。

    此致、

    Sourav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Sourav:
    我不知道您的 Linux 计算机是否存在网络问题。 如果 Tiva 板与 Windows PC 一起工作、那么 Tiva 板应该在硬件和软件两方面工作。 我不熟悉 Linux 方面。 不确定要推荐什么。 您能否显示 Tiva<->Windows PC 和 Tiva<->Linux 机器的 Wireshark 捕获?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    很抱歉、回复晚了、但问题昨天已解决。 因此,根据我的代码,我在 lwIPInit()之后调用 tcp_initial(),如我的问题中所示。 每次断开有线连接大约1秒、然后再次重新连接。 这种情况发生在 Linux 机器中、而不是 Windows 中。 我不知道为什么。
    因此,我将 lwIPInit()行中的 tcp_initialize()延迟了一个位,现在它运行正常。

    此致、
    Sourav Bhattacharya