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: How to use BLE RF to receive extended advtisement data more than 31 bytes?

Part Number: CC1352P
Other Parts Discussed in Thread: BLE-STACK

Hi, this thread should be in BLE forum, but if Part Number is CC1352P, there is only Sub-1 GHz forum in forum selection.

My application is based on SimpleLink SDK v5.20.

I'm testing BLE adv data and my question is about BLE extended advertise to transmit long data(for example 200 bytes).

Here is my 2 tests.

Test 1:

I use RF_cmdBleAdvNc to tx data, use RF_cmdBleGenericRx to rx data,

the tx code is:

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);

So adv data len is 0x1F(31) bytes. I tx adv data every 2s.

The rx code is:

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);

In ble_rx_callback, I can receive adv data every 2s. This is normal.

And I test the tx waveforme using a current probe:

What I really need is Test 2:

BLE legacy adv can tx only 31 bytes, but BLE extended adv can tx 254 bytes:

So I test the extended adv.

I use RF_cmdBle5AdvAux to tx data:

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);

the rx code is as same as above in Test 1.

My test result is:

if ble5ExtAdvPacket.advDataLen <=36, I can receive data normally. When DataLen=36, rx len is 37(payload contains 1 byte at the front), this is correct, and this length is the max length in legacy adv.

Then, I change DataLen to 37, rx callback receives nothing.

I test the tx waveform using a current probe, here is the waveform when DataLen is 50:

  

The waveform seems normal, So I guess there is some problem with rx.

So my question is :

I want to use ble extended adv to tx long data (for example 200 bytes), but rx callback can only receive data when tx len <= 36, how to make long data tx and rx normal?

Thank you.