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

二、物理通道

物理通道是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后的时序图

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

[置顶] 蓝牙基础知识进阶——Physical channel的更多相关文章

  1. BlueTooth: 蓝牙基础知识进阶——链路控制操作

    转自:http://blog.csdn.net/augusdi/article/details/25887395 七链路控制操作 链路控制操作就是用来描述一个设备是如何加入piconet又是如何从一个 ...

  2. 第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器

    第四章 基础知识进阶第十七节 迭代.可迭代对象.迭代器 一.    引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节 ...

  3. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  4. [置顶] 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam

    由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...

  5. [置顶] STM32移植contiki进阶之三(中):timer 中文版

    鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...

  6. [置顶] C++基础之六:运算符的重载

    网上太多有关运算符的重载了,但是写的太过的详细,不适合新手入门,特别是那什么++和--的前增量后增量重载,一元二元运算符重载,特殊运算符,下标运算符,new和delete,甚至是指针运算符的重载,吓退 ...

  7. android基础知识进阶

    1.android Activity的生命周期 http://blog.csdn.net/hpoi/article/details/4629065 2.android Service的生命周期 htt ...

  8. [置顶] 我的Android进阶之旅------>如何将Android源码导入Eclipse中来查看(非常实用)

    Android源码下载完成的目录结构如如所示: step1:将.classpath文件拷贝到源代码的根目录 Android源码支持多种IDE,如果是针对APP层做开发的话,建议大家使用Eclipse开 ...

  9. [置顶] 我的Android进阶之旅------>Android中制作和查看自定义的Debug版本Android签名证书

    Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和的证书指纹SHA1码来识别的,如百度地图SDK.这样如果使用默认自动生成的debug的话就会给开发调试工作带 ...

随机推荐

  1. div滚动与控制

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head&g ...

  2. Hadoop 安装大纲

    安装centos,配置stable ip address,文件系统,根目录用户密码,hostname,安装相关工具 打开centos,创建hadoop用户,密码.配置eth0,onboot=YES, ...

  3. ASP.NET后台自定义导出Excel

    关于导出,属于老生常谈了,下面就总结下我自己遇到的一些导出吧. 1.使用Excel组件进行导出(需要安装Microsoft Office Excel). 下面为代码,希望可以帮助别人. 1)准备数据源 ...

  4. 【noip2012提高组】国王游戏

    恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面. ...

  5. Metafunction

    Metafunction is a more general idiom than type generator. Metafunctions that produce type(s) as a re ...

  6. python正则表达式练习篇

    练习一: 利用who命令输出所有已经登录系统的用户的信息,并把登录名.用户登录时的电传.登录时间.登录地址利用正则表达式分割开来. 数据的格式: %who wesc console Jun 20 20 ...

  7. smarty模版使用php标签,获取模版变量!

    <ul>{/foreach from=$A key=k item=val/}{/php/} $val = $this->_tpl_vars[val]; $date = substr( ...

  8. jquery中的on事件

    on()函数用于为指定元素的一个或多个事件绑定事件处理函数. 从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind(). delegate(). l ...

  9. PHP json_encode()函数使用

    <?php $tmp = array(); echo json_encode($tmp); //打印 [] echo "\n"; echo json_encode($tmp, ...

  10. [转]用Gson来解析Json数据

    转自太阳尚远的博客:http://blog.yeqianfeng.me/2016/03/02/use_gson_to_parse_json/ 在我们实际开发中像Json和XML这两种格式的数据是最常见 ...