微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > TI cc2540 Central 连接 nRF51822 Peripheral 无法使能Notify!

TI cc2540 Central 连接 nRF51822 Peripheral 无法使能Notify!

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

cc2540 协议栈版本:BLE-CC254x-1.3.2

这里有两个问题:

1:用cc2540 Central,搜索到51822 Peripheral 并建立连接,

但是协议栈没有进入simpleBLECentralEventCB( );下面的GAP_LINK_PARAM_UPDATE_EVENT: 事件;

用cc2540 Central,连接cc2541 Peripheral 时,能触发GAP_LINK_PARAM_UPDATE_EVENT: 事件;

程序就是在GAP_LINK_PARAM_UPDATE_EVENT: 里面使能Peripheral 的Notify

问题1:触发GAP_LINK_PARAM_UPDATE_EVENT: 事件,是TI BLE协议栈才有的,还是蓝牙标准要求的,任意一款BLE Peripheral都能触发?

2:用cc2540 Central,搜索到51822 Peripheral 并建立连接,可以通过UUID:0xFFF6进行读写操作,但是无法使能Notify

51822 Peripheral 的UUID、handle:0x000B,使能Notice用的 handle:0x000C确认无误!

重点:我用BTool,往0x000C写入0x0001可以使能51822 Peripheral 的Notice。

用IOS蓝牙软件 LightBlue 也可以使能51822 Peripheral 的Notice。

但是用cc2540 Central的工程写无法使能

代码如下:

attWriteReq_t AttReq;
uint8 ValueBuf[2];

AttReq.handle = (simpleBLECharHd6+1);//0x0036
AttReq.len = 2;
AttReq.sig = 0;
AttReq.cmd = 0;
AttReq.value[0]=LO_UINT16(GATT_CLIENT_CFG_NOTIFY); //0x0001为开notify
AttReq.value[1]=HI_UINT16(GATT_CLIENT_CFG_NOTIFY);
// ValueBuf[0] = 0x01;
// ValueBuf[1] = 0x00;
// osal_memcpy(AttReq.value,ValueBuf,1);
GATT_WriteCharValue( 0, &AttReq, simpleBLETaskId );

问题2:我改怎么实现在cc2540 Central 上使能51822 Peripheral 的Notice。


附上几张图协助分析:

图1:51822 Peripheral的服务

 图2:cc2541Peripheral的服务

你好,

1,.32的协议栈太老了吧,申请到1.4上面去吧。

关注!BTool功能比cc2540Central强大!楼主确定cc2540Central和cc2541 Peripheral的Notify正常通信?

感谢大秦正声的提醒,重新验证了cc2540Central和cc2541 Peripheral的Notify通信,发现cc2541 Peripheral的Notify默认是使能的,不是cc2540Central使能的。

另外cc2540Central使能失败,是因为我把使能的那部分代码放到simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg )里面去执行。

原本是在simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )的GAP_LINK_PARAM_UPDATE_EVENT:事件执行的。

现在51822Peripheral 无法发出更新参数的请求,我只能主机先写死固定handle=0x000C 去使能。

调试成功了吗?cc2541当主机和51822当从机,它们可以互相通讯吗?

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

网站地图

Top