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.

[参考译文] CC3135MOD:Simplelink 套接字在多次打开/关闭操作后不发送任何数据

Guru**** 2770505 points

Other Parts Discussed in Thread: CC3135MOD, CC3135

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1057154/cc3135mod-simplelink-socket-do-not-send-any-data-after-multiple-open-close-action

器件型号:CC3135MOD
主题中讨论的其他器件: CC3135

大家好、

我在定制板上使用 CC3135MOD 模块、并使用 simplelink 源文件来管理该模块。

我使用多达4个套接字:2个套接字(一个 TCP 和一个 UDP)始终处于打开状态(当模块连接到 WiFi 网络时)、而另外2个套接字(UDP)可根据请求打开和关闭。

当最后两个套接字打开时、我的应用程序开始通过它们发送数据。

我遇到的情况是、在执行多次打开和关闭操作(大约10次打开)后、当我发送数据缓冲区时、我无法在网络上看到它(通过 Wireshark 检查)、但发送功能不会返回任何错误!

我的应用程序认为一切正常、并会继续定期调用 SEND 函数、然后在随机数段时间(从几秒到几分钟)后、我可以在网络上再次看到数据。

流程如下:

-我打开 TCP 套接字:sl_open ->返回 SD = 0

- PC 连接到插座->连接 SD = 1

-通过此套接字传输 TX/Rx 数据->确定

-我打开第一个 UDP 套接字: sl_open ->返回 SD = 3

-通过此套接字传输 TX/Rx 数据->确定

-我打开第二个 UDP 套接字: sl_open ->返回 SD = 4

-通过此套接字发送数据->确定

-关闭第二个 UDP 套接字

-我重新打开 第二 个 UDP 套接字: sl_open ->返回 SD = 5

-通过此套接字发送数据->确定

-关闭第二个 UDP 套接字

-.

-我重新打开 第二 个 UDP 套接字: sl_open ->返回 SD = 13 (或14或...)

-通过此套接字发送数据-> KO!

有人可以帮助我了解正在发生的情况吗?

如果您需要任何其他信息或测试、请告诉我。

谢谢大家

