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.

[FAQ] CC2640R2F: SIMPLELINK-CC2640R2-SDK_BLE5 Known Issues and Fixes

Part Number: CC2640R2F

simplelink_cc2640r2_sdk_3_30_00_20

1. [BTool] Discovered devices list is never cleared

2. The following configurations are not available for host test:

  • peripheral + observer
  • central + broadcaster
  • peripheral + central.

3. Host test and other applications do not receive the HCI Command Complete when HCI_LE_Rand is called

4. Maximum supported number of concurrent BLE connections: 2 (embedded sample applications), and 3 (Host Test). Additional connections can be supported when using Cache-As-RAM

5. Periodic advertisements are not supported

6. Number of simultaneous connections may be limited when attempting concurrent LE Secure Connections pairings

7. Issue when Scanning for extended advertisements using the 2M PHY

8. When using the Watchdog, the TI ROV will display an Uninitialized Task Object. This is expected. Please see https://e2e.ti.com/support/processors/f/791/p/827739/3061540.

simplelink_cc2640r2_sdk_3_20_00_21

1. Host test peripheral + central build is not supported

2. Maximum supported number of concurrent BLE connections: 2 (embedded sample applications), and 3 (Host Test). Additional connections can be supported when using Cache As RAM

3. Issue when Scanning for extended advertisements using the 2M PHY

4. Known issue where queued param updates in slave device makes device crash

In SimplePeripheral_processParamUpdate(), the param update data and clock should only be freed / destructed when the status of the update is bleAlreadyInRequestedMode. Therefore, this freeing / destructing should be surround by a check for this status:

// Send parameter update bStatus_t status = GAP_UpdateLinkParamReq(&req); // If there is an ongoing update, queue this for when the udpate completes if (status == bleAlreadyInRequestedMode) { spConnHandleEntry_t *connHandleEntry = ICall_malloc(sizeof(spConnHandleEntry_t)); if (connHandleEntry) { connHandleEntry->connHandle = connHandle; List_put(&paramUpdateList, (List_Elem *)connHandleEntry); } } else { // Deconstruct the clock object Clock_destruct(connList[connIndex].pUpdateClock); // Free clock struct ICall_free(connList[connIndex].pUpdateClock); connList[connIndex].pUpdateClock = NULL; // Free ParamUpdateEventData ICall_free(connList[connIndex].pParamUpdateEventData); }

5. When using the Watchdog, the TI ROV will display an Uninitialized Task Object. This is expected. Please see https://e2e.ti.com/support/processors/f/791/p/827739/3061540.

simplelink_cc2640r2_sdk_3_10_00_15

1. Known issue where queued param updates in slave device makes device crash

In SimplePeripheral_processParamUpdate(), the param update data and clock should only be freed / destructed when the status of the update is bleAlreadyInRequestedMode. Therefore, this freeing / destructing should be surround by a check for this status:

// Send parameter update
bStatus_t status = GAP_UpdateLinkParamReq(&req);

// If there is an ongoing update, queue this for when the udpate completes
if (status == bleAlreadyInRequestedMode)
{
spConnHandleEntry_t *connHandleEntry = ICall_malloc(sizeof(spConnHandleEntry_t));
if (connHandleEntry)
{
connHandleEntry->connHandle = connHandle;

List_put(&paramUpdateList, (List_Elem *)connHandleEntry);
}
}
else
{
// Deconstruct the clock object
Clock_destruct(connList[connIndex].pUpdateClock);
// Free clock struct
ICall_free(connList[connIndex].pUpdateClock);
connList[connIndex].pUpdateClock = NULL;
// Free ParamUpdateEventData
ICall_free(connList[connIndex].pParamUpdateEventData);
}

simplelink_cc2640r2_sdk_2_40_00_32

1. Known issue where queued param updates in slave device cause application assert

2. ble5_simple_peripheral PTM mode has build error when enable DHCI_TL_PTM in the stack config

A: The HCI_TL_PTM defined is no longer used in the stack.

To use PTM mode, you should set HCI_TL_NONE in the stack project and then replace the whole icall_hci_tl.c with the following code snippet provided in the comment here

3. When using GAP_ADV_ENABLE_OPTIONS_USE_DURATION option for advertising, there has been problems observed such as device terminated when the advertising duration ends. The current workaround is to use a software timer to stop advertising instead of using GAP_ADV_ENABLE_OPTIONS_USE_DURATION option. 

simplelink_cc2640r2_sdk_2_30_00_28

1. Known issue where queued param updates in slave device cause application assert

2.  In SimplePeripheral_processParamUpdate(and multi-role project)

Change from:

List_put(&paramUpdateList, (List_Elem *)&connHandleEntry);

To:

List_put(&paramUpdateList, (List_Elem *)connHandleEntry);

simplelink_cc2640r2_sdk_2_20_00_49

1. When I use CC2640R2DK_5XD /CC2640R2DK_4XS in predefined symbol, the project won't compile.How do I fix this?

A: The board files for 5XD/4XS did not get updated accordingly unfortunately and will be fixed for the next release. This can be fixed by replacing the RFCC26XX_hwAttrs section in simplelink_cc2640r2_sdk_2_20_00_49\source\ti\blestack\boards\CC2640R2DK_4XS(5XD)\CC2640R2DK_4XS(5XD).c with the following code.

const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = {
    .hwiPriority        = ~0,       /* Lowest HWI priority */
    .swiPriority        = 0,        /* Lowest SWI priority */
    .xoscHfAlwaysNeeded = true,     /* Keep XOSC dependency while in stanby */
    .globalCallback     = NULL,     /* No board specific callback */
    .globalEventMask    = 0         /* No events subscribed to */
};

simplelink_cc2640r2_sdk_1_50_00_58

 1. When I added CC2640R2DK_5XD in predefined symbol, the project won't compile.How do I fix this?

A: You can copy cc2650em folder from simplelink_cc2640r2_sdk_1_40_00_45 -->source -->ti -->blestack -->target to the corresponding structure in the simplelink_cc2640r2_sdk_1_50_00_58.

simplelink_cc2640r2_sdk_1_40_00_45

1. Unable to disable non-connectable advertising on multi_role.

To workaround this issue, on multi.c, comment out the assignment of gapRole_AdvEnabled to true when GAP_MAKE_DISCOVERABLE_DONE_EVENT is received.

// If advertising started
if (pMsg->opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
{
  //gapRole_AdvEnabled = TRUE;
}

simplelink_cc2640r2_sdk_1_35

1. Unable to reconnect to a previously bonded device after a power cycle.

To workaround this issue, add the following lines to the GAP_DEVICE_INIT_DONE_EVENT in the gapRole_processGAPMsg function in peripheral.c after right before gapRole_state = GAPROLE_STARTED;:

uint8_t gapAllowPrivacyMode = TRUE;
GAPBondMgr_SetParameter( GAPBOND_ALLOW_DEVICE_PRIVACY_MODE, sizeof(uint8_t), &gapAllowPrivacyMode );