繁体   English   中英

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

[英]When/How is a BLE GATT Notify/Indicate is send on physical layer

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

连接状态下的通信始终由主机发起,从机随后返回数据。 此处的主机是与GATT服务器(外围设备)通信的GATT客户端。

当主机始终必须在发送数据之前请求时,我不了解GATT功能“通知”它们如何分别通过较低的层工作。

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

BLE已时隙化。 在连接状态下,会定期发生连接事件 ,间隔时间称为connectionInterval

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

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

connectionIntervalslaveLatencysupervisoringTimeout是规范中连接参数的计时部分。 连接间隔的范围是7.5 ms到4秒, slaveLatency从0(然后,slave应在每个连接事件上响应)到对应于supervisoringTimeout / 2的连接事件数。(有关完整定义,请参见6.B.4.5.1)

因此,基本上,任何有效负载(包括GATT通知)都会在从属或主控的堆栈缓冲区中排队,直到发生下一个连接事件为止。 无论方向是什么(从站到主站或从主站到从站),参与方都必须等待下一个连接事件才能发送其数据包。

在给定的连接事件内,各方依次发送一个数据包(可选地,没有任何有用的有效负载),直到没有人可以发送更多信息为止。 (见6.B.4.5.6)

这意味着,如果radio第一次尝试发送发送的数据包,则通知最多会在connectionInterval队列中排队。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM