Are you using CySmart PC Tool to communicate with the BLE Pioneer Kit?
If yes, then CySmart PC Tool, being the Central device, may negotiate for a smaller MTU size. You may want to try out changing the size in CySmart PC Tool GUI -> Select a BLE Dongle -> "Configure Master Settings" button -> "Others" -> GATT MTU exchange set to true with size of your choice.
I'm using an android tablet with a debugger.
To confirm what is the exact MTU size that is negotiated, please check the value of parameter '' which is returned as part of the 'CYBLE_EVT_GATTS_XCNHG_MTU_REQ' event received in your BLE generic event handler function. Note, this is the same function with which CyBle_Start() API would have been called in your design.
In this function, place the following case inside switch(event) :
mtuExchgParam = *(CYBLE_GATT_XCHG_MTU_PARAM_T*)eventParam;
Check what is the value of 'mtuExchgParam.mtu' and whether it is above 23 bytes or not. This should give us a starting point.
In case you have a BLE sniffer, then you can directly see the MTU exchange data and the value.
Event CYBLE_EVT_GATTS_XCNHG_MTU_REQ is never asserted. Tested with 2 different app on two different devices.
CYBLE_EVT_GATTS_XCNHG_MTU_REQ case was already présent in the code like this :
if(CYBLE_GATT_MTU > ((CYBLE_GATT_XCHG_MTU_PARAM_T *)eventParam)->mtu)
mtuSize = ((CYBLE_GATT_XCHG_MTU_PARAM_T *)eventParam)->mtu;
mtuSize = CYBLE_GATT_MTU;
I've added CyBle_GattcExchangeMtuReq() on the connected event. It solves the problem.
MTU negociation doesn't occur automatically at connection...
File a technical support case -
www.cypress.com -> Design Support -> Support -> Create a Support Case -> Contact Technical Support.
In case you have not, you will be asked to register on Cypress web site first.