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.

[参考译文] CC2652P:更改 BLE TX 功率无效

Guru**** 2589245 points
Other Parts Discussed in Thread: CC2652P, ENERGYTRACE

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/994558/cc2652p-changing-ble-tx-power-has-no-effect

器件型号:CC2652P
主题中讨论的其他器件: ENERGYTRACE

大家好、 我使用 CC2652P、simplelink_cc13x2_26x2_SDK_4_40_04_04、CCS10.2。

我的应用基于如下所示的 DMM 示例

在我的应用中、我需要使用 AUX_ADV_IND PDU 发送 BLE 扩展广播数据、现在扩展广播数据可以正常工作。

我可以在 Smart RF Studio 中将 CC1352P-2 LaunchPad 用作监听器、并在 Smart RF Studio 中查看辅助高级数据。

我还可以使用 HCI_LE_SetHostChanClassificationCmd 在 aux_adv_ind PDU 上设置通道。

然后,我要更改 AUX_ADV_IND PDU 上的 TX 功率,并查看 Smart RF Studio 上的 RSSI。

我使用 HCI_EXT_SetTxPowerCmd ()和这些值

我的器件与 LaunchPad 非常冷。

但是、无论我设置什么 TX 功率、Smart RF Studioi 上的 RSSI 始终约为-30dBm。

只有我将器件从 LauchPad 上拿开、RSSI 才会降至-40、-50、-60 dBm。

因此、我想问、可能使用  HCI_EXT_SetTxPowerCmd 来设置 aux_adv_ind PDU 是不正确的?

如何实现正确?

