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.

CC2652R: 关于蓝牙测向中信道跳跃的疑问

Part Number: CC2652R
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1, , CC2642R

专家您好!我正在尝试使用两块LAUNCHXL-CC26X2R1进行蓝牙测向开发,使用的SDK版本为5.40。我取得了原始IQ数据,并尝试求解AOA。但目前为止,我求解的AOA的精度较差。经过初步排查,我排除了定位算法、RF Switch、板载引脚控制信号的问题。我注意到现在的RTLS例程的IQ采样是在多个信道上运行的,因而我产生了以下疑问:

1. CC2652R在多个信道上执行CTE的IQ采样是蓝牙协议中的描述吗?

2. 根据我个人的经验,在多个信道上求解AOA通常的做法包括:①合并多个信道的数据,将窄带合并为宽带,再求解AOA;②单独多次求解AOA,观察其概率分布。而先前的RTLS例程支持的天线阵列可以自动求解AOA,我很好奇,先前的例程中处理多个信道的IQ数据的思想是怎样的呢?

3. 为了进一步排查我现存的问题,我想在单个信道上执行IQ采样,我查阅了现有的文档,但目前为止,似乎只有无连接模式支持修改信道映射表,并且最少要使用2个信道。我想问一下,是否有支持单个信道采样的方式(连接模式/无连接模式)。如果我需要修改SDK源码,应该关注哪个文件?

