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:如何使用 BLE 射频接收超过31字节的扩展预告数据?

Guru**** 657930 points
Other Parts Discussed in Thread: CC1352P, BLE-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1298244/cc1352p-how-to-use-ble-rf-to-receive-extended-advtisement-data-more-than-31-bytes

器件型号:CC1352P
Thread 中讨论的其他器件: BLE-STACK

您好、该主题应位于 BLE 论坛中、但如果器件型号为 CC1352P、则论坛将仅选择低于1GHz 论坛。

我的 应用基于 SimpleLink SDK v5.20。

我正在测试 BLE Adv data、我的问题是关于 BLE 扩展广播以传输长数据(例如200字节)。

这是我的2个测试。

测试1:

我 对 TX 数据使用 RF_cmdBleAdvNc、 对 Rx 数据使用 RF_cmdBleGenericRx、

TX 码为:

rfHandle = RF_open(&rfObject, &RF_prop_multi, (RF_RadioSetup*)&RF_cmdBle5RadioSetup, &rfParams);

RF_cmdBleAdvNc.pParams->pAdvData      = ble_buf;
RF_cmdBleAdvNc.startTrigger.triggerType  = 0;
RF_cmdBleAdvNc.startTrigger.pastTrig  = 1;
RF_cmdBleAdvNc.channel                = RFfrequencyTable_ble[10].Channel;
RF_cmdBleAdvNc.whitening.bOverride    = 1;
RF_cmdBleAdvNc.whitening.init         = RFfrequencyTable_ble[10].whitening;
RF_cmdBleAdvNc.startTime              = 0;

RF_runCmd(rfHandle, (RF_Op*)&RF_cmdBleAdvNc, RF_PriorityNormal, NULL, 0);

因此、Adv 数据长度为0x1F (31)字节。 I TX ADV DATA 间隔2秒。

Rx 代码为:

RF_Queue_Init();

rfHandle = RF_open(&rfSnifferObject, &RF_prop_multi, (RF_RadioSetup*)&RF_cmdBle5RadioSetup, &rfParams);

RF_cmdFs.frequency = RFfrequencyTable_ble[10].frequency;
RF_cmdFs.fractFreq = RFfrequencyTable_ble[10].fractFreq;
RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);

RF_cmdBleGenericRx.pOutput = &rxStatistics_ble;
RF_cmdBleGenericRx.pParams->pRxQ = &dataQueue;
RF_cmdBleGenericRx.pParams->bRepeat = 1;
RF_cmdBleGenericRx.pParams->rxConfig.bAutoFlushCrcErr = 1;
RF_cmdBleGenericRx.pParams->rxConfig.bAppendTimestamp = 1;
RF_cmdBleGenericRx.channel = 0xFF;
RF_cmdBleGenericRx.whitening.bOverride = 1;
RF_cmdBleGenericRx.whitening.init = RFfrequencyTable_ble[chan].whitening;

RF_postCmd(rfHandle, (RF_Op*)&RF_cmdBleGenericRx, RF_PriorityNormal, &ble_rx_callback, 0xFFFFFFFFFFFFFFFF);

在 ble_rx_callback 中、每隔2s 可以接收广播数据。 这是正常的。

我使用电流探头测试 TX 波形:

我真正需要的是测试2:

BLE 传统 ADV CAN TX 仅31字节、但 BLE 扩展 ADV CAN TX 254字节:

接下来、我测试扩展广播

我在 TX 数据中使用 RF_cmdBle5AdvAux:

rfHandle = RF_open(&rfObject, &RF_prop_multi, (RF_RadioSetup*)&RF_cmdBle5RadioSetup, &rfParams);

RF_cmdBle5AdvAux.pParams->pAdvPkt = (uint8_t *)&ble5ExtAdvPacket;
ble5ExtAdvPacket.extHdrInfo.length = 0;
ble5ExtAdvPacket.advDataLen = 36;
ble5ExtAdvPacket.pAdvData = ble_adv_aux_buf;

RF_cmdBle5AdvAux.startTrigger.pastTrig = 1;
RF_cmdBle5AdvAux.channel                = RFfrequencyTable_ble[10].Channel;
RF_cmdBle5AdvAux.whitening.bOverride    = 1;
RF_cmdBle5AdvAux.whitening.init         = RFfrequencyTable_ble[10].whitening;

RF_runCmd(rfHandle, (RF_Op*)&RF_cmdBle5AdvAux, RF_PriorityNormal, NULL, 0);

Rx 代码与上述测试1中的相同。

我的测试结果为:

如果 ble5ExtAdvPacket.advDataLen <=36、我可以正常接收数据。 当 DataLen=36时、Rx 长度为37 (有效载荷在前面包含1个字节)时、这是正确的、该长度是传统 Adv 中的最大长度。

然后、我将 DataLen 更改为37、Rx 回调什么也不会收到。

我使用电流探头测试 TX 波形、这里是  DataLen 为50时的波形:

  

波形似乎正常、因此我想 Rx 有一些问题。

所以我的问题是:

我想使用低扩展 ADV 到 TX 长数据(例如200字节)、但 Rx 回调只能在 TX len <= 36时接收数据、如何使长数据 TX 和 Rx 正常?

谢谢你。

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

    Yingtao、您好!

    如果您熟悉低功耗蓝牙规范、就会知道扩展广播使用两种不同类型的封装:

    1. 广播通道上的 ADV_EXT_IND 数据包、不包含数据、而是指向广播数据包的指针。

    2. 数据通道上的 AUX_ADV_IND 数据包最多可包含254字节的数据。

    因此、无法直接使用射频驱动器来发送扩展广播包。 我要重新评论以下内容之一:

    a)设置 BLE 外设并使用 BLE-Stack 发送扩展广播包

    B)使用射频驱动器和 BLE PHY、但使用 regualar 专有射频模式并发送非 BLE 数据包。

    请告诉我你的想法。

    有关 SimpleLink Academy 中 BLE 广告的更多信息; https://dev.ti.com/tirex/explore/node?node=A__AeE0v3645AxQnabd1AT4cA__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&placeholder=true

    谢谢、

    M·H