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.

[参考译文] CC2652R7:CMD_PROP_RX_ADV 固定长度 PHY:禁用长度字段 (numLenBits = 0) 会停止 RX

Guru**** 2762955 points

Other Parts Discussed in Thread: CC2652R7, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1604153/cc2652r7-cmd_prop_rx_adv-fixed-length-phy-disabling-length-field-numlenbits-0-stops-rx

器件型号: CC2652R7
主题: SysConfig 中讨论的其他器件

您好 TI 支持团队:

我使用的是使用专有 PHY 和CMD_PROP_RX_ADV的 CC2652R7。

我正在尝试配置 固定长度 PHY 从数据包标头中删除长度字段 、但我面临的问题是我无法从文档中解决。

电流行为

  • 何时

     
    RF_cmdPropRxAdv.hdrConf.numLenBits = 0x06;

    RX 正常工作且接收到数据包。

  • 更改为 0

     
    RF_cmdPropRxAdv.hdrConf.numLenBits = 0x00;
    RF_cmdPropRxAdv.hdrConf.lenPos = 0x00;

    RX 停止完全接收数据包。

TX 用途:

RF_cmdPropTxAdv.pktLen = 64;
RF_cmdPropTxAdv.pktConf.bUseCrc = 1;

RX 使用:

RF_cmdPropRxAdv.maxPktLen = 64;
RF_cmdPropRxAdv.rxConf.bIncludeHdr   = 1;
RF_cmdPropRxAdv.rxConf.bAppendStatus = 1;
RF_cmdPropRxAdv.rxConf.bIncludeCrc   = 0;

正确配置了 Rx 队列(,,足够的缓冲区大小)DATA_ENTRY_TYPE_PTRlenSz = 0

我的目标

我想在中运行专有的 PHY 真固定长度模式 、其中:

  • 数据包长度是固定的(64 字节)。

  • 打开了 PHY 标头中没有长度字段

  • RX 不依赖于长度字段来分隔数据包。

问题

  1. 是这样 眼图 numLenBits = 0在使用CMD_PROP_RX_ADV?时完全禁用长度字段 ()

  2. 如果是:

    • 事件 其他射频设置/SysConfig/SmartRF 设置或覆盖 是否需要进行此操作?

    • numLenBits = 0如果 PHY 作为可变长度生成、那么单独使用是否不够?

  3. 如果否:

    • 长度字段 必填 对于 CC26xx 上的专有 PHY 数据包模式、即使在固定数据包长度下运行也是如此?

    • 是否建议保留长度字段但发送一个常量值的方法?

numLenBits非常希望能对固定长度数据包模式和 RF 覆盖之间的关系进行任何说明。

