何时/如何在物理层发送BLE GATT通知/指示

时间:2017-07-06 13:59:29

标签: bluetooth bluetooth-lowenergy bluetooth-gatt

我读了蓝牙核心规范。 V4.2 / BLE(..)

连接状态下的通信始终主机启动,从机返回数据。 这里的主人是与GATT服务器(外围设备)交谈的GATT客户端。

当主设备在发送数据之前总是要求时,我不明白GATT功能“通知”它如何通过较低层工作。

有人知道它是如何运作的吗?

1 个答案:

答案 0 :(得分:2)

BLE是时间戳。在连接状态下,会有定期发生的连接事件,其间隔名为 connectionInterval

每个连接事件都是主启动的,这意味着主服务器在连接事件中发送第一个数据包。

为了保持连接活动,slave supervisionTimeout 至少发送一次数据包(并得到确认)。还有其他超时使得从站在此之前做出响应,其中一个是 slaveLatency ,即从站在响应master之前可以忽略的连接事件的数量(即使没有响应不是断开的原因,它可能导致协议中的其他问题,从而断开连接)。另一方面,master应该在每个连接事件上发送一个数据包。

connectionInterval slaveLatency supervisionTimeout 是规范中连接参数的计时部分。连接间隔范围为7.5 ms至4秒, slaveLatency 从0(然后slave应响应每个连接事件)到与 supervisionTimeout / 2对应的连接事件数。(完整定义见6.B.4.5.1)

因此,基本上,任何有效负载(包括GATT通知)都在从机或主机的堆栈缓冲区中排队,直到下一个连接事件发生。无论方向(主设备或从设备到从设备),方必须等待下一个连接事件发送其数据包。

在给定的连接事件中,每个参与方轮流发送一个数据包,可选地没有任何有用的有效负载,直到没有人再发送任何内容为止。 (见6.B.4.5.6)

这意味着如果无线电获取第一次尝试传输的数据包,则通知最多排队等待 connectionInterval

这就是为什么必须正确协商连接参数的原因,这也是为什么它们根据设备类型而不同的原因。例如,HID(鼠标,键盘,遥控器)通常允许连接间隔小于10毫秒,而心率监测器通常连接间隔超过一秒。