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 正常?
谢谢你。