1

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

连接状态下的通信始终 由主机发起,从机返回数据。这里的 master 是一个 GATT 客户端,它与 GATT 服务器(外围设备)通信。

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

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

4

1 回答 1

4

BLE 是时隙的。在连接状态下,有周期性发生的连接事件,其间隔称为connectionInterval

每个连接事件都是主机发起的,这意味着主机发送连接事件中的第一个数据包。

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

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

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

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

这意味着如果无线电在第一次尝试时获得传输的数据包,则通知最多为connectionInterval排队。

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

于 2017-07-06T18:12:15.513 回答