测试cc2652最为client通过拥有notify属性的特征值给对端(APP)发送数据时,最多只能发送20个字节。原因是:虽然可以将堆栈配置为支持MAX_PDU_SIZE
最多 255 个字节,但每个低功耗蓝牙连接最初都使用默认的 27 字节(ATT_MTU
= 23 字节)值,直到交换 MTU 过程产生更大的 MTU 大小。必须在每个低功耗蓝牙连接上执行交换 MTU 过程,并且必须由客户端启动。
即在BLE连接建立后,由作为client的cc2652通过调用GATT_ExchangeMTU函数发起更改MTU的操作,将MTU设置为想要的最大传输数据个数。
BLE-stack官网的相关描述见参考链接:https://dev.ti.com/tirex4-desktop/content/simplelink_cc13xx_cc26xx_sdk_7_40_00_77/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gatt.html?highlight=gatt_exchangemtu#maximum-transmission-unit-mtu
在SimplePeripheral_processGapMessage函数的case GAP_LINK_ESTABLISHED_EVENT:添加代码如下:
case GAP_LINK_ESTABLISHED_EVENT:
{
gapEstLinkReqEvent_t *pPkt = (gapEstLinkReqEvent_t *)pMsg;
BLE_LOG_INT_TIME(0, BLE_LOG_MODULE_APP, "APP : ---- got GAP_LINK_ESTABLISHED_EVENT", 0);
// Display the amount of current connections
uint8_t numActive = linkDB_NumActive();
......
if (pPkt->hdr.status == SUCCESS)
{
// Add connection to list and start RSSI
SimplePeripheral_addConn(pPkt->connectionHandle);
......
attExchangeMTUReq_t pReq;
pReq.clientRxMTU = MAX_PDU_SIZE-L2CAP_HDR_SIZE;
GATT_ExchangeMTU(pPkt->connectionHandle, &pReq, selfEntity);
// Start Periodic Clock.
Util_startClock(&clkPeriodic);
}
if ((numActive < MAX_NUM_BLE_CONNS) && (autoConnect == AUTOCONNECT_DISABLE))
{
// Start advertising since there is room for more connections
GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
}
else
{
// Stop advertising since there is no room for more connections
GapAdv_disable(advHandleLegacy);
}
break;
}