本文主要是介绍蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节4.1-4.3 空口协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 4 空口协议
- 4.1 帧间隔
- 4.1.1 帧间间隔
- 4.1.2 最小AUX帧间隔
- 4.1.3 最小子事件间隔
- 4.2 timing要求
- 4.2.1 主动时钟精度
- 4.2.2 休眠时钟精度
- 4.2.3 延迟范围
- 4.2.4 窗口扩展
- 4.3 链路层设备过滤
- 4.3.1 白名单
- 4.3.2 广播过滤策略
- 4.3.3 扫描过滤策略
- 4.3.3.1 扩展扫描过滤策略
- 4.3.4 发起态过滤策略
- 4.3.5 建立定期同步状态过滤策略
4 空口协议
空口协议由多重访问方案、设备发现及链路层链接方法组成。
4.1 帧间隔
4.1.1 帧间间隔
在同一个通道索引下的连续2个数据包的时间间隔成为帧间间隔,它由上一个数据包的最后一个比特的到下一个数据包的第一个比特之间的时间间隔定义,帧间间隔被成为T_IFS
并且位150us。
4.1.2 最小AUX帧间隔
最小AUX帧间隔为一个包含AuxPr
的数据包和它标示的辅助包之间的最小时间间隔,它是由包含AuxPtr
的数据包的最后一个比特到它的辅助包的第一个比特之间的时间间隔定义,最小的AUX帧间隔被称为T_MAFS
并且为300us。
图4.1展示了最小AUX帧间隔的一个示例:
4.1.3 最小子事件间隔
最小子事件间隔为一个子事件的最后数据包的最后一个比特到下一个子事件的第一个数据包的第一个bit之间的时间间隔。
最小子事件间隔被称为T_MSS
且为150us。
图4.2展示了在CIS中最小子事件间隔的应用示例:
图4.2展示了在BIS中最小子事件间隔的应用示例:
4.2 timing要求
链路层使用2种时钟精度的一种:在Section 4.2.1
所述情况下,应使用主动时钟精度,其他情况下使用休眠时钟精度。
本节中指出的时钟精度只适用于发送数据包时的设备,用于定时接收数据包的时钟可能有精度误差,但是接收设备需要允许这个误差,例如,如果接收设备时钟精度为2000ppm则最大的偏差为45us,对于已经进行时间同步的上一个事件1秒之后的事件,设备至少需要提前2045µs开始监听,并至少持续到比它正常结束的时间晚2045µs。
4.2.1 主动时钟精度
在连接、BIG或CIG事件期间,在主动扫描期间,以及发起连接请求时的数据包发送的平均timing由主动时钟精度决定,其中漂移小于或等于±50ppm,所有瞬时timing与平均timing的偏差不得超过2µs。
注意:这意味着数据包发送的开始时间在上一个包结束以后的150±2us
。
具体的说,这些要求适用于下面的这些间隔:
- 同一个连接事件的相邻的数据包。
- 在同一个BIG或者CIG事件的数据包,即使他们在不同的CISes或BISes或不同的子事件。
- 广播包和包含
SCAN_REQ, AUX_SCAN_REQ, CONNECT_IND, 或AUX_CONNECT_REQ PDU
的数据包 - 包含
SCAN_REQ
的数据包和包含SCAN_RSP PDU
的响应包。 - 包含
AUX_SCAN_REQ PDU
的数据包和包含AUX_SCAN_RSP PDU
的响应包。 - 包含
AUX_CONNECT_REQ PDU
的数据包和包含AUX_CONNECT_RSP PDU
的响应包。
4.2.2 休眠时钟精度
其他所有的活动的平均timing由休眠时钟精度决定,其中漂移小于或等于±500ppm,所有瞬时timing和平均timing的偏差不得大于16us,主动时钟最坏情况下的偏差和漂移应该小于或等于休眠时钟的偏差和漂移。
在连接中,设备使用的睡眠时钟精度不应低于最近发送的LL_CLOCK_ACCURACY_REQ或LL_CLOCK_ACCURACY_RSP PDU
的SCA字段中提示的最坏的情况。如果在最近的连接中,链路层还没有初始化或响应休眠时钟精度更新过程(见
Section 5.1.14),master应使用至少与用于创建连接的
CONNECT_IND or AUX_CONNECT_REQ PDU`的SCA字段中提出的最坏情况下的精度相同的精度的休眠时钟,slave需要使用精度为±500ppm或更高的休眠时钟。
注意:这些要求适用于下面的时间间隔:
- ACL锚点之间的时间(见
Section 4.5.7
) - CIS锚点之间的时间(见
Section 4.5.14.1
) - BIG锚点之间的时间(见
Section 4.4.6.4
) - 广播和定期广播间隔和advDelay值(见
Section 4.4.2.2
) - 在同一个扩展广播事件或定期广播事件中的数据包间隔
- 由广播PDUs中的SyncInfo字段和AuxPtr字段指定的所有偏移量
注意:这意味着具有500ppm睡眠时钟精度的2秒连接间隔的master将需要在的锚点的两侧拓宽1ms加16µs加上在连接间隔内从机实际使用的时钟精度的任何允许值
的窗口。
4.2.3 延迟范围
当两个设备之间的距离超过几米时,信号在它们之间传播所花的时间与Section 4.2.1
中定义的主动时钟精度有重要关系。当设备在监听一个可能在D米以外的设备时,它应该在数据包可能已经被传输的最后时间(例如T_IFS + 2µs)之后侦听额外的2D * 4 ns。
(1/c ~= 3.3 * refractive index ns/m,因此4ns是一个保守的限值)
光速时30KM/s,因此1/c ~= 3.3ns/m,refractive index
为介质折射率。
图4.4 展示了master的数据包发送时的延迟范围。
4.2.4 窗口扩展
在各种情况下,链路层都期待在一个确定的窗口(从receiveWindowStart 到 receiveWindowEnd
)或确定的时间(receiveWindowStart 和receiveWindowEnd相等的时候
)中接收数据包。但是由于主动时钟精度(见Section 4.2.1
)和休眠时钟精度(见Section 4.2.2
),对于链路层发送时候来说,窗口的确切时间是不确定的,因此接收端需要调整监听时间来容纳这个不确定性。
增加的监听时间称作窗口扩展,假设时钟精度以百万分之一(ppm)表示,通过下面公式进行计算:
当使用主动时钟时,J为2,当使用休眠时钟时,J为16,其他的参数在表4.1中定义:
注意:txCA
为链路层发送的时钟精度,timeOf LastSync
为链路层接收能够同步它的时钟到链路层发送时钟的最近时间。
注意:这只适用于从正确的发送者接收到包的事件,不管CRC是否匹配,时间是否重新同步。
如果接收端有关于链路层发送的时钟的更准确精度信息
,它可以选择一个较小的值作为transmitterAllowance
。
windowWidening = transmitterAllowance + receiverAllowance
其中,receiverAllowance
是接收端为自己的时钟精度所做的余量。
接收端需要在receiveWindowStart
前的windowWidening
开始监听,直到receiveWindowEnd
后的windowWidening
结束。
ACL连接中的windowWidening
应小于((connInterval ÷ 2) - T_IFS μs)
,如果windowWidening
达到了((connInterval ÷ 2) - T_IFS μs).
,则这个连接被认为已经丢失(见Section 4.5.12
)。
如果CIS或NSE < 3的BIS的windowWidening
达到了((ISO_Interval ÷ 2) - T_IFS)us
,则链路层需要终止CIS(见Section 5.1.16
)或停止和BIG同步。
如果CIS或NSE ≥ 3的BIS的windowWidening
达到了Sub_Interval
,则链路层需要终止CIS(见Section 5.1.16
)或停止和BIG同步。
4.3 链路层设备过滤
链路层通过对端设备的设备地址来进行设备过滤,链路层通过链路层设备过滤来最小化它需要响应的设备的数量。
链路层需要支持链路层设备过滤,除非它只支持广播状态并且只支持不可链接不可扫描的广播。
广播状态,扫描状态,发起状态,建立定期同步状态的过滤策略是相互独立的,当链路层在广播状态时,应使用广播过滤策略,其他状态也分别使用对应状态的过滤策略。当链路层不支持广播态,扫描态,发起态或建立定期同步状态的时候,对应的过滤策略也不要求支持。
4.3.1 白名单
链路层用来做设备过滤的设备的集合叫做白名单。
白名单包括一组用于链路层设备过滤的白名单档案,一份白名单档案包括设备地址和设备地址类型(公共地址或随机地址),同样也有特殊的设备地址类型:匿名地址:这个类型匹配所有没有附带地址的广播。所有支持链路层设备过滤的链路层需要支持存储至少一条白名单档案。
复位的时候,白名单为空。
白名单由Host来配置并由链路层用作广播,扫描或初始化设备过滤,但不应用在定期同步建立中,这允许Host配置链路层在不唤醒Host的情况下进行请求操作。
所有的设备过滤策略使用相同的白名单。
4.3.2 广播过滤策略
广播过滤策略决定了广播者的链路层如果处理扫描和连接请求。
当链路层使用不可链接和不可扫描的定向广播事件,可扫描的定向广播事件,可链接的定向广播事件时,广播过滤策略可以被忽略。否则链路层需要使用由Host配置的下面集中广播过滤策略之一:
- 链路层需要处理来自所有设备的扫描和连接请求(例如,未使用白名单的情况下),这是复位以后的默认值。
- 链路层处理来自所有设备的连接请求,并且只处理来自白名单的设备的扫描请求。
- 链路层处理来自所有设备的扫描请求,并且只处理来自白名单设备的连接请求。
- 链路层只处理来自白名单设备的扫描和连接请求。
4.3.3 扫描过滤策略
扫描过滤策略决定扫描者的链路层如何处理广播和扫描回应PDUs,链路层需要使用由Host配置的下面几种扫描过滤策略之一:
- 链路层处理所有的广播和扫描回应PDUs(不使用白名单的情况下),当然,不包含扫描者设备地址的定向广播PDU会被忽略,这是复位以后的默认值。
- 链路层只处理白名单上的设备的广播和扫描回应PDUs,不包含扫描者设备地址的定向广播PDU会被忽略。
同一时间只支持一种扫描过滤策略。
注意:扫描过滤策略不影响发起态或建立定期同步状态,尽管他们涉及到了扫描广播PDUs。
4.3.3.1 扩展扫描过滤策略
如果链路层支持扩展广播过滤策略,则下面的模式需要被支持:
- 链路层处理所有的广播和扫描回应PDUs(不使用白名单的情况下),当然,如果定向广播PDU的
TargetA
不是扫描者的设备地址或可解析的私有地址的话会被忽略。 - 链路层只处理白名单上的设备的广播和扫描回应PDU,如果定向广播PDU的
TargetA
不是扫描者的设备地址或可解析的私有地址的话会被忽略。
4.3.4 发起态过滤策略
发起态过滤策略决定了发起者的链路层如何处理广播PDUs,链路层使用由Host配置的下面几种发起态过滤策略之一:
- 链路层忽略掉白名单,处理通过Host配置的一个特定设备的可链接广播的PDUs。
- 链路层处理白名单上的所有设备的可链接广播PDUs。
如果链路层接收到从广播者处接收到了一个可连接的定向广播,但是设备不在白名单中并且不是Host指定的设备地址,则这个可链接的定向广播会被忽略。
同一时间只支持一种发起态过滤策略。
4.3.5 建立定期同步状态过滤策略
建立定期同步状态过滤策略决定了扫描者的链路层在尝试与定期广播进行同步时如何处理广播PDUs,链路层使用由Host配置的下面几种建立定期同步状态过滤策略之一:
- 链路层忽略定期广播者列表并且处理Host配置的特定设备的广播PDUs。
- 链路层处理定期广播者列表的所有设备的广播PDUs。
如果链路层接收到来自不在定期广播者列表或Host配置的特定设备的广播者的包含SyncInfo
字段的广播PDU,或者广播具有列表或Host中没有指明的广播SID,这个SyncInfo
字段需要被忽略。
同一时间只支持一种建立定期同步状态过滤策略。
定期广播的同步和扫描同时进行,但是这两个活动的过滤策略是互相独立的,建立定期同步状态而不是扫描态过滤策略来决定使用哪一个广播PDUs来对定期广播进行同步(同步成功后发送给Host)。如果接收到的PDU只符合这两种策略的一种,则它只能被使用这种策略的过程处理而不是另一个过程处理。
当链路层使用定期广播同步传输流程(见Section 5.1.13
)接收到定期广播序列时,链路层应该忽略定期广播者列表。
这篇关于蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节4.1-4.3 空口协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!