完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一个CH582M作为主机,另一个CH582M作为从机。主机上电后主动连接从机,可以连接成功,连接成功后主机每隔50ms向从机写一条数据,从机接收到数据后把处理的结果以通知的形式返回给主机。测试的时候,经常会出现连接断开,或者主机打印Write Err:1。请问,该怎么处理?
req.pValue[0] = 0x3E; req.pValue[1] = 0x00; req.pValue[2] = 0x00; req.pValue[3] = 0x10; req.pValue[4] = 0x0C; bStatus_t status = 0; status = GATT_WriteCharValue(centralConnHandle, &req, centralTaskId); if(status == SUCCESS) { centralProcedureInProgress = TRUE; tmos_start_task(centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); } else { PRINT("Write Fail:%dn",status); GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ); tmos_start_task(centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); } 这里的PRINT打印的status值是 22. [17:41:31.218]收←◆Write Fail:22 [17:42:14.987]收←◆Device found... Connecting... [17:42:15.068]收←◆Connected... [17:42:15.141]收←◆exchange mtu:247 [17:42:15.254]收←◆Bonding success [17:42:15.302]收←◆MTU: f7 [17:42:16.099]收←◆Found Profile Service handle : 21 ~ ffff [17:42:16.164]收←◆Found Characteristic 6 handle : 32 [17:42:16.230]收←◆Found client characteristic configuration handle : 33 这是主机复位后开始连接从机的打印情况 我做了进一步的测试:主机不向从机写数据,从机定时50ms给主机发送通知,这种情况下,不会出现断开也不会出现其他异常。 |
|
相关推荐
4个回答
|
|
蓝牙通讯是根据握手的连接间隔进行包交互的,不是用户怎么传就怎么传数据包的 if(centralDoWrite) { // Do a write attWriteReq_t req; req.cmd = FALSE; req.sig = FALSE; req.handle = centralCharHdl; req.len = 1; req.pValue = GATT_bm_alloc(centralConnHandle, ATT_WRITE_REQ, req.len, NULL, 0); if(req.pValue != NULL) { *req.pValue = centralCharVal; if(GATT_WriteCharValue(centralConnHandle, &req, centralTaskId) == SUCCESS) { centralProcedureInProgress = TRUE; centralDoWrite = !centralDoWrite; tmos_start_task(centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY); } else { GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ); } } } 虽然定时调用发送任务,但是如果返回失败,证明底层缓存还有包没有发出去,没有足够的空间来传当前这一包数据。 需要用户自己做缓存处理,也不要在发送的地方死等发送成功,而是继续轮询,等下次可以发送。 |
|
|
|
我现在的需求是主机发送数据,从机回应数据,这样一个通信周期必须在50ms内完成。应该怎么改程序?
// Minimum connection interval (units of 1.25ms, 6=7.5ms) #define DEFAULT_DESIRED_MIN_CONN_INTERVAL 6 // Maximum connection interval (units of 1.25ms, 100=125ms) #define DEFAULT_DESIRED_MAX_CONN_INTERVAL 12 蓝牙的主机和从机的这个参数我已经改成上面的数据了。 |
|
|
|
|
|
|
|
你提到的连接间隔之类的参数我是理解的,并且做了修改,并且协商的结果是0x0C,也就是我设置的最大值12.现在的现象是两个CH582M模块距离很近的时候,通信是正常的。但距离稍微远一点(大于10cm),通信就失败。我也考虑过可能是天线的问题,但是从咱的数据手册上得知,咱的发射功率可以达到6dBm。我已经把发射功率调节到最大了,通信距离还是稍远一点就会断开。
|
|
|
|
只有小组成员才能发言,加入小组>>
456 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2865 浏览 2 评论
2352 浏览 1 评论
801浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
626浏览 1评论
489浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
353浏览 1评论
628浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 15:13 , Processed in 1.391738 second(s), Total 85, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号