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.

Problems Connecting to GATT Server

Other Parts Discussed in Thread: CC2650

Hello,

I have problems establishing a connection to a GATT server (cc2650, BLE Stack V2.2) that is based on the simple peripheral example. I use a nrf52 eval board to connect to the cc2650 eval board. Using a sniffer, I can see the LL CONNECT_REQ PDU, followed by 5 empty PDUs send from the master to the slave, without the slave responding. I’m sure that this is not only a sniffer issue, because the empty PDU contains the very same sequence number and next expected sequence number (so the nrf52 does not received any response from the cc2650). The connection parameters in the CONNECT_REQ PDU are:
Windows Size: 5 (6.25ms)
Window Offset: 0
Interval: 240 (300ms)
Slave Latency: 0
Timeout: 400 (4s)
Channel-Map: all channels
SCA: 7 (0ppm to 20ppm)
According to the BOM of the nrf52 eval board, the accuracy of the used crystal is 10ppm, but even when I configure the nrf52 to announce an accuracy of 500ppm, I get no response from the cc2650. I tried different connection parameters (timeout 2s, interval 30) but to no reveal. I’m sure, that the cc2650 is recognizing the connection, because it displays the connection status and the connected address. The GATT server puts the first connected address into the connection white list and displays that the white list is not empty.
Connecting the cc2650 from a mac book works (Windows Size: 3, Window Offset 3, Interval 10, Timeout 200). Now, I see two differences in the link layer protocol usage: the nrf52 stack uses a window offset of 0, while OS/X uses 3 and the nrf52 directly connects to the cc2650, without sending a SCAN_REQ, while the OS/X stack sends a SCAN_REQ prior to connecting.
What could be the problem here? If I got the cc2650 architecture right, it can’t be a load issue, because the link layer is handled by a dedicated M0 core, right?
thanks in advance for any hint, tipp, pointer or comment,
Torsten
  • Hello Torsten,

    Can you attach the sniffer file to this post?

    Also, which CC2650 EVM and project are you using?

    Best wishes
  • Hello JXS,

    see attached the sniffer file. I'm not sure, what you mean by EVM and project, but: the hardware is a SmartRF06 eval board with a CC2650EM-7ID module. The cc2650 is labeled: cc2650 F128 TI 52I A6KR G4

    The project is based on the simple peripheral example. Please let me know, if you need access to the source code of the project.

    Thanks in advance,

    Torsten

    nrf52_cc2650_connect.psd

  • Hi JXS,
    are there more details, you need to know? Is there anything wrong with the sniffed connection request?

    kind regards,
    Torsten
  • Hi Torsten,

    The sniffer shows that the master is using a Random Static address TxAdd = 1 and MSB bits are 11b. Can you confirm this is the actual address you placed in the White List?

    Best wishes
  • Hi JXS,

    good idea. If I would have got the address type wrong when setting the white list on a connect request, then this could have resulted in exactly this effect. I've checked the code (see code snipped below) and even commented it out. Unfortunately it did not change the behavior:

    ...
    if ( new_state == rcs_white_list_timer_add )
    {
        uint8_t filter_all = GAP_FILTER_POLICY_WHITE;
        GAPRole_SetParameter( GAPROLE_ADV_FILTER_POLICY, sizeof( filter_all ), &filter_all );
    
        uint8_t peer_address[ B_ADDR_LEN ];
        GAPRole_GetParameter( GAPROLE_CONN_BD_ADDR, peer_address );
    
        uint8 addr_type;
        GAPRole_GetParameter( GAPROLE_BD_ADDR_TYPE, &addr_type );
    
        HCI_LE_AddWhiteListCmd( addr_type, peer_address );
    }
    

    I will make some experiments with giving the nrf52 a not-random address or try to find if I can find a GATT client with a public random address. In addition, I will try to figure out, if I could change the windows offset on the nordic side.

    Anything else I could try to find the cause of this?

    Thank you and kind regards,

    Torsten

  • Hi,
    now I found the time to do some more investigations into this:

    1) I've set the scanners device address to a public address -> no connection
    2) I've commented everything within the callback passed to GAPRole_StartDevice() -> no connection
    3) I've stopped to switch advertising on/off -> no connection
    4) I've changed the Windows Offset to 30 -> that did the trick.

    Thank you,

    Torsten