Other Parts Discussed in Thread: CC2541
器件型号: CC2541
您好、
我正在努力在 CC2541 中央器件上完成从 1.4.0 到 1.5.2 的堆栈升级。 外设在回来时迁移到 1.5.2A。
在长时间测试(6-12 小时)中、我注意到 1.5.2 栈中央时间戳的 GATT 消息变得过时、但 1.4.0 栈上不会出现此问题。 通过每 40ms 通过 GATT_Indication 发送一次外设、将其设置为“流“数据。 Central 将接收指示并处理数据以及时间戳、以检查这是新消息还是过时消息。 对于较旧的栈、它似乎没有任何问题、但对于较新的栈、几个小时后、时间戳会显示它不再收到新消息。
我需要一些关于如何进一步找出问题根源的见解。 我问过的问题和我尝试过的事情:
- 时间戳检查代码是否正确? 是的、它与旧栈相同、对于旧栈来说似乎不是问题。 我尝试打印出刷新失败的时间戳、时间戳的值不变。 因此、检查不会将正常消息误认为过时。
- 连接间隔已更新。 较短的连接间隔似乎会延迟此问题的发生、但不确定它是否 100%相关。 当使用 40ms 连接间隔时、这似乎会在建立连接后大约 10 分钟内发生。 现在、它处于 8ms 连接间隔、进入连接需要数小时。
- 在这种情况下、数据包嗅探和调试器不起作用。 TI 数据包监听器在捕获大约 1-2 分钟的数据后崩溃、Wireshark 可能会达到可能的 10 分钟、那么时间对它来说也太多。 CC 调试器将不会持续数小时到会话中、此时 IARworkbench + CC 调试器无响应并开始导致其他意外问题。
- 在流式传输时通过有效连接定期轮询栈和堆大小。 通过每 5 秒轮询一次测试了一种情况。 不会根据堆大小变化注意到大内存消耗/泄漏。
- 我还尝试向外设发出另一个 GATT 写入、以指示其再次开始流式传输、但外设代码的结构是在发生链路建立事件时翻转流式传输开关。 这适用于较旧的栈中央器件。
目前的解决方法是结束 BLE 活动并强制重新连接、但不应该这样做、有时需要很长时间才能重新连接。
如果您能向我指出正确的方向、找出我还能做些什么来找出问题的根源、我将不胜感激。