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.

CC2650: Using channel maps to set frequency for BLE ETSI RX Blocking Test

Part Number: CC2650


Hello,

A CC2650 BLE product I am working on is currently in the lab undergoing compliance testing.  I have used the built-in modes for FCC testing using the:

HCI_EXT_ModemTestTxCmd();

function to put the radio in the particular modes.  This is a nice feature!

To perform the Receiver Blocking Test, the lab wanted two of our boards connected to each other (via BLE) sending data with an indication that the connection is still good.  I found the spp_ble_client and spp_ble_master example projects for the CC2650 Launchpad and thought that was a great starting point.  I modified the projects to work with our hardware and for the Server to send data every 250ms.  The Client toggles its led every time it receives data.

I just learned that the radio need to be restricted to one of two channels/frequencies at the low and high end of the spectrum.  I found these two threads on this forum that talk about using channel maps to limit the channels used in the hopping scheme:

https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/404558/1433442

https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/507332/1844550

These talked about using the function: HCI_LE_SetHostChanClassificationCmd() on the Central device to limit the channels used for transmitting.  It was noted that this must be done after the connection is established.  These threads are about all I have found about this topic - I haven't found documentation that goes in to greater detail about channel maps or the HCI_LE_SetHostChanClassificationCmd function and it's uses etc.

I put the following code in the spp_ble_client (the Central) project in spp_ble_client.c, SPPBLEClient_processRoleEvent() function, and the GAP_LINK_ESTABLISHED_EVENT section:

uint8 chanMap[5];
hciStatus_t rv;

chanMap[0]=1<<1; //2404MHz
//chanMap[4]=1<<6; //2478MHz
rv=HCI_LE_SetHostChanClassificationCmd(chanMap);

I don't have a spectrum analyzer so I send this code to a colleague who does and confirmed that it looks like the boards are still using the full spectrum - it is not limited to just one channel.

I can use some help here to get this working, ie. only using one channel while connected:

1.  Is my use of the channel map correct?  An array of five bytes?  LSb is 2402MHz and MSb is 2480MHz?

2.  Am I calling HCI_LE_SetHostChanClassificationCmd(chanMap); correctly?

3.  Am I calling HCI_LE_SetHostChanClassificationCmd(chanMap); in the correct place?

4.  Is there a way for me to verify that this is working/not working without a spectrum analyzer?  Is there a CC2650 Launchpad sniffer project using a TI PC Tool or similar?

5. Can someone point me to better documentation for using channel maps and HCI_LE_SetHostChanClassificationCmd(chanMap); in TI Simplelink?

6. ...

Thanks for any help / suggestions...

  • Hello Thomas,

    Your lab should not be using another CC2650 Launchpad or a BLE connection to perform RX blocking test. I encourage them to look at app note SWRA536 ETSI EN 300 328 Blocking Test for Bluetooth Low Energy for the test setup with a BLE tester and SmartRF Studio 7.

    Best wishes

  • Hi JXS,
    Thanks for the reply. I did find that document last night while searching. I will take that up with the lab...

    I would still like to keep up with the original questions above since that was the original requested setup by the lab, and for my own edification. Can you shed some light on the channel map and HCI_LE_SetHostChanClassificationCmd(chanMap); function within the context of the spp_ble_server and spp_ble_client examples?

    Thanks,
    Tom
  • Hi Tom,

    Glad you found the app note.

    The HCI_LE_SetHostChanClassificationCmd is described in the Bluetooth specification. See "7.8.19 LE Set Host Channel Classification Command" in BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E]

    Best wishes
  • Hi JXS,
    Thanks for the documentation hook.

    Do you see any problems with how I am trying to restrict the channel as in my original post?

    How about my other questions?

    Thanks,
    Tom
  • RF Channel 0 (2402 MHz) and 39 (2480 MHz) are ADV channels, so the HCI_LE_SetHostChanClassificationCmd does not apply to these non-data channels.

    Best wishes
  • Hi JXS,

    Do you see a problem if I do this in the location I described?

    uint8 chanMap[5];
    hciStatus_t rv;

    chanMap[0]=1<<1;
    rv=HCI_LE_SetHostChanClassificationCmd(chanMap);

    Thanks,
    Tom
  • Hi Tom,

    In terms of using the API, I don't see an issue. Please note that the return value will come in a command complete event.

    In terms of using the API as a test method for meeting the blocking test requirements, I've requested Level 2 support to comment further as it does not match the published test setup from SWRA536.

    Best wishes
  • Hi JXS,

    It looks like I am getting a 0x12 return value for the HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION command finished event. Any idea why I would be getting this based on what I am doing?

    2.18 INVALID HCI COMMAND PARAMETERS (0x12)

    Thanks,
    Tom
  • Hi JXS,
    FYI, I am able to read the channel map with the HCI_LE_ReadChannelMapCmd(connHandle); command. When the HCI_LE_READ_CHANNEL_MAP event comes in to SPPBLEClient_processCmdCompleteEvt() the channel map that is read is this:

    {0xFF, 0xFF, 0xFF, 0xFF, 0x1F}

    This is as expected, 37 bits on and the three MSb are off...

    Any thoughts to my previous question why I would be getting back an 0x12 error code from a HCI_LE_SetHostChanClassificationCmd(chanMap);?

    Thanks,
    Tom
  • Hi Tom,

    I did confirm that the HCI_LE_SetHostChanClassificationCmd requires a minimum of two channels to be listed as 'unknown' or 1 in the channel map. This can be prototyped in BTool with a LaunchPad running the host_test firmware according to the following setup:

    Remember you must be a Central role and the command can only be sent during a connection. Also, as previously stated, I do not believe the test setup with this HCI API to be sufficient for regulatory testing.

    Best wishes

    EDIT: Corrected HCI API cmd name.

  • Hi JXS,
    I hear what you're saying about this test setup. I am confused by what the lab told me. The problem is that I don't have firmware to run on my DUT to support this test. There is no USB port to hook in to SmartRF studio, etc. Maybe it will come to this. Let's pick up this discussion if necessary on a new thread...

    Regarding your previous post, you mentioned HCI_LE_ReadChannelMapCmd() - did you mean HCI_LE_SetHostChanClassificationCmd()?

    So the five-byte bitmask must have at least two bits as 1 - or two channels as 'unknown'? I cannot be exclusive to only one channel?

    Thanks,
    Tom
  • Hi Tom,

    Sorry for the confusion, I did intend to state "HCI_LE_SetHostChanClassificationCmd" and have corrected the post.
    That is correct; you need to specify at lest two active channels (1's) in the chanMap.

    To run SmartRF studio 7, you just connect to the JTAG port on your board with the debugger. You can use the external JTAG "XDS110 Out" port on the LaunchPad for this connection.

    Best wishes
  • Hi Tom,

    The reason for recommending the setup in the application note is exactly to avoid the need for any special FW being loaded into the device to receive packets and somehow report the PER. The SmartRF Studio GUI will handle that for you. As JXS writes, all you need for SmartRF Studio is a debugger connected to the JTAG interface.

    Regards,
    Fredrik