zoukankan      html  css  js  c++  java
  • [置顶] 蓝牙基础知识进阶——Physical channel

    从本篇文章开始,晓东将会和大家一起来学习一些蓝牙的比较高阶的基础知识。

    二、物理通道

       物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了。

        Q1:物理通道有哪些类型

        物理通道通常可以分为四种类型:

        1basicpiconet channel

        2adaptedpiconet channel

          这两种channel是两个已经连接设备之间通信使用的。也就是说他们和特定的微微网之间是相关联的。

        3inquiry scanchannel:用于discovering蓝牙设备

        4page scanchannel:用于连接蓝牙设备。

    Basic Piconet Channel

        Q2Basicpiconet channel是如何工作的

        在Basic piconetchannel中,它会把通道分为以625μs为单位的时间长度(slot),使用的是TDD的策略进行传输,可以理解为TXRX是时分双工的。需要注意的是packet的开始和slot的开始需要是对齐的。从目前的packet type来看,最长会占用5time slot。多packetslot传输情况见下图四。

     

    图四 多slot packet的传输示意图

     

     

         Q3:为什么都是占奇数个slot啊,有偶数个的么?

        从目前来看,各种packet type所占的slot只有三种,分别占1,3,5slot,暂未有偶数个的slotpacket出现。另外,需要注意的是mastertx需要在偶数个的slot开始,rx必须在奇数个的slot开始。

        packet的平均漂移和625μs相比,不能超过20ppm。瞬时的时间和平均时间偏差不能超过1μs

        Q4:既然有时间的偏差,那么rx的时候是否有对应的机制

        是的,在rx的时候,我们是用一个windows来监听的,而不是说就在625μs那个点去监听。目前的监听window的大小是20μs,也就是说允许的误差是+-10μs,这样的误差容忍度还是很高的。图五是以单packet为例来介绍的正常情况下的TX/RX示意图。


    图五 masterTX/RX示意图

        同样的windows也发生在slaverx过程中,不详细介绍。

        Q5:既然时间的要求如此严格,masterslave是如何同步时钟的

        就使用的时钟而言,master就是使用的它的native的时钟,而slave则是在它的native时钟上加上对应的offset得到和master同步的时钟。这个offset是在inquiry过程中交互得到的。为了防止时钟的偏移,slave在每次收到masterpacket的时候都需要刷新offset。时钟的得到方法见下图六。其中六-a)是master中时钟的产生,六-b)是slave时钟的产生。


    图六 masterslave的时钟产生示意图

    Adapted piconet channel

       Q6: adapted piconetchannel有何特别之处

        adapted piconetchannel是用于连接支持AFHAdapter Frequency Hopping)的设备时使用的。和Basic相比,他的最大不同之处在于它可能没有使用全部的79个频点,但是它使用频点的数目最小值是20。也就是说若是环境很差,79个频点只有不到20个频点是干净可用的,那么AFH机制将无法运行,也就没有所谓的自适应调频了,表现到最终的用户体验上你看到的就是音乐的卡顿啊,或者打电话的断音等等。

    Page scan physical channel

       Q7masterslave的角色是在连接过程中才确定的,在page scan这个过程中是否也有masterslvae之分

        这个问题是一个看起来很简单,其实很专业的问题了。一般来说,在masterslave还没有确定之前,我们称执行page的那个设备为master,而page scan(也就是等待page)的那个设备为slave。需要注意的是这个masterslave和最终建立连接之后的masterslave并不是对应的,这之间有可能发生role switch等一系列的操作。后面的inqiry scan也是类似的,就不多说了。

       Q8page时所使用的时钟就是nativeclk

       为了更好更快地page到对方,在真正page的时候并没有使用nativeclk,而是采用了一个预测的clk,希望能够尽量和slaveclk相接近。这之间有一个offset的偏移,这个偏移一般使用inquiry的信息中的偏移,在Android中只有10分钟之内的inquiry信息才会被使用,毕竟这个clk也是会变化的,时间过长这种inquiry到的clk offset就没有什么实际意义了。page过程中使用的clk如下图七所示。


    图七 page时的clk示意图

    Q9Page scanbasicpiconet channe有什么差别

        总得来说,各种机制都是差不多的。一个比较大的差别在于时间上,因为pagepacket很小(也是固定的),所以为了更好地利用时间,他不是625μs才发送一次,而是在625μs中发送了两次,也就是312.5μs发送一次,这也是蓝牙clk最小的时间间隔了。于是从master的角度来看,我们可以看到的内容就如下图八所示了。


    图八 page scan过程mastertx rx时序图

        如上所说,可以很清晰地看到一个slot中发送了两个packet。同时在rx的时候也在两个时间点前后进行了监听。这样就可以响应slave在两个时间点发送的response

        这样的机制对slave而言就会有两种可能,一种是它在master发送第一个packet的时候slave就收到了,这种情况和625μs发送一次是一样的,就不再多说了。另外一种情况则是slavemaster发送第二次packet的时候才收到,那么他会在收到之后625μs回应,master收到这个回应之后就不再等待625μs了,而是在下一个slot开始就是回应了。具体看图九所示。


    图九 slavemaster第二次发送后收到的时序图

        这样看起来还是比较清晰的,蓝色的packet就是真正收到的packet

    Inquiry scan physicalchannel

              Q10inquiry scanbasic有何差别

        其实inquiryscanpage scan比较类似,他也是312.5μs发送一次,比较大的差别在于他的slave的回应比较长,超过了312.5μs,这样假如它的回应是在第二次就会出现slave占用master to slave slot的情况,如图中红色圈圈所示,这是允许的。见下图十。

    图十 inquiryscan在第二次受到inquiry packet后的时序图


        关于物理通路或者蓝牙其它方面,你还有任何问题都可以在下面留言提出,我会及时解答的。谢谢~~


  • 相关阅读:
    IDEA 如何恢复默认布局 和显示项目目录导航
    jdbcTemplate 和 Thymeleaf模板引擎 查询 到模板赋值例子
    <meta charset="UTF-8"> 出错
    spring boot Thymeleaf模板引擎 最简单输出例子
    spring boot jpa 无法自动生成表
    IDea 运行程序就说ClassNotFind:com.jdbc.mysql.Driver
    pom.xml 里面dependency 添加spring-boot-starter-data-jpa 后运行出错
    IDEA 同时启动两个环境
    cannot resolve symbol
    Shell之expect的测试
  • 原文地址:https://www.cnblogs.com/riasky/p/3508885.html
Copyright © 2011-2022 走看看