Arianna

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

    编辑:sl_Socket、不是 sl_open、抱歉

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

    您好、Arianna、

    我将在本周跟进。

    谢谢、
    Jacob

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

    您好、Arianna、

    是否使用 sl_close 关闭套接字? 从 sl_close 实际关闭套接字可能会有延迟。 是否始终是 UDP 套接字不发送数据、还是 TCP 套接字也会发生这种情况?  

    谢谢、
    Jacob

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

    您好、Jacob、

    感谢你的答复。

    是的、我使用 sl_close 来关闭套接字。 我必须期待什么样的延迟? 秒还是分钟? 是否有任何方法可以知道何时完成?

    TCP 套接字似乎没有问题、但我并没有真正关闭它、因为我只关闭连接(我调用 sl_close、SD 从 sl_accept 返回)。

    我还有另一个 UDP 套接字、在发送任何数据之前接收数据、在执行几次打开/关闭操作后、这似乎一直在正常工作。 这似乎是一种非常奇怪的行为!

    感谢你的帮助!

    Arianna

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

    Jacob、我进行了以下测试:
    如果 PC 在打开插槽后向器件发送数据、则器件即使在打开/关闭多个插槽后也能正确发送数据!

    您能解释一下吗?

    编辑:

    添加一些(可能)有用信息:

    器件从 TCP 套接字接收打开 UDP 套接字的请求、并指示端口和发送数据的地址、而器件应开始通过该套接字发送数据。

    在我找到的一个示例中、我删除了这段代码:

        /* Even though this part of the function runs as UDP transmitter(tx),
         * 'Sl_RecvFrom' is invoked here
         * in order to fetch the peer's IP address. This information is
         * copied to 'csa'.
         */
        sl_RecvFrom(s->socket, rec_buff, 16, 0, s->csa, (SlSocklen_t*)&addrSize);

    我只是在创建套接字后将对等设备的 IP 地址和端口复制到"CSA"结构中。

    是否有更好的方法来管理它?

    我是否缺少一些初始化步骤? 这似乎很奇怪、因为插座通常正常工作、或者几分钟后它再次开始工作。

    接收数据似乎正在"解锁"模块中的内容。

    我正在使用此版本:

    NWP 版本= 4.8.0.8
    FW 版本= 3.7.0.1
    PHY 版本= 3.1.0.26

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

    你好、雅各、对我有什么新闻吗?

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

    您好、Arianna、

    很抱歉我的回复延迟了。 您能否按照 此主题中的以下流程 打开和关闭插槽以查看此问题是否仍然存在?

    打开 TCP 端口:

    1. tcp_handle = sl_Socket (sl_AF_iNet、sl_sock_stream、0)
    2. sl_Bind(TCP_Handle,… )
    3. sl_listen (tcp_handle、...)
    4. comms_handle = sl_accept (tcp_handle,...) -阻止,直到 PC 建立连接  

    此外、  当您希望接收数据但却没有收到任何数据时、您是否可以获取 NWP 日志(第20节)?

    谢谢、
    Jacob

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

    您好、Jacob、我的问题是 UDP 套接字、而不是 TCP!
    因此、我的过程是:

    1. UDP_Handle = simplelink_socket_create (sl_AF_iNet、sl_sock_DGRAM、0)
    2. sl_Bind( UDP_Handle,)  
    3. sl_Sendto (udp_handle、...、)->指定 Rx 地址和 Rx 端口
    4. sl_close (UDP_Handle)
    5. (笑声)
    6. 从第1点开始重复

    我无法轻松获取 NWP 日志、因为我不使用评估板、也无法轻松访问日志 PIN。 此外、我不了解如何配置日志、我在库中找不到启用函数!

    谢谢、

    Arianna

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

    您好、Arianna、

    您无需在主机 MCU 上启用任何功能。 您需要将引脚连接到 UART RX 并在终端软件中正确设置波特率。

    BTW... 您的主机 MCU 是什么?

    1月

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

    您好、Jan、

    感谢你的答复。

    我要连接哪个 CC3135引脚? UART1_TX?

    我的主机 MCU 是 STM32H743。

    谢谢、

    再见

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

    您好!

    我认为正确的引脚是 CC3135MOD 的引脚52、名为 TEST_62。

    捕获 NWP 日志是确定案例发生情况的关键。 但是、如果我想、我会怀疑您的主机驱动程序移植层。

    BTW... 您能否更新到器件内部的最新 ServicePack (CC32xx SDK 内部提供版本4.12.0.1)。

    1月

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

    您好、Arianna、

    请遵循上述 Jan 的指导、获取引脚52 (TEST_62)上的 NWP 日志。 CC3135MOD 是通过 SPI 还是 UART 与 MCU 通信? 如果 您还没有看到、我们提供了一份有关在 STM32上使用 SPI 移植主机驱动程序的指南。

    谢谢、
    Jacob

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

    您好、Jacob 和 Jan、

    感谢您的指示! 我终于有时间做测试了、希望日志可以!
    e2e.ti.com/.../8345.putty.log

    正如我说过的、我打开了一个 TCP 套接字和一个 UDP 套接字、而我打开并关闭了另一个 UDP 套接字的几次、一旦打开、就开始发送数据。

    重复第10次时、器件不会发出任何数据! 最后、我还关闭了其他插座。

    请看一下、如果您能看到我的错误、请告诉我!

    回复 Jacob:CC3135MOD 通过 SPI 与 MCU 通信。 我按照指南操作、看不到任何错误、也看不到通信错误。

    感谢你的帮助、

    谢谢

    Arianna

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

    您好、Arianna、

    感谢您的日志。 我将检查这个、看看我是否可以正确查看它。 我很快就会跟进、如果没有、请随时对此主题做出回应。

    谢谢、

    Jacob

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

    您好、Arianna、

    我在日志中看到的唯一有用信息是内存分配失败。  您是否正在使用最新的 SDK 和服务包?  

    我在 SDK 中看不到此函数、这是您要创建套接字的实际函数吗?

    UDP_Handle = simplelink_socket_create (sl_AF_iNet、sl_sock_DGRAM、0)

    每次再次打开 UDP 套接字时是否始终运行此命令? 也许您在调用 sl_close 后使用同一句柄创建多个 UDP 套接字、而不删除它们。  

    如果您能够获取 Wi-Fi 空中交通日志、也会有所帮助。

    谢谢、
    Jacob

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

    您好、Jacob、感谢您的反馈!
    对于版本:

    [引用 userid="378516" URL"~/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1057154/cc3135mod-simplelink-socket-do-not-send-any-data-after-multiple-open-close-action/3925811 #3925811"]

    我正在使用此版本:

    NWP 版本= 4.8.0.8
    FW 版本= 3.7.0.1
    PHY 版本= 3.1.0.26

    [/报价]

    SDK 版本是否为: sl_driver_version  "3.0.1.68"?
    是的、我使用此函数创建套接字

    [引用 userid="456020" URL"~/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1057154/cc3135mod-simplelink-socket-do-not-send-any-data-after-multiple-open-close-action/3977725 #3977725"]UDP_Handle = simplelink_socket_create (sl_AF_iNet、sl_sock_DGRAM、0)

    我每次打开套接字时都会运行它、每次我都会得到不同的句柄(如前面的消息中所述)。

    如何在调用 sl_close 后删除套接字句柄?

    谢谢!

    Arianna

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

    您好、Arianna、

    您可以在已安装 SDK 的发行说明中查看 SDK 版本。

    我在  SimpleLink SDK WiFi 插件中找不到 simplelink_socket_create 函数。 您确定使用的是 SDK 吗? 如果是、您能告诉我哪个文件具有此函数的定义吗?

    谢谢、
    Jacob

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

    您好、Jacob、

    我认为我们正在使用此 SDK: SIMPLELINK-CC32XX-SDK_4.30.00.06 | TI.com ,但我们使用的函数已从以下项目中获得(然后调整): zephyr/drivers/wi/simplelink at main·zephirproject-rtos/Zephyr·GitHub。
    BTW、这是创建套接字的函数的实现、因此 SDK 函数为 sl_Socket。

    int simplelink_socket_create(int family, int type, int sl_proto, uint8_t sec_method)
    {
        int sd;
        int retval = 0;
    
        sd = sl_Socket(family, type, sl_proto);
        if (sd >= 0) 
        {
            if (sl_proto == SL_SEC_SOCKET) 
            {
                /* Now, set specific TLS version via setsockopt(): */
                retval = sl_SetSockOpt(sd, SL_SOL_SOCKET, SL_SO_SECMETHOD, &sec_method, sizeof(sec_method));
                if (retval < 0) 
                {
                    (void)sl_Close(sd);
                    return retval;
                }
            }
        }
        return sd;
    }

    谢谢、

    再见

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

    您好、Arianna、

    我将在明天尝试提供一些见解。

    谢谢、
    Jacob

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

    您好、Arianna、

    sl_Socket 应该是用于调用以打开一个套接字的正确函数。  

    一些后续问题:

    • 您是否在打开和关闭 UDP 套接字之间添加了任何延迟? 如果没有、请在 关闭和打开套接字之间添加~10ms 的延迟。
    • 您能否在 TI LaunchPad 而非 STM32主机上重现此问题?

    谢谢、
    Jacob

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

    您好、Jacob、

    -是用户从 PC 接口打开/关闭插槽,因此我认为打开和关闭操作之间会有几秒钟的时间;

    不、我们没有 LaunchPad

    此致、

    Arianna

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

    您好、Arianna、

    我的假设是、您不会重新打开相同的 UDP 套接字;而是在打开和关闭时创建10个新的 UDP 套接字。 最后、我想您会发现设备上的 UDP 套接字已用完。 在 CCS 中进行调试时、您能否检查分配 sl_Socket ()的变量的存储器地址?  

    您能否尝试在 CC32XX SDK 中的 network_terminal 演示中重现此问题?

    谢谢、
    Jacob