开发使用的SDK 是 :
CC2640R2 SDK 4.20.00.04
情况1:主机主动断开连接,从机没有进去GAP_LINK_TERMINATED_EVENT,
情况2:因为某种干扰原因,从机断开了但是也没有进入GAP_LINK_TERMINATED_EVENT,
在上述可能的情况下,我用时钟每隔500毫秒调用一次linkDB_NumActive();发现返回值是1. (挂示波器去观察电流消耗,发现没有广播,也不处于连接状态,此后这太从机就处于一种不能被连接的状态,只能重启板子才能恢复)
目前观察到的现象是这样的,我想问有没有API 能确切的反应当前的连接状态?
因为即使我调用linkDB_State();去查看,协议栈也是返回的一个正处于连接的情况,实际上无线已经断开了。(示波器可以观察到)
Kevin Qiu1:
在simple_peripheral例程中,可以使用peripheralStateNotificationCB()查看连接状态
user6313700:
回复 Kevin Qiu1:
这个API具体在哪个头文件里面呢?我尝试下如果断开了,它是否也是返回的虚假状态
Kevin Qiu1:
回复 user6313700:
刚查了下peripheralStateNotificationCB这个是以前的函数,现在要获取连接状态需要在simple_peripheral.c中的回调函数 SimpleBLEPeripheral_processStateChangeEvt 中进行修改
user6313700:
回复 Kevin Qiu1:
主要是我主机明明是断开了,从机却没有接收到GAP_LINK_TERMINATED_EVENT,即使timeout时间到了也没有收到。这个时候从机处于一种很奇怪的状态,(无广播,不能被连接,并且调用linkDB_NumActive();返回时1),从机挂示波器的话发现根本没有广播信号,也没有处于连接状态,反而是处于一种非常低功耗的类似睡眠状态
从机的这种状态和挂掉没区别啊,但是从机的程序时正常运行的,我通过一个状态灯的闪烁可以看到。这种状态要恢复的话只有重启板子。并且这种现象发生的概率不定,有时候是几天发生。但是这个时候我们又不可能进机房去重启这个开发板,问题比较棘手,希望能给一些建议啊
Kevin Qiu1:
回复 user6313700:
主从设备是否都是CC2640r2f, 是否有修改过代码?修改过的话将代码传上来
user6313700:
回复 Kevin Qiu1:
你好,今天做测试发现了新的现象,设备运行了20多个小时候,其中一个从设备出现了异常,应该是从机进入死循环或者说死机了。(系统里面定时的timer进去不了)
目前重启可以恢复,我是否应该加看门狗去测试一下?
之前有发生过类似的情况吗?peripheral 运行一段时间后死机
Kevin Qiu1:
回复 user6313700:
可以尝试加看门狗看问题是否还会出现,你的程序有修改过吗,用例程测试也会出现异常断开?板子是自己制作的吗?
user6313700:
回复 Kevin Qiu1:
想了一下还不能用看门狗,它重启会改变IO状态。我的从设备代码修改过,主要是新的IO口的修改,还有连接参数。目前硬件用的是TI的LUNCHPAD。
1.修改了IO,参照之前你们提供的方法。
2.修改了连接参数,屏蔽了连接参数请求。(由主机决定)
3.只填加了一个可读可写可以notify的特征值。
4.增加了一个timer 去检测连接状态。
目前我将power saving屏蔽掉了测试,看看还会不会有问题,应为之前看你们其它帖子,有的说是这个问题。对于heap的配置,我检查过没有问题。
我的这个应用比较特殊,会涉及高频的连接与断开。