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.

[BLE][CC2541] L2CAP Could Not Receive Over Than 23 Bytes

Other Parts Discussed in Thread: CC2540, CC2640

Hi TI Partners,

Our Customer encountered issue of L2CAP Packet size.

Since something application it needs  received over than 23 bytes of  L2CAP Packet but CC254x couldn't catch from BLE Stack Lower Layer.

The attached is screenshot of the packets sniffer, the client sent a Read Response with a payload of 50 bytes. 

- The first channel data packet is a start packet (LLID = 2, MD (More Data) = 1), the L2CAP header contains CID 0x0004 (ATT) and a length of 51 bytes (0x0033).      

The L2CAP payload of 23 bytes contains the WriteResponse byte (0x0B) and the beginning of the data on 22 bytes (0x0 -> 0x15).
The L2CAP length is 0x33 but the channel PDU length is 27 (4 bytes header + 23 L2CAP payload).

 - The second channel data packet is a continuation packet (LLID = 0b01, MD = 1), it only contains the rest of the payload without L2CAP header, so 27 bytes of data (0x16 -> 0x30).

 - The last packet is also a continuation packet of 1 bytes but the More Data flag is set to 0, this is the last packet.


This is supported on the Link Layer part and documented in the Bluetooth specification. Unfortunately we don't receive anything in the TI firmware so we can't

receive such L2CAP packets, as if the firmware didn't forward big data packets.

On the other hand, if the client sends a single L2CAP packet with a payload length of 23, we receive it.

And if we (the server) send a packet from the TI chip to another Bluetooth device, the device receives it because doing it like that is correct.

Please kindly check these and give a big hand!

Many Thanks.

  • Hello Kenny,

    The CC2540/41 supports the minimum L2CAP MTU of 23 and cannot be increased. As per the BT core specification, the L2CAP MTU must be specified/accepted by the peer device before a larger value can be used (i.e., using GATT Exchange MTU sub procedure). Thus, sending a larger L2CAP PDU in the Link Layer without adjusting the MTU size via L2CAP signaling is against the specification.

    If a larger MTU is required, you will need to use CC2640 which has more available memory & processing capability.

    Best wishes
  • Hello,

    Just to be sure: The L2CAP physical PDU cannot indeed be increased but using the Link Layer, the L2CAP PDU doesn't get increased, just the message using several L2CAP PDUs.

    In the HostTest app, when we do several Prepare Write requests, the chip stores them in RAM before Executing them at then end, so in theory it should also have enough memory to buffer L2CAP PDUs to handle larger messages ?