谢谢。

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

    您好!

    我建议首先在不使用 DMM 的情况下运行一些测试-这样您可能需要利用 simple_peripheral 示例。

    此外、确保在启用广播集之前修改 Tx 功率。

    如果需要、我将要求相关工程师提供帮助。

    此致、

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

    您好!

    我完全同意 Clement。 我认为、实施一个在 simple_peripheral 中更改 TX 功率的过程、然后将该过程传输到所需的工程、这可能是最简单的方法。 我建议在  GapAdv_create ()函数调用之前调用 GAP_DEVICE_INIT_DONE_EVENT 内 SimplePeripheral_processGapMessage()函数中的 HCI_EXT_SetTxPowerCmd ()函数、如下所示:

            ...
            BLE_LOG_INT_TIME(0, BLE_LOG_MODULE_APP, "APP : ---- got GAP_DEVICE_INIT_DONE_EVENT", 0);
            // Setup and start Advertising
            // For more information, see the GAP section in the User's Guide:
            // software-dl.ti.com/.../
    
    
            // Set a different TX Power [ADDED]
            HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);
    
            BLE_LOG_INT_INT(0, BLE_LOG_MODULE_APP, "APP : ---- call GapAdv_create set=%d,%d\n", 0, 0);
            // Create Advertisement set #1 and assign handle
            status = GapAdv_create(&SimplePeripheral_advCallback, &advParams1,
                                   &advHandleLegacy);
            SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
            ...

    进行这些修改后、我使用 EnergyTrace 快速验证电流消耗的变化。 这种变化可用于指示发射功率的变化。 但是、用于验证更改的专用测试设备将是理想之选。 在下面、您可以看到修改前 EnergyTrace 报告的电流消耗:

    在下面、您可以看到进行修改后报告的 EnergyTrace:

    您能否实施这些更改并验证您是否能够看到所需的行为?

    此致、

    1月

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

    谢谢你。

    我已经测试了您建议的操作。

    在  simple_peripheral 示例中、我删除了传统广播并仅保留一个扩展广播集。

    同样、我使用一个 CC2652P-2 LaunchPad 来 TX AUX_ADV_IND PDU、使用另一个 CC2652P-2 LaunchPad 作为监听器来观察 RSSI。

    在该示例中、我  按照建议在 GapAdv_create 之前使用 HCI_EXT_SetTxPowerCmd、当我更改 API 中的不同功率值、并将程序闪存到 TX LaunchPad 中、然后我可以观察到另一个 LaunchPad 上的不同 RSSI。 这是有道理的。

    但这仅显示运行的程序中的固定功率。 我需要在 程序运行时测试动态 TX 功率。

    因此、我测试了更多内容。 我发现、当我使用 GapAdv_disable 来禁用广播设置、然后更改 TX 功率、然后使用 GapAdv_enable 来启用广播设置时、RSSI 没有变化。

    当我使用 GapAdv_Destroy 销毁广播集、然后更改 TX 功率、然后使用 GapAdv_create 再次创建广播集时、RSSI 会发生变化。

    因此、我的测试显示、仅在销毁而不是禁用广播集之后、才能更改 AUX_ADV_IND PDU 的 TX 功率。

    因此、在程序运行时、如果需要更改 AUX_ADV_IND PDU 的 TX 功率、则必须首先销毁广播集、然后更改 TX 功率、最后再次创建广播集。

    是这样吗?

    谢谢。

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

    您好!

    我能够再现您描述的行为。 为此、我修改了按键代码以更改 TX 功率。 我修改了代码、这样当按下左侧按钮时、 HCI_EXT_SetTxPowerCmd (HCI_EXT_TX_POWER_5_DBM);进行了函数调用。 如果按下右侧按钮、则 HCI_EXT_SetTxPowerCmd (HCI_EXT_TX_POWER_MINUE_20_DBM);进行函数调用。  我制作了两个版本的 SimplePeripheral_handleKeys()函数。 第一个选项禁用广播、更改 TX 值、然后重新启用广播。 此版本如下所示:

    static void SimplePeripheral_handleKeys(uint8_t keys)
    {
      bStatus_t status = FAILURE;
      if (keys & KEY_LEFT)
      {
        // Check if the key is still pressed. Workaround for possible bouncing.
        if (PIN_getInputValue(CONFIG_PIN_BTN1) == 0)
        {
          status = GapAdv_disable(advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_disable(advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);
    
          status = GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          status = GapAdv_enable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          Display_printf(dispHandle, SP_ROW_DEBUG, 0, "HCI_EXT_TX_POWER_5_DBM is set");
    //      tbm_buttonLeft();
        }
      }
      else if (keys & KEY_RIGHT)
      {
        // Check if the key is still pressed. Workaround for possible bouncing.
        if (PIN_getInputValue(CONFIG_PIN_BTN2) == 0)
        {
          status = GapAdv_disable(advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_disable(advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_20_DBM);
    
          status = GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_enable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          Display_printf(dispHandle, SP_ROW_DEBUG, 0, "HCI_EXT_TX_POWER_MINUS_20_DBM is set");
    //      tbm_buttonRight();
        }
      }
    }

    该函数的第二个版本将销毁广播集、然后重新创建它们。 此版本如下所示:

    static void SimplePeripheral_handleKeys(uint8_t keys)
    {
      bStatus_t status = FAILURE;
      if (keys & KEY_LEFT)
      {
        // Check if the key is still pressed. Workaround for possible bouncing.
        if (PIN_getInputValue(CONFIG_PIN_BTN1) == 0)
        {
    
          status = GapAdv_destroy(advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_destroy(advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_5_DBM);
    
          status = GapAdv_create(&SimplePeripheral_advCallback, &advParams1,
                                 &advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_create(&SimplePeripheral_advCallback, &advParams2,
                                 &advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          Display_printf(dispHandle, SP_ROW_DEBUG, 0, "HCI_EXT_TX_POWER_5_DBM is set");
    //      tbm_buttonLeft();
        }
      }
      else if (keys & KEY_RIGHT)
      {
        // Check if the key is still pressed. Workaround for possible bouncing.
        if (PIN_getInputValue(CONFIG_PIN_BTN2) == 0)
        {
          status = GapAdv_destroy(advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_destroy(advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_MINUS_20_DBM);
          
          status = GapAdv_create(&SimplePeripheral_advCallback, &advParams1,
                                 &advHandleLegacy);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
          status = GapAdv_create(&SimplePeripheral_advCallback, &advParams2,
                                 &advHandleLongRange);
          SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
    
          Display_printf(dispHandle, SP_ROW_DEBUG, 0, "HCI_EXT_TX_POWER_MINUS_20_DBM is set");
    //      tbm_buttonRight();
        }
      }
    }

    在第二个 LaunchPad 上设置 simple_central 并连接到修改后的 simple_peripheral。 我能够观察到只有第二版本的 handleKeys 功能会导致 RSSI 的变化。 我不确定这种行为是否适用、因此我将提交内部票据并告知团队。 我很高兴听到您能够找到有效的解决方法、并且您向社区提供了此解决方法。  

    此致。

    1月

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

    谢谢。  期待您的回复。

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

    您好!

    我已经提交了内部 TT、团队将尽快对此进行调查。

    此致、

    1月

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

    是否有任何新的进展? 谢谢你。

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

    您好!

    此问题已被接受、该团队将致力于为将来的版本修复此行为。 除此之外、我还没有收到更新。 同时、我认为您提供的变通办法应该起作用。  

    此致、

    1月