非常感谢专家阅读这个帖子,真诚地期待您的帮助!

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 1. CC2652R在多个信道上执行CTE的IQ采样是蓝牙协议中的描述吗?

    您好,CTE 在每个定期advertising或连接事件的不同通道上发送。 因此每次在不同的通道上对 IQ 数据进行采样。 用于采样每个 IQ 样本的通道在 CC2642R 发送的报告中有详细说明。

    2. 根据我个人的经验,在多个信道上求解AOA通常的做法包括:①合并多个信道的数据,将窄带合并为宽带,再求解AOA;②单独多次求解AOA,观察其概率分布。而先前的RTLS例程支持的天线阵列可以自动求解AOA,我很好奇,先前的例程中处理多个信道的IQ数据的思想是怎样的呢?

    在之前的例程中,只使用相位差。

    为了进一步排查我现存的问题,我想在单个信道上执行IQ采样,我查阅了现有的文档,但目前为止,似乎只有无连接模式支持修改信道映射表,并且最少要使用2个信道。我想问一下,是否有支持单个信道采样的方式(连接模式/无连接模式)。如果我需要修改SDK源码,应该关注哪个文件?

    使用单通道进行传输的唯一方法是将器件设置为test mode并使用 HCI_LE_EnhancedCteRxTestCmd 命令。 您还可以考虑更改连接使用的channel map (请参考该链接)。

    否则的话channel map可以保持原样,基本上不会包括您不需要的的通道上收集的结果。

  • 我花了一些时间来确认这个问题,总结如下。希望能对遇到同样问题的相关人员有所帮助。

    1. CC2652R在多个信道上执行CTE的IQ采样是蓝牙协议中的描述吗?

    1. 在多个信道上发送一般性数据确实是蓝牙协议中的描述,被称为自适应信道跳跃(Adaptive Frequency Hopping, AFH),并有选择下一信道进行跳跃的算法,即信道选择算法(Channel Selection Algorithm, CSA)。蓝牙5.0开始,推出了新的CSA #2算法。这在TI的开发板中默认被启用,但在RTLS例程中,默认被禁用(例如:C:\ti\simplelink_cc13xx_cc26xx_sdk_5_40_00_40\examples\rtos\CC26X2R1_LAUNCHXL\ble5stack\rtls_responder\Application\rtls_responder.c:672,RTLSResponder_processStackMsg函数体中)。看起来似乎在RTLS例程中,被使用的算法是CSA #1。

    2. 在SDK5.10版本的实现为:C:\ti\simplelink_cc13x2_26x2_sdk_5_10_00_48\examples\rtos\CC26X2R1_LAUNCHXL\ble5stack\rtls_master\Drivers\AOA\AOA.c:415,

    AOA_getPairAngles函数。
    将器件设置为test mode
    3.1 将器件设置为test_mode的方法是使用host_test例程(在C:\ti\simplelink_cc13xx_cc26xx_sdk_6_10_00_29\examples\rtos\CC26X2R1_LAUNCHXL\ble5stack\host_test),同时需要启用Predefined symbols:USE_RTLS, RTLS_CTE, RTLS_CTE_TEST(在CCS中,Project -> Properties -> Build -> Arm Compiler -> Predefined Symbols)。host_test例程为Network Processor,需要使用Network Processor Interface(NPI)相关接口与其交互。
    可以使用UART/SPI协议与其交互,C:\ti\simplelink_cc13xx_cc26xx_sdk_6_10_00_29\tools\ble5stack\btool目录下包含工具Btool,可以在Advanced Commands菜单中方便地调试命令。
    但目前为止,Btool的Advanced Commands中没有HCI_LE_EnhancedCteRxTestCmd,并且NPI的Packet Format的章节中,没有Data Payload的格式说明。经过对Btool分析,得知UART的Data Payload格式如下(Type字段的说明、Type字段后的Packet格式可参考HCI Interface):
    UART Data Payload Format
    其中:Type为0x01表示Command,Type为0x04表示Event;Data Length字段指示Data Length字段后面的字节数目。需要注意的是,对于Data Payload的每个字段,其中的字节顺序为低位在前
    这个文档中没有HCI_LE_EnhancedCteRxTestCmd的OpCode,C:\ti\simplelink_cc13xx_cc26xx_sdk_6_10_00_29\source\ti\ble5stack\inc\hci_tl.h:343指示了其OpCode,为0x204F。以HCI_LE_EnhancedCteRxTestCmd为例,需要向串口写入的字节流为:014F20...
    更改连接使用的channel map
    3.2 关于修改channel map(即chanMap),经过尝试,目前简明且有效的方法是在rtls_responder\Application\rtls_responder.c
    RTLSResponder_init函数体末尾处添加以下代码:
      // Initialize RTLS chanMap
      uint8_t chanMap[5] = {0x03, 0x00, 0x00, 0x00, 0x00};      // open channel 0, 1
      HCI_LE_SetHostChanClassificationCmd(chanMap);
    但这只在Connectionless模式下有效,至少需要开启2个信道
    至少需要开启N个信道数目在蓝牙协议《BLUETOOTH CORE SPECIFICATION》, Version 5.2 | Vol 6, Part B, Section 5.1.11 Minimum Number Of Used Channels procedure中有相关描述,其由LL_MIN_USED_CHANNELS_IND PDU的MinUsedChannels字段指示。
    蓝牙协议《BLUETOOTH CORE SPECIFICATION》, Version 5.2 | Vol 6, Part B, Section 4.6 Feature support指示了Minimum Number of Used Channels Procedure字段,其标识是否支持Minimum Number Of Used Channels procedure特性。可以通过下面的代码关闭这个特性:
      case HCI_LE_READ_LOCAL_SUPPORTED_FEATURES:
      {
          uint8_t featSet[8];
     
          // get current feature set from received event
          memcpy( featSet, &pMsg->pReturnParam[1], 8 );
     
          // Clear MINIMUM_NUMBER_OF_USED_CHANNELS
          CLR_FEATURE_FLAG( featSet[2], LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS );
     
          // Update controller with modified features
          HCI_EXT_SetLocalSupportedFeaturesCmd( featSet );
      }
     
    但目前为止,关闭这个特性后也无法在chanMap只开启1个信道,看起来似乎现有的MinUsedChannels相关代码中并不包含查询
    LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS的逻辑。
  • 非常感谢您费心整理,如您之后还有其他问题也欢迎您随时来论坛参与讨论!