从本篇文章开始,晓东将会和大家一起来学习一些蓝牙的比较高阶的基础知识。
二、物理通道
物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了。
Q1:物理通道有哪些类型
物理通道通常可以分为四种类型:
1、basicpiconet channel
2、adaptedpiconet channel
这两种channel是两个已经连接设备之间通信使用的。也就是说他们和特定的微微网之间是相关联的。
3、inquiry scanchannel:用于discovering蓝牙设备
4、page scanchannel:用于连接蓝牙设备。
Basic Piconet Channel
Q2:Basicpiconet channel是如何工作的
在Basic piconetchannel中,它会把通道分为以625μs为单位的时间长度(slot),使用的是TDD的策略进行传输,可以理解为TX和RX是时分双工的。需要注意的是packet的开始和slot的开始需要是对齐的。从目前的packet type来看,最长会占用5个time slot。多packet的slot传输情况见下图四。
图四 多slot packet的传输示意图
Q3:为什么都是占奇数个slot啊,有偶数个的么?
从目前来看,各种packet type所占的slot只有三种,分别占1,3,5个slot,暂未有偶数个的slot的packet出现。另外,需要注意的是master的tx需要在偶数个的slot开始,rx必须在奇数个的slot开始。
packet的平均漂移和625μs相比,不能超过20ppm。瞬时的时间和平均时间偏差不能超过1μs。
Q4:既然有时间的偏差,那么rx的时候是否有对应的机制
是的,在rx的时候,我们是用一个windows来监听的,而不是说就在625μs那个点去监听。目前的监听window的大小是20μs,也就是说允许的误差是+-10μs,这样的误差容忍度还是很高的。图五是以单packet为例来介绍的正常情况下的TX/RX示意图。
图五 master的TX/RX示意图
同样的windows也发生在slave的rx过程中,不详细介绍。
Q5:既然时间的要求如此严格,master和slave是如何同步时钟的
就使用的时钟而言,master就是使用的它的native的时钟,而slave则是在它的native时钟上加上对应的offset得到和master同步的时钟。这个offset是在inquiry过程中交互得到的。为了防止时钟的偏移,slave在每次收到master的packet的时候都需要刷新offset。时钟的得到方法见下图六。其中六-a)是master中时钟的产生,六-b)是slave时钟的产生。
图六 master和slave的时钟产生示意图
Adapted piconet channel
Q6: adapted piconetchannel有何特别之处
adapted piconetchannel是用于连接支持AFH(Adapter Frequency Hopping)的设备时使用的。和Basic相比,他的最大不同之处在于它可能没有使用全部的79个频点,但是它使用频点的数目最小值是20。也就是说若是环境很差,79个频点只有不到20个频点是干净可用的,那么AFH机制将无法运行,也就没有所谓的自适应调频了,表现到最终的用户体验上你看到的就是音乐的卡顿啊,或者打电话的断音等等。
Page scan physical channel
Q7:master和slave的角色是在连接过程中才确定的,在page scan这个过程中是否也有master和slvae之分
这个问题是一个看起来很简单,其实很专业的问题了。一般来说,在master和slave还没有确定之前,我们称执行page的那个设备为master,而page scan(也就是等待page)的那个设备为slave。需要注意的是这个master和slave和最终建立连接之后的master和slave并不是对应的,这之间有可能发生role switch等一系列的操作。后面的inqiry scan也是类似的,就不多说了。
Q8:page时所使用的时钟就是native的clk吗
为了更好更快地page到对方,在真正page的时候并没有使用native的clk,而是采用了一个预测的clk,希望能够尽量和slave的clk相接近。这之间有一个offset的偏移,这个偏移一般使用inquiry的信息中的偏移,在Android中只有10分钟之内的inquiry信息才会被使用,毕竟这个clk也是会变化的,时间过长这种inquiry到的clk offset就没有什么实际意义了。page过程中使用的clk如下图七所示。
图七 page时的clk示意图
Q9:Page scan和basicpiconet channe有什么差别
总得来说,各种机制都是差不多的。一个比较大的差别在于时间上,因为page的packet很小(也是固定的),所以为了更好地利用时间,他不是625μs才发送一次,而是在625μs中发送了两次,也就是312.5μs发送一次,这也是蓝牙clk最小的时间间隔了。于是从master的角度来看,我们可以看到的内容就如下图八所示了。
图八 page scan过程master的tx rx时序图
如上所说,可以很清晰地看到一个slot中发送了两个packet。同时在rx的时候也在两个时间点前后进行了监听。这样就可以响应slave在两个时间点发送的response。
这样的机制对slave而言就会有两种可能,一种是它在master发送第一个packet的时候slave就收到了,这种情况和625μs发送一次是一样的,就不再多说了。另外一种情况则是slave在master发送第二次packet的时候才收到,那么他会在收到之后625μs回应,master收到这个回应之后就不再等待625μs了,而是在下一个slot开始就是回应了。具体看图九所示。
图九 slave在master第二次发送后收到的时序图
这样看起来还是比较清晰的,蓝色的packet就是真正收到的packet。
Inquiry scan physicalchannel
Q10:inquiry scan和basic有何差别
其实inquiryscan和page scan比较类似,他也是312.5μs发送一次,比较大的差别在于他的slave的回应比较长,超过了312.5μs,这样假如它的回应是在第二次就会出现slave占用master to slave slot的情况,如图中红色圈圈所示,这是允许的。见下图十。
图十 inquiryscan在第二次受到inquiry packet后的时序图
关于物理通路或者蓝牙其它方面,你还有任何问题都可以在下面留言提出,我会及时解答的。谢谢~~