- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
cc2541有什么办法定位BLE不广播的原因?
录入:edatop.com 点击:
用cc2541做了个数据记录产品,APP设置了参数后2541调用GAPRole_TerminateConnection断开连接,开始将采集回来的数据保存到2541的flash(这段时间ble应在广播状态),至采集结束自动关机(2541进入低功耗状态)。但是现在刚进入采集状态时可以搜索的到ble的广播,在隔一段不确定的时间后(不一定在什么时候,似乎是随机的)就会搜索不到ble的广播,但数据采集还在继续直至正常结束。
在采集的这段时间里只有两个事件在运行:Notify发送数事件(此时有只是在轮询,并没有Notify)和数据记录的事件。用户程序并没有调用蓝牙相关的API,flash数据记录函数有用到HAL_ENTER_CRITICAL_SECTION、HAL_EXIT_CRITICAL_SECTION屏蔽中断和更改MEMCTR寄存器操作。
怀疑可能和中断(便不可屏蔽中断?)有关,不确定,也许是其他问题。ble协议栈封装起来了也不好跟踪下去,请问有什么办法定位BLE不广播的原因?
在采集的这段时间里只有两个事件在运行:Notify发送数事件(此时有只是在轮询,并没有Notify)和数据记录的事件。用户程序并没有调用蓝牙相关的API,flash数据记录函数有用到HAL_ENTER_CRITICAL_SECTION、HAL_EXIT_CRITICAL_SECTION屏蔽中断和更改MEMCTR寄存器操作。
怀疑可能和中断(便不可屏蔽中断?)有关,不确定,也许是其他问题。ble协议栈封装起来了也不好跟踪下去,请问有什么办法定位BLE不广播的原因?
理论上,CC2541上最基本的的状态集应该是 开机->开始广播->如果被连接,则退出广播状态,进入连接状态->连接断开自动进入广播状态 这样变化的
你的这个问题我也怀疑程序跑到其他地方去了,建议你调试的时候还是把串口引出来。
在广播连接断开,采集开始结束,周期的中断内设置串口输出一串数据,这样比较容易定位程序跑到哪里去。
至于下面的协议栈,使用TI最新的协议栈,协议栈不会有问题。也不用在这上面纠结。