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.

[参考译文] CC1352P:ti154stack有时发送空帧

Guru**** 2455100 points
Other Parts Discussed in Thread: CC1352P

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1088516/cc1352p-ti154stack-sometimes-send-empty-frame

部件号:CC1352P

您好,

我在发送下行链路帧的收集器上遇到问题:

协议栈版本为simplelink_CC13xx_CC26XX_SDK_5_30_01_01,

我基于模板项目“C:\ti\simplelink_cc13xx_cc26xx_SDK_5_30_01\examples\RTOS\CC1352P_2_LAUNCHXL\ti154stack\collector_2_4g”,创建收集器项目

大约有30个传感器与收集器配合工作, 通信过程如下:

1.每隔10秒,每个传感器都会向收集器发送一个MAC数据帧。

2.发送MAC数据后,传感器将在1秒内向轮询收集器发送8个MAC数据请求,以便接收收集器应答的MAC数据帧。

问题在于 收集器发送应答  MAC数据帧后 ,有时收集器发送空帧(无有效负载的帧),

Sniffer日志的屏幕截图如下所示

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

    您好,Tenix,

    是否可以发布嗅探器日志文件?

    您能否解释这些日志中的收集器是哪个短地址? 您已构建框架的空数据包的源短地址为0x0001。

    谢谢,

    Marie H

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

    您好 ,Marie H,

    是,短地址0x0001是collector,

     0x4D00_CuBX Open Using ubiqua,  

     0x4D00_PCAP使用Wireshark打开,  

    (两个文件中的内容相同,只是格式不同)

     随着Sniffer的记录,在运行一段时间后,发送大量空数据帧:

    请参阅包装:  

     封装332:传感器发送数据,  

     软件包353:传感器发送数据请求轮询收集器,  

     软件包356:收集器将数据发送到传感器(有效负载len 23),  

     包382:传感器发送数据请求轮询收集器,  

     软件包357:收集器将空数据发送至传感器(无有效负载),  

     软件包395:传感器发送数据请求轮询收集器,  

     包400:收集器将空数据发送到传感器(无有效负载),  

     软件包307:传感器发送数据请求轮询收集器,  

     包409:收集器将空数据发送到传感器(无有效负载),  

    此致!

    e2e.ti.com/.../0x4D00.zip

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

    您好,Tenix,

    您使用什么软件来捕获这些数据包? 当我在Wireshark中打开.pcap文件时,所有数据包都有[格式错误的数据包]或错误的FCS异常。 此外,大多数数据包缺少源和数据长度,因此很难看到发生了什么。

    在发生这种情况时,您能否检查收集器Tx缓冲区,并在发送数据包之前检查数据包是否有空有效负载?

    谢谢,

    Marie H

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

    您好 ,Marie H,

    pcap文件是从ubiqua .CuBX文件转换而来的,  下次发生这种情况时,我将使用Wireshark捕获软件包并为您提供一个新文件,该文件应在3天内提供,

    调用函数ApiMac_mcpsDataReq (&dataReq)时 ,dataReq.MSDU.p指向静态缓冲区, dataReq.MSDU.len不能小于2,  

    ApiMac_mcpsDataReq函数还可以检查MSDU.len和MSDU.p是否有效。因此应用层可能无法成功向MAC Tx缓冲区发送空数据包。  

    是否有办法跟踪MAC层中的TX缓冲区是否为空?

    此致!

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

    您好,Tenix,

     ApiMac_mcpsDataReq获取指向 ApiMac_mcpsDataReq_t结构的指针。 数据包的内容(此指针的内容:dataReq.MSDU.p)被堆栈复制到新的缓冲区中。 复制前不检查长度或内容。 因此,您也许可以尝试监视 dataReq.MSDU.p和 dataReq.MSDU.len,并检查这些是否在任何时候被擦除?

    谢谢,

    Marie H

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

    您好 ,Marie H,

    正常工作时,传感器将每10秒发送一次数据,收集器将发送回复(间接传输)。

    出现问题时,收集器发送应答帧后,每次传感器轮询收集器都会收到帧暂挂=1的ACK 并收到空数据包

    因此,我认为问题可能 是帧待发和Tx缓冲区之间的关系变得异常,这是一个可能的原因,  在收集器发送响应帧(间接传输)后,Tx缓冲区内存被释放, 但是帧暂挂资源不会释放,因此每次传感器轮询时,都将发送空帧。

    此致!

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

    您好 ,Marie H,

    请参阅包装:  

     封装3645:传感器发送数据,  

     软件包3653:传感器发送数据请求轮询收集器,  

     软件包3657:收集器将数据发送至传感器(有效负载len 23),  

     封装3687:收集器将空数据发送到传感器(无有效负载),  

     封装3691:传感器发送数据请求轮询收集器,  

     包3698:收集器将空数据发送到传感器(无有效负载),   

     封装3195~3235: 收集器将空数据发送至传感器(无有效负载),  

    e2e.ti.com/.../2022.0331万_5F00_1544.zip</s>1544.

    此致!

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

    您好,

    您使用的是信标模式,非信标模式还是跳频模式?  

    发生这种情况时,您的收集器是否连接到多个传感器?

    收集器中的数据是否最终发送?还是收集器在发生这种情况后仅发送空数据包?

    谢谢,

    Marie H

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

    您好 ,Marie H,

    I‘m将堆栈用作非信标和无跳频。

    此致!

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

    您好,Tenix,

    1. 发生这种情况时,您的收集器是否连接到多个传感器?

    2.收集器中的数据是否最终发送,或者收集器是否仅在发生这种情况后发送空数据包?

    谢谢,

    Marie H

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

    您好 ,Marie H,

    1. 发生这种情况时,您的收集器是否连接到多个传感器?

      收集器在这种情况下连接到大约30个传感器;

    2.收集器中的数据是否最终发送,或者收集器是否仅在发生这种情况后发送空数据包?

      发生这种情况后,收集器中的数据最终也会发送成功;  

    此致!

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

    您好,Tenix,

    我需要就您的案例咨询软件设计人员。  

    发生这种情况的频率如何?

    您能否为我提供说明,让我再现您看到的内容?

    谢谢,

    Marie H

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

    您好 ,Marie H,

    它有时 需要几个小时才能出现,有时需要几天才能出现,一旦出现,它就会一直持续到崩溃。

     要复制 它:

    收集器可按以下方式配置:

    1.非信标和  无跳频模式;

    2. secLevel = ApiMac_secLevel_none;

    3. Mac_CFG_TX_DATA_MAX      20.

       Mac_CFG_TX_MAX        30.

       Mac_CFG_RX_MAX        30.

       Mac_CFG_APP_PENDGE_QUEUE  为FALSE

    4. Max_device_table_entries =50

       CONFIG_PHY_ID           APIMAC_250kbps_IEEE-PHY_0

       CONFIG_POLLING_INTERVAL      2000年

      MIN_Persistence_Time_USEC 100万

    #define indirial_persistent_time (MAX (2 * 1000 * config_polling_interval / 2),min_persistence_time_USEC)/\
    (base_super_frame_duration *\
    SYMBOL_DURATION 250_kbps))

    传感器可配置为:Ω 以下

    1. CONFIG_PHY_ID           APIMAC_250kbps_IEEE-PHY_0

       CONFIG_RX_ON_IDLE         错误

       config_secure           错误

     

    工作流程如下:

    1.约有30个传感器或以上;

    2.传感器加入网络后,传感器每10秒向收集器发送一个数据帧A (帧长度约为40字节,发送调用函数ApiMac_mcpsDataReq());  

    3.发送帧A后,传感器 每100 毫秒发送ApiMac_mlmePollReq()到轮询收集器, 发送10次。  

    4.当收集器收到帧A时,将帧B ( 帧长度约为30字节,间接传输)回复到sensor。

    此致!

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

    您好,Tenix,

    我咨询了软件开发人员,这是预料之中的行为。

    有时发生这种情况的原因是,在某些情况下,我们使用自动ACK作为ACK数据包。 在此帧中,待处理位将始终为1,即使收集器没有待处理的数据也是如此。 这意味着传感器将从收集器收到数据包。 因此,我们必须向传感器发送一个(空)数据包。

    谢谢,

    Marie H

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

    您好 ,Marie H,

    感谢您的关注,咨询和回答。

    是否有任何方法可以阻止收集器发送空数据包?

    例如,禁用自动ACK:

       如何关闭自动确认?

      关闭自动ACK有何影响?

      禁用ATUO ACK后,当收集器需要将数据发送到传感器?时,如何将帧“挂起”设置为1

    我需要找到解决此问题的方法,因为我们已经基于15.4 堆栈生产了3000多个标签和50个收集器。& CC1352P 平台。

    是否可以在15.4 堆栈的基础上解决此问题?

    此致!

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

    您好,Tenix,

    抱歉,不会,我们已尝试避免它,但在某些情况下,我们必须使用自动ACK。  

    在大多数情况下,一个空数据帧不应导致问题。  

    谢谢,

    Marie H

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

    您好,Marie H,

    在我的情况下,收集器运行很长时间,它发送了太多空帧;

    这影响了网络的正常运行,  将增加收集器的负担,使网络信道更繁忙,增加传感器的功耗。

    启用自动ACK时,应用层是否有方法知道正在使用自动ACK?  

    您能否描述需要自动ACK的情况? 我想优化交互策略,避免 设备陷入这种情况。  

    此致!

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

    您好,Tenix,

    我将与SW团队讨论,但我认为没有任何方法可以更改实施。

    谢谢,

    Marie H

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

    您好,Marie H,

    谢谢,我还将尝试优化传感器通信策略,以便进行更多测试。

    此致!

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

    您好,Tenix,

    无法删除自动确认功能,堆栈无法提醒应用程序使用了自动确认。

    我认为您看到的错误是由TI 15.4 堆栈中的预编译值与您设置的这些值之间的差异造成的:  

    MAC_CFG_TX_DATA_MAX         20
    
    MAC_CFG_TX_MAX              30
    
    MAC_CFG_RX_MAX              30
    
    MAC_CFG_APP_PENDING_QUEUE   FALSE

    是否可以将这些值设置回默认值并重试?

    谢谢,

    Marie

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

    您好,Marie H,

    好的,我将恢复为默认值,然后重试。

    谢谢!