我现在用CC2540用GATT_WriteNoRsp()进行写操作是成功的,而用CC2640进行写操作就会一直返回0x16,请问这是为什么?
Viki Shi:
0x16说明 blePending——-some previous command is not served or some other sync mechanism is in progress.
参考下这边帖子中的方法:e2e.ti.com/…/425107
tyty:
回复 Viki Shi:
我试了这个方法不能解决我的问题?
Susan Yang:
回复 tyty:
出现0x16时,连接有没有断开?
tyty:
回复 Susan Yang:
没有断开
Alvin Chen:
回复 tyty:
怀疑你是没有开辟空间导致的,可以尝试按照以下格式。
req.pValue = GATT_bm_alloc( ble_dev_conn_handle, ATT_WRITE_REQ, xxx, xxx );if( req.pValue != NULL ){req.handle =req.len = req.pValue = req.cmd =req.sig = res = GATT_WriteNoRsp(p->ble_dev_conn_handle,&req);if(res != SUCCESS){GATT_bm_free( (gattMsg_t *)&req, ATT_WRITE_REQ );}}else{res = bleMemAllocError;}return res;
tyty:
回复 Alvin Chen:
我就是这么做的,现在是发送两百多个包,会出现3次返回0x16的情况?
Alvin Chen:
回复 tyty:
抱歉有事回复晚了,您的意思是你连续发了200多次会出现几次blePending,这意味着ble被挂起做其他任务。建议您用一些延时或者信号量,如果你想发送大数据建议使用下面的程序。 github.com/…/throughput_example.md
tyty:
回复 Alvin Chen:
谢谢,我把发送间隔调长了,现在问题解决了,另外发现一个新的问题,就是配对不能成功,调试发现主机端进不了SimpleBLECentral_passcodeCB这个回调函数,直接到SimpleBLECentral_pairStateCB请问这是为什么,以下是抓包内容