跪求帮忙解决广播停止的问题,实在没着了,万分感谢。
问题描述:
1.在产品(使用CC2541)测试过程中发现:当产品处于一直广播(1秒1次)时,会不定时的停止广播,过约3小时后自动恢复正常。
偶尔发现状态指示灯(1秒周期)停止闪烁,系统时钟看到慢了3小时,如果加看门狗则会复位;有时指示灯在停止广播的时候又正常工作,时钟也对。
上电后出现的时间可能几小时或十几小时,不一定,但出现后,约3小时后均能恢复广播,变量似乎也正常。
将OSAL.C里的休眠函数osal_pwrmgr_powerconserve(); 屏蔽后无此异常现象。
附例程,请帮忙分析一下。
例程描述:
1.例程使用TI 1.4.0 (1.3.2也同样有此问题)协议栈内的SimpleBLEPeripheral程序。
只需将包内SimpleBLEPeripheral替代原文件夹,SimpleProfile替代原有文件夹即可。
2.例程在原来SimpleProfile功能的基础上做了如下更改:
a.由按键触发广播改成一启动后开始广播,且设置1秒1次永不停止。
b.增加了一个周期性开关的IO,以方便LED提示。
c.将simpleGATTprofile.c内的FFF1功能改为读取系统时间。
仅上述改动,其它未作更改。
还有,同样程序放在SENSORTAG开发板上跑,则很少出现。所以我也怀疑是否和硬件有关。
因为测试程序已经非常简化了。但实在又找不到原因。
您好,
1、GAP-通用接入规范:
BLE协议栈的GAP层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止,启动安全功能,设备配置。
GAP层通常扮演以下四种角色中的一种:
广播者——广告发送者,不是可连接的设备
观察者——扫描广告,不能够启动连接
外围设备——广告发送者,是可连接的设备,在单一链路层连接时作为一个从机
中央设备——扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接
在一个典型的蓝牙系统中,外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备。广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称。中央设备接收到广告后发送一个搜索请求给外围设备,外围设备答复一个搜索答复。这就是设备发现的过程,这样中央设备就知道外围设备是一个可连接的设备。中央设备可以发送一个建立连接的请求给外围设备,一个连接情况包含一些连接参数:
连接间隔——在一个BLE连接中跳频机制需要被使用,这样两个设备之间可以在一个特定的通道上进行数据收发,在一个特定的时间之后会跳到一个新的通道上,LL层负责通道切换。这个遇见设备收发数据被称作是连接事件。尽管没有应用程序数据需要收发,两个设备之间仍然会交换链路层数据来保持连接。连接间隔是两个连接事件之间的时间,使用一个单元值为1.25ms的步进。连接间隔从最小值6(7.5ms)到最大值3200(4.0s)。
不同的应用也许需要不同的连接间隔,一个长时间的连接间隔将会节约更多的能量,因为设备可以在两个连接事件之间睡眠更长的时间。但是他会导致数据发送不及时,如果有数据要发送那么他只能够在下一次连接事件到来时才能被发送。
从机延迟——这个参数描述了从机跳过连接事件的次数。这使外围设备具有一定的灵活性,如果它不具有任何数据传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些积蓄力量。这一决定取决于外围设备。
监督超时——这是两个成功的连接事件之间间隔的最大值。如果超过这个时间还未出现成功的连接事件,那么设备将会考虑失去连接,返回一个未连接状态。这个参数值使用10ms的步进。监督超时时间从最小10(100ms)到最大3200(32.0s)。同时超时时间必须大于有效连接事件。
有效连接事件时间 = 连接间隔 X (1 + 从机延迟值)
在某些情况下,中央设备请求与外围设备建立连接包含连接参数对外围设备而言是不利的。在其他情况下,外围设备可以在连接过程中改变连接参数这个取决于外围设备的应用程序。外围设备可以请求中央设备改变连接参数通过设置连接参数更新请求。这个请求是被协议栈的L2CAP处理的。
这个请求包含四个参数:最小连接间隔、最大连接间隔、从机延迟、监督超时时间。这些值代表了外围设备针对连接的期望参数,连接间隔是以范围的形式提供的。当中央设备接收到这个请求, 他有权利决定是接受还是拒绝这些参数。
GAP通常还会负责启动BLE连接的安全功能。只有对通过身份验证的连接而言某些数据是可读或可写的。一旦形成一个连接,两个设备可以通过一个过程被称为配对。进行配对时,密钥建立加密和认证的链接。在一个典型的案例,外围设备需要中央设备提供密钥以完成配对过程。这可能是一个固定值,如“000000”,或可能是一个随机生成的值被提供给用户。中央设备发送正确的密钥后,两台设备交换安全密钥加密和验证的链接。
在许多情况下,相同的中央设备和外围设备将会经常建立连接和断开连接。BLE具有一个安全功能允许两个设备在配对的时候给对方一个长久的安全密钥。此功能称为绑定,使得两个重连设备能够迅速重新确立加密和认证而不需要经过充分的配对过程,只要它们存储长期的密钥信息。
程序中设置的这些参数是否有冲突呢,屏蔽osal_pwrmgr_powerconserve就正常了,说明是时机问题,当然RF性能的好坏也会导致时机不确定。所以在不同的板子上面会有差异。建议您修改广播的时机,参考上面参数详细说明。