微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2541 协议栈1.4.1,主机端接收不了通知问题

cc2541 协议栈1.4.1,主机端接收不了通知问题

时间:10-02 整理:3721RD 点击:

hi:各位大侠,Ti工程师们

最近遇到一个主机端接收不到从机的通知问题,从机是使用的1.4.0协议,每800ms从特征值4发送16个字节的通知(从机端应该没有问题)

主机端我用1.4.0协议栈里面的center工程是可以收到的,具体做法:在发现到服务的回调函数中,定时1s后开任务打开通知的开关。打开通知开关的具体方法:是向句柄为0x2f 中写0x0001,具体代码如下:

//开启notify的CCC
attWriteReq_t   req;
req.handle = 0x2f;
//req.handle = GUA_CHAR4_CCC_Hdl; //char4的CCC的特征值句柄,这里写死0x2F,可通过btool获取到
req.len = 2;
req.pValue[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY); //0x0001为开notify
req.pValue[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY);
req.sig = 0;
req.cmd = 0;
GATT_WriteCharValue( 0, &req, simpleBLESwitch_TaskID );
OLED_ShowString(0,6,"open-noti");

以上的在 1.4.0里的center工程中是可以实现的,主机端可以接受到通知,sniffer 抓包结果是这样的:

但是在1.4.1的center工程中,同样的代码,却接收不到通知,抓包的结果是:上图中标蓝箭头的那条写请求没有,

是我没有写成功吗?

GATT_WriteCharValue( 0, &req, simpleBLESwitch_TaskID );是这个方法没有写成功吗?但是我查过返回值是 = success 的

另外要向 句柄为0x2f 这个开关里面写值 有什么前提吗?

我在sniff看到的 F4特征值的句柄确实是 0x2e,查资料上也是说CCC开关 的句柄只要+1就可以了, 

哪里出错了,求教大侠?

另外我从机用的是128bit 的uuid,这个会有影响吗?

这个图是1.4.1接不到通知的抓包

  

请问您在1.4.0上也是用的128bit的UUID吗?

如果是自己修改UUID为128bit,也要修改读写操作的回调函数这样才可以正确执行读写操作哦

你是说主机中,读写的回调函数吗?

目前我在从机端 自己打开了 通知属性的开关,主机端是可以接收数据了

是peripheral这端的service里面的

simpleProfile_ReadAttrCB

simpleProfile_WriteAttrCB

这两个要根据128bit做更改

从机中,读写的回调函数都已经做了128bit的更改,而且从机与lightblue 的读、写、通知都很正常
 

那就是因为API的更改,所以需要根据porting guide来修改原来的代码,以下是guide请参考

http://processors.wiki.ti.com/index.php/LPRF_BLE_Porting_Projects

嗯,谢谢,我研究下,

另外,你有1.4.0协议栈主从切换的demo工程吗?我就是想做一个主从切换的功能,没有找到1.4.0协议栈的demo,用1.4.1的才出现这么多问题

这个没有的,而且推荐在最新的1.4.1的版本上来做。

嗯,现在是在1.4.1上改的,

又遇到一个问题,我是在从机端自己打开的通知开关,主机端连接后是可以接受到数据了,但是只能前30多秒钟有(从机是连接上后 每800ms 发送一个通知),30多秒后,主机端事件处理函数都触发不了了,连接也没断开。抓包来看,确实有通知数据从 从机发出来

这个函数没触发,

抓包却有通知数据,这是什么情况?

您好

建议您先根据porting guide将代码更新一下后再看

嗯,好的,谢谢!

刚刚那个主机端30s后接不到消息,找到原因了,是因为指针没有释放,在消息处理函数的最后面没有加
GATT_bm_free( &pMsg->msg, pMsg->method ); 

加上就好了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top