【发布时间】:2020-08-21 01:58:55
【问题描述】:
我最近一直在学习 BLE 的具体细节,因为我打算使用 BLE 堆栈进行一些开发工作。我从在线文档和规范中学到了很多东西,但有一个方面我似乎找不到。
BLE 使用跳频进行通信。一旦连接了两个设备(一个主设备和一个从设备),看起来所有通信都是通过主设备启动的,从设备响应每个数据包。我的问题涉及空中数据包的丢失。我关心的主要有两个案例:
- 主设备发送一个数据包,该数据包被从设备接收,从设备向主设备发送一个数据包。主服务器没有接收到数据包,或者如果接收到了,则它已损坏。
- 主设备发送一个从设备没有收到的数据包。
案例 1 对我来说是“不在乎”(我认为)。基本上主人没有得到回复,但至少,奴隶得到了数据包并可以“同步”到它。主设备做任何事情并尝试在下一个连接事件时传输数据包。
情况 2 是更难的情况。从机没有收到数据包,因此无法将其通信“同步”到当前频道。
当数据包在空中丢失时(特别是情况 2),设备如何准确地相互同步频道跳频序列?是的,有一个频道图,所以从技术上知道下一个连接事件要跳到什么频率。但是,我可以看到所有这些发生的唯一方法是通过基于连接参数的“自定时”机制。这够好吗?我的意思是,考虑到时钟漂移,主机和从机在同一通道上发送和接收的时间会略有不同......最终它们将关闭 1 个通道.. 2 个通道等。是这不是一个真正的问题,因为根据 500ppm 时钟规范,需要“很多”时间才能发生这种情况?我知道有一个主管计时器会在一段时间没有传输有效数据后宣布连接失效。但是,我仍然想知道“跳跃漂移”,它把我带到了下一点。
协议中使用/规定了多少“自我计时”?从设备是否在每个连接间隔都使用来自主设备的有效数据包开始来重新同步通道跳跃?例如,如果(连接间隔+某个窗口)过去,跳到下一个频道,或者如果收到数据包重新同步/重新启动超时计时器。这将是一个独立于主管计时器的跃点计时器。
我无法在核心 5.2 规范中找到此信息。它非常密集,只有 3000 多页……如果有人能指出我在规范或其他地方的相关部分……甚至回答问题,那就太好了。
【问题讨论】:
标签: bluetooth-lowenergy protocols specifications packet loss