此致、谢谢

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

    你好 Ashot Andrieieev,  

    [报价 userid=“580659" url="“ url="~“~/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1604153/cc2652r7-cmd_prop_rx_adv-fixed-length-phy-disabling-length-field-numlenbits-0-stops-rx
    • 是这样 眼图 numLenBits = 0在使用CMD_PROP_RX_ADV?时完全禁用长度字段 ()

    • 如果是:

    [/报价]

    是的。

    [报价 userid=“580659" url="“ url="~“~/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1604153/cc2652r7-cmd_prop_rx_adv-fixed-length-phy-disabling-length-field-numlenbits-0-stops-rx
    • 事件 其他射频设置/SysConfig/SmartRF 设置或覆盖 是否需要进行此操作?

    • numLenBits = 0如果 PHY 作为可变长度生成、那么单独使用是否不够?

    [/报价]

    通常、我首先使用 SmartRF Studio 7 测试 PHY 修改、原因是设置的微小不匹配可能会导致不可预见的问题、例如在本例中 RX 无法正常工作、这很可能是 PHY 专门设计为使用长度字段而不是变量。  

    快速设置时、打开 SmartRF Studio 7(最好有 2 个器件)、打开器件、选择您的 PHY、找到可变数据包长度寄存器并将其设置为活动(而不是固定长度)、测试 PHY(如果有链接/数据将 RF 配置设置导出到 CCS,那么上述代码应该可以正常工作)。  

    谢谢、
    Alex F

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

    感谢您的快速答复、感谢您 确认numLenBits = 0将与配合使用 CMD_PROP_RX_ADV器件。

    为确保我们正确实施此项、您能否澄清以下有关的详细信息 使用 RX_ADV 进行固定长度 RX 操作

    1. 何时numLenBits = 0、是 从 PHY 级别的数据包标头中完全删除了长度字段 、即完全不需要或解析长度位?

    2. 在此模式下、射频内核是否依赖 专用于 maxPktLen固定数据包长度、还是有任何其他内部限制?

    3. 有任何问题 标头中隐式依赖于长度解析的其他字段 (CRC 对齐,美白,地址过滤等)是否禁用长度?

    如果可用、简要参考文档、内部说明或示例 PHY 配置将非常有帮助。

    谢谢你

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

    你好 Ashot Andrieieev,  

    我使用 SmartRF Studio 7 检查了数据包、对于固定的数据包长度、它确实会删除 length 字段(与变量相比):

    何时numLenBits = 0从 PHY 级别的数据包标头中完全删除了长度字段 、即完全不需要或解析长度位?

    在 RX 侧 Application“  代码(不是 PHY) 预计长度字段为空(删除了 IE);在 PHY 级别上、我们需要确保在 pktConf 寄存器下正确设置 bVarLen。 您将需要检查导出的代码 RF 配置(默认名称为 smartrf_settings.c)、并找到“.pktConf.bVarLen = 0x0“(如果其长度为 0x0 固定值)以及其可变长度是否为 0x01)。  

    基本上、如果之间存在不匹配情况  无线电的应用程序代码配置和加载到无线电的 PHY 级别(RF 配置)、则可能会出现问题  (例如无法正确接收数据包等)。  

    在此模式下、是否依赖射频内核 专用于 maxPktLen固定的数据包长度、还是有任何其他内部限制?

    查看 SDK 文件、应用程序代码将依靠 maxPktLen 来告诉无线电要查找数据包的时长(因此,如果要捕获完整的数据包,这一点很重要):

    uint16_t maxPktLen;          //!<\brief Packet length 表示固定长度、maximum packet length 表示可变长度
    是否有 标头中隐式依赖于长度解析的其他字段 (CRC 对齐,美白,地址过滤等)当长度被禁用时?

    除非在应用级 TX 代码中手动添加标头、否则 CRC/白化/Syncword 都应由无线电和 RF_prop 驱动程序自动处理。 测试此设置的理想方法同样是分段进行、首先在 SmartRF Studio 7 中设置设置、让两个 CC2652R7 执行射频链路并相互传递数据、然后创建一个 RX 工程以从 SmartRF Studio 7 复制设置、然后再次进行链接测试 (TX 端仍然是 SmartRF Studio 7)、如果它有效、则创建一个 TX 工程以从 SmartRF Stuido 7 复制设置并执行最终链接测试。  

    谢谢、
    Alex F

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

    您好:

    感谢您的详细说明和检查 SmartRF Studio 7 的行为 — 感谢您的努力。  

    我认为、由于我的用例严格基于、因此需要进行一个重要的澄清 CMD_PROP_RX_ADV/CMD_PROP_TX_ADV 、而不是 CMD_PROP_RX。

    在我的配置中:

    • 我正在使用的器件 RFC_CMD_PROP_RX_ADV_t/RFC_CMD_PROP_TX_ADV_t

    • hdrConf.numHdrBits = 0x10

    • 长度字段在应用程序级别不存在

    • 因此、我设置:  RF_cmdPropRxAdv.hdrConf.numLenBits = 0;

    • RF_cmdPropRxAdv.maxPktLen = 64

    • 打开了 无 bVarLen 字段 在 CMD_PROP_RX_ADV/TX_ADV 中

    采用这种配置时、 根本未收到任何数据包

    所以、我唯一的澄清问题是:请你澄清一下 当数据包报头根本不包含长度字段时、为 CMD_PROP_RX_ADV/CMD_PROP_TX_ADV 配置固定长度操作的正确方法。

    专门导出的最小示例或参考 SmartRF Studio 7 配置 RX_ADV 固定长度、无长度字段 会非常有帮助。

    再次感谢您的支持

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

    您好、Ashot、

    我将在此处引用 rfPacketErrorRate:

      IF(NULL!= pRxCmd)
      {
        pRxCmd->pQueue =&dataQueue;
        pRxCmd->pOutput =(uint8_t*)&rxStatistics_prop
        pRxCmd->maxPktLen = MAX_LENGTH;
        pRxCmd->pktConf.brepeatOk = 1
        pRxCmd->pktConf.brepeatNok = 1
        pRxCmd->rxConf.bAutoFlushCrcErr = 1
        pRxCmd->rxConf.bAutoFlushIgnored = 1
        pRxCmd->rxConf.bAppendTimestamp = 1
        pRxCmd->rxConf.bAppendStatus = 0x1
      }
      Else if (NULL != pAdvRxCmd)
      {
        pAdvRxCmd->pQueue =&dataQueue;
        pAdvRxCmd->pOutput =(uint8_t*)&rxStatistics_prop
        pAdvRxCmd->maxPktLen = MAX_LENGTH;
        pAdvRxCmd->pktConf.brepeatOk = 1
        pAdvRxCmd->pktConf.brepeatNok = 1
        pAdvRxCmd->rxConf.bAutoFlushCrcErr = 1
        pAdvRxCmd->rxConf.bAutoFlushIgnored = 1
        pAdvRxCmd->rxConf.bAppendTimestamp = 1
        pAdvRxCmd->rxConf.bAppendStatus = 1
        pAdvRxCmd->rxConf.bIncludeCrc = 0x0
        pAdvRxCmd->rxConf.bAppendRssi = 0x0
        pAdvRxCmd->hdrConf.numLenBits = NUM_LEN_bits
      }
    您可以看到 AdvRxCmd(由引用的命令)  RFC_CMD_PROP_RX_ADV_t) 有一些添加的命令(例如 hdrConf 控件)、正如您在前面所说的、我们需要使用 hdrConf、直到我们可以正确设置数据包以接收数据包。  

    在上图中、您可以看到标头被定义为 1 字节字段(针对可变长度)、但当我将其设置为固定长度时、标头将存在。  
    在固定长度用例中、我们不会有标头、而是手动设置最大数据包长度、再次请参阅 rfPacketErrorRate、了解如何设置固定长度的示例:
              if ((config.rfSetup == Rfr Setup_Ble)||(config.rfSetup == Rfr Setup_Ble 5))
              {
                //固定有效载荷长度为 30
                payloadIndex = 0
                CONFIG.payloadLength = CONFIG_payloadLengthTable[payloadIndex]
              }
    谢谢、
    Alex F
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 只是为了确认:在 RX_ADV 中、固定长度“无标头“意味着我们必须设置 两者可兼得 hdrConf.numLenBits = 0hdrConf.numHdrBits = 0、否则 RX_ADV 仍需要numHdrBits有效载荷前的位、如果 TX 不传输这些位、则不会接收帧。 是这样吗?

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

    您好、Ashot、

    如果标头长度为零、则长度也需要为零、因为它不会占用任何空间。  

    例如、如果数据包长度可变、您可以将标头设置为 1、将长度设置为 0;这意味着 TX 数据包长度设置在标头中的位置“0"。“。  

    如果标头和长度均为零、则不需要设置任何内容。  

    谢谢、
    Alex F