TI cc2540 Central 连接 nRF51822 Peripheral 无法使能Notify!
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当从机,它们可以互相通讯吗?