发送间隔:24ms
发送包长度:20字节
问题:
1:主机通过GATT_WriteNoRsp向从机写入数据,当写速率过快时,就会出现blePending
原因:这是由于出现前面设置的缓存区小和连接间隔太大等参数导致的
解决:
1:将这两个调至成这个,放在ti_ble_config.h,MAX_NUM_PDU和MAX_PDU_SIZE
定义6个Tx缓冲区,每个缓冲区251字节。用户应用程序应该根据自身堆栈情况进行分配。如果没有足够的堆栈,可以通过减少MAX_NUM_PDU,这样可能导致吞吐量的损失。实际使用中的最坏情况是MAX_NUM_PDU和MAX_PDU_SIZE的乘积。设计人员应该根据设备的可用内存来平衡这些参数。
#define MAX_NUM_PDU 6
#define MAX_PDU_SIZE 251
我们配置L2CAP MAX_PDU_SIZE 为255, ATT_MTU 最大 为251 读写特征值最大长度应该ATT_MTU-3=248;
//source\ti\blestack\profiles\simple_profile\simple_gatt_profile.h SIMPLEPROFILE_CHAR5_LEN Line 85
#define SIMPLEPROFILE_CHAR5_LEN 248
2:简单粗暴将连接间隔调小些
注意,在实际情况下更高的连接间隔有着明显的缺点:由于射频干扰导致的连接事件将大大降低吞吐量。因此用户需要根据所需吞吐量进行权衡。当连接间隔大于100ms后,吞吐量将不会增加。
将原来的8001.25ms,修改成241.24ms
将最小的连接间隔“修改成7.5ms

{
attWriteReq_t req;
// uint8_t charVals[4] = { 0x00, 0x55, 0xAA, 0xFF }; // Should be consistent with
// those in scMenuGattWrite
uint8 conndle_index=mac_find_connHandle(stu_other.COMMDEV_mac);
if(conndle_index==10) return false;
req.pValue = GATT_bm_alloc(connList[conndle_index].connHandle, ATT_WRITE_REQ,len,NULL);//sizeof(charVals) , NULL);
if ( req.pValue != NULL )
{
if(char_type==1)
req.handle = connList[conndle_index].FFX2_Handle;// req.handle = connList[get_currt_conn_num()-1].FFX2_Handle;
else
req.handle = connList[conndle_index].FFX4_Handle;
req.len = len;
memcpy(req.pValue,p_data,len);
req.sig = 0;
req.cmd = 1;//0;
// status = GATT_WriteCharValue(connList[conndle_index].connHandle, &req, get_selfEntity());//0;
status_gatt=GATT_WriteNoRsp(connList[conndle_index].connHandle, &req);
if(status_gatt != SUCCESS)
{
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
return false;
}
}
return (true);
}
可以加入QQ群:687360507
与大伙沟通交流,技术在于分享而进步