【问题标题】:BLE Missing Packets (Protocol / Spec question)BLE 丢失数据包(协议/规范问题)
【发布时间】:2020-08-21 01:58:55
【问题描述】:

我最近一直在学习 BLE 的具体细节,因为我打算使用 BLE 堆栈进行一些开发工作。我从在线文档和规范中学到了很多东西,但有一个方面我似乎找不到。

BLE 使用跳频进行通信。一旦连接了两个设备(一个主设备和一个从设备),看起来所有通信都是通过主设备启动的,从设备响应每个数据包。我的问题涉及空中数据包的丢失。我关心的主要有两个案例:

  1. 主设备发送一个数据包,该数据包被从设备接收,从设备向主设备发送一个数据包。主服务器没有接收到数据包,或者如果接收到了,则它已损坏。
  2. 主设备发送一个从设备没有收到的数据包。

案例 1 对我来说是“不在乎”(我认为)。基本上主人没有得到回复,但至少,奴隶得到了数据包并可以“同步”到它。主设备做任何事情并尝试在下一个连接事件时传输数据包。

情况 2 是更难的情况。从机没有收到数据包,因此无法将其通信“同步”到当前频道。

当数据包在空中丢失时(特别是情况 2),设备如何准确地相互同步频道跳频序列?是的,有一个频道图,所以从技术上知道下一个连接事件要跳到什么频率。但是,我可以看到所有这些发生的唯一方法是通过基于连接参数的“自定时”机制。这够好吗?我的意思是,考虑到时钟漂移,主机和从机在同一通道上发送和接收的时间会略有不同......最终它们将关闭 1 个通道.. 2 个通道等。是这不是一个真正的问题,因为根据 500ppm 时钟规范,需要“很多”时间才能发生这种情况?我知道有一个主管计时器会在一段时间没有传输有效数据后宣布连接失效。但是,我仍然想知道“跳跃漂移”,它把我带到了下一点。

协议中使用/规定了多少“自我计时”?从设备是否在每个连接间隔都使用来自主设备的有效数据包开始来重新同步通道跳跃?例如,如果(连接间隔+某个窗口)过去,跳到下一个频道,或者如果收到数据包重新同步/重新启动超时计时器。这将是一个独立于主管计时器的跃点计时器。

我无法在核心 5.2 规范中找到此信息。它非常密集,只有 3000 多页……如果有人能指出我在规范或其他地方的相关部分……甚至回答问题,那就太好了。

【问题讨论】:

    标签: bluetooth-lowenergy protocols specifications packet loss


    【解决方案1】:

    从机知道频道映射。如果没有从主设备接收到一个数据包,它将在一个连接间隔后在下一个通道上再次侦听。如果它也没有收到,它会增加一个额外的连接间隔和下一个频道。

    无论 crc 是否正确,当检测到最后一个从主设备接收到的数据包时,从设备也会存储时间戳(或事件计数器)。这称为锚点。这与用于监督超时的时间点不同。

    锚点和下一个预期数据包之间的时间量乘以主机 + 从机精度(例如 500 ppm),得到一个接收窗口,再加上 16 微秒。所以从机在预期的数据包到达时间之前和之后监听这个时间量。

    【讨论】:

    • 看起来我想要的相关信息在 5.2 核心规范中 BLE phy 的第 6 卷中 - 在搜索“anchor”后找到。因此,从机在接收窗口内获取信道映射和自身时间以接收数据包。如果它什么也没得到,则有一堆规则,但它会在一个间隔后移动到下一个频道并在该窗口中收听并像你说的那样继续。有一个特定的句子还指出,slave 必须在每次从 master 获得第一个数据包@一个事件时更新(同步)其时间(第 6 卷,s4.5.7)。这让我足够咀嚼。接受。
    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多