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.

[参考译文] CC2640R2L:读取 Tx 音调的 RSSI。

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/978671/cc2640r2l-read-the-rssi-for-a-tx-tone

器件型号:CC2640R2L

你(们)好

我正在尝试读取目标信道上 Tx 音调的 RSSI。 此设置由两个电路板组成,一个电路板在目标通道上发出 Tx 音调,另一个器件在同一通道上设置 Rx 音调命令,并在调用 Rx 音调命令后调用 HCI_ReadRSSI(),但该 API 始终返回值0。

此外、我还在 GAP_DEVICE_INFO 事件下接收扫描的信标的 RSSI、但无法使用该事件查找 Tx 音调的 RSSI。

有关如何在任何预期通道上读取 Tx 音调的 RSSI 的任何建议。

此致

苏山州  

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

    您好、Sudhanshu、

    您可能需要查看 simple_central 示例。 此示例展示了如何测量传入数据包的 RSSI。

    如您所见,首先发出命令 HCI_ReadRssiCmd()。 然后、您从堆栈接收一个 HCI_GAP_EVENT_EVENT、其状态为 HCI_COMMAND_COMPLETE _EVENT_CODE、操作码 HCI_READ_RSSI。 在这里、您可以得到 RSSI 的值。

    我希望这将有所帮助、

    此致、

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

    您好 Clement

    这是否适用于器件1上的 Tx 音调和器件2上的 Rx 音调,然后我将调用 HCI_ReadRssi()?

    根据我的说法、只有在收到信标时、此事件才会升高。 如果我错了、请纠正我的问题。

    此致

    苏山州

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

    您好、Sudhanshu、

    您能否指定"语调"是什么意思? 它是由连接中的设备交换的 BLE 数据包吗?

    此致、

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

    您好 Clement

    我使用 HCI_EXT_ModemTestTxCmd (HCI_EXT_TX_TANDEG_CARRIER,1) API 在特定通道上生成音调。  

    同时、在同一通道上、我在另一个器件上启动 ModemTestRxCmd。

    此时、我需要获取 RSSI。

    此致

    苏山州

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

    您好!

    我想您正在寻找 HCI_EXT_ModemTestRxCmd()。

    此致、

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

    你(们)好

    我想您不理解我的情景。

    在器件1上、我在  特定通道上启动 HCI_EXT_ModemTestTxCmd ()、即通道1。 同时、我在 同一通道的器件2上调用 HCI_EXT_ModemTestRxCmd ()、即通道1。

    现在、我想读取器件2上接收到的信号的 RSSI。 因此我调用 HCI_ReadRSSI()。 但它始终返回0。

    此致

    苏山州

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

    您好、Sudhanshu、

    如我链接到的文档中所述、应 使用函数 HCI_ReadRssiCmd 来读取 RSSI。 HCI_GAP_EVENT_EVENT 来自状态为 HCI_COMMAND_COMPLET_EVENT_CODE 和操作码 HCI_READ_RSSI 的堆栈。 在这里、您可以得到 RSSI 的值。

    此致、

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

    你(们)好

    在 HCI_GAP_EVENT_EVENT 下 ,我是否需要通过(pEvent->deviceInfo.RSSI)访问 RSSI?

    此外、如何使用操作码 HCI_READ_RSSI 来获取该值?

    案例 HCI_GAP_EVENT_EVENT:
    {
    switch( pMsg->status )
    {
    案例 HCI_BLE_hardware_error_event_code:
    {
    AssertHandler (HAL_assert_cause_hardware_error、
    0U);
    }
    中断;
    案例 HCI_COMMAND_COMPLET_EVENT_CODE:
    /*使用操作码 HCI_READ_RSSI 获取 RSSI */
    
    // HCI_READ_RSSI;
    
    中断;
    默认值:
    {
    ;/*不执行任何操作*/
    }
    中断; 

    此致  

    苏山州

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

    您好!

    请查看我们的 simple_peripheral 示例。 在输出示例中,使用函数 SimplePeripheral_processCmdCompleteEvt()处理 HCI_COMMAND_COMPLETE_EVENT_CODE。

    案例 HCI_GAP_EVENT_EVENT:
    {
    //处理 HCI 消息
    switch (pMsg->status)
    {
    案例 HCI_COMMAND_COMPLET_EVENT_CODE:
    //在此处处理 HCI 命令完成事件
    {
    SimplePeripheral_processCmdCompleteEvt ((hciEvt_CmdComplete_t *) pMsg);
    中断;
    }
    
    
    
    静态空 SimplePeripheral_processCmdCompleteEvt (hciEvt_CmdComplete_t *pMsg)
    {
    uint8_t status = pMsg->pReturnParam[0];
    
    //查找此命令完成用于
    switch (pMsg->cmdOpcode)
    {
    HCI_READ_RSSI 案例:
    {
    INT8 RSSI =(INT8) pMsg->pReturnParam[3];
    
    //显示 RSSI 值、如果 RSSI 高于阈值、更改为更快的 PHY
    if (status == Success){
    //...
    } // if 末尾(status == Success)
    中断;
    }
    
    //...
    
    默认值:
    break;
    }//开关结束(pMsg->cmdOpcode)
    } 

    我希望这将有所帮助、

    此致、

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

    你(们)好

    INT8 RSSI =(INT8) pMsg->pReturnParam[3];

    索引3表示什么?

    在调用 HCI_ReadRssi()之前,上述代码始终返回值0,我调用  HCI_EXT_ModemTestRxCmd()

    此致

    苏山州

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

    您好!

    可以肯定的是,从一开始就提到函数“HCI_ReadRssi()”。 要使用的正确函数应该是"HCI_ReadRssiCmd"

    此致、

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

    你(们)好

    对输入错误表示歉意。

    我只调用 HCI_ReadRssiCmd(),并且在操作码 HCI_READ_RSSI 断点也会被命中。 但我得到的值始终为0。

    此致

    苏山州

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

    您好!

    感谢您的澄清。

    当您到达 HCI_READ_RSSI 的断点时,能否验证其他值是否在由 pMsg->pReturnParam 指向的缓冲区内。 验证返回的状态是否正确也是很好的(它应该位于 pMsg->pReturnParam[0]中)。  

    此致、

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

    你(们)好

    我得到的返回状态为0x02、RSSI 值为0。

    02 00 00 00 24 00 00 00 -这是我在 pMsg->pReturnParameters 中得到的结果。

    我是否犯了任何错误?

    此致  

    苏山州

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

    您好!

    堆栈似乎返回一个与 HCI_ERROR_CODE_UNKNOWN_CONN_ID 相对应的错误代码

    您能否提供一个代码片段来显示如何调用 HCI_ReadRssiCmd()? 此外、是否建立了一些连接? 器件是否处于测试模式?  在启动 HCI_ReadRssiCmd()之前,是否给栈一些时间来“启用”HCI_EXT_ModemTestRxCmd()?

    此致、

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

    你(们)好

    读取 RSSI 时没有建立连接、但是我的器件处于连续扫描模式。 没有、我的器件未处于测试模式。

    是的、我在 HCI_EXT_ModemTestRxCmd ()和 HCI_ReadRssiCmd ()之间提供一些延迟。

    静态 eMfgErrType RxToneEnbl( StructData * pMsg )
    {
    eMfgErrType Status = eInvalidCmd;
    hciStatus_t TestStatus = false;
    tUI8 ChnlNo = pMsg->pData[ 3];
    if ( ChnlNo <= 39u )
    {
    TestStatus = HCI_EXT_ModemTestRxCmd ( ChnlNo );//通道0 -成为命令的一部分*/
    if (TestStatus == HCI_Success)
    {
    memcpy( pMsg->pData、TstPass、cSizeOfRsp );
    pMsg->len =( cSizeOfRsp - cDataOffset );
    状态= eSuccessful;
    }
    其他
    {
    状态= eFailure;
    }
    }
    否则
    {
    /*无效的命令*/
    }
    返回状态;
    }/*
    --------------------------------------------------------------- 静态
    eMfgErrType ReadRssi( StructData * pMsg )
    {
    eMfgErrType Status = eInvalidCmd;
    tUI8 RssiVal = 0;
    HCI_ReadRssiCmd( 0);
    RssiVal = FetchRSSI_g();tUrsOfSize=
    
    
    
    
    0;RsMssMssq>RssiStatus =&FetchRSSI= eOffsOfSizeN;RspruSizeN = eSizeN;RspruSizeN = eSizeN = eSizeN;RspruSizeN = eSizeN = eSizeN
    
    

    PFA 代码片段。

    我的获取 RSSI 函数从我的 SimpleCentral.c 获取 RSSI 值

    此致

    苏山州  

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

    您好、Sudhanshu、

    HCI_EXT_ModemTestRxCmd ()命令只能在测试模式下使用。

    此外,传递给函数 HCI_ReadRssiCmd ()的参数应该是连接句柄。 这两个因素可能会解释您的问题。

    也许我们可以找到更好的方法来满足您的需求。 您是否希望为我们提供有关您的用例的一些详细信息?

    此致、

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

    您好 Clement

    您能否分享一些有关测试模式的文档、例如如何使用。

    我的用例如下所示

    我的器件将在中央模式下工作。 因此、在生产制造过程中、我需要测试 BLE 模块的 Tx 和 Rx。

    我计划的方法是我的器件1、它将从 固定通道上的 HCI_EXT_ModemTestTxCmd ()开始、例如通道20。

    同时,我的器件2 (仅配置为简单中央)将调用 HCI_EXT_ModemTestRxCmd (),经过一段延迟后,我将调用 HCI_ReadRssiCmd ()。

    如果 RSSI 在所需范围内、我将通过测试、否则测试将失败。

    在互换器件1和器件2的功能后,将重复相同的过程。 这样、我就可以检查我的 Tx 和 Rx 是否正常工作。

    因为我的器件无法进行广播、所以我规划了这种方法。

    您能不能建议在生产配置为简单中央的器件时使用其他方法来测试我的射频的 Tx 和 Rx。

    此致  

    苏山州

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

    您好、Sudhanshu、

    感谢您提供的详细信息。 我想您应该了解一下我们的生产测试模式功能(您可以 从此处开始)。 E2E 上还有很多资源(例如本 页面)。

    我希望这将有所帮助、

    此致、