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

二、物理通道

物理通道是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. < meta > 元素(转)

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  2. UVA 11491 Erasing and Winning

    题意: 给你一个n位整数,让你删掉d个数字,剩下的数字要尽量大. 分析: 用了vector数组模拟.如果当前要插入的数>vector数组里的最后一位数,就替换且d-- 代码: #include ...

  3. Hadoop 安装 (4) SSH无密码验证配置

    验证SSH 和 RSYNC 已经安装好了 Master 生成密码对以及对于 Slave 的无密码登录. 见:http://www.cnblogs.com/xia520pi/archive/2012/0 ...

  4. php的SQL连接操作的方法

    初学php,于是一开始就在sql(具体点说是mysql)里受挫严重.于是这里记下一些方法. 首先是基本方法.基本方法现在我不用了,所以我就附一下hustoj中的部分吧 基本方法的数据库连接操作: if ...

  5. FileUpload控件

    FileUpload控件 属性:FileName: 获取上传的文件名 HasFile: 是否选择(存在)上传的文件 ContentLength: 获得上窜文件的大小,单位是字节(byte) 方法:Se ...

  6. jsp中利用java代码换行

    从数据库中取出的10条商品数据分两行显示,每行5条. <% for(int i=0; i<latestProducts.size(); i++) { Product p = latestP ...

  7. oracle体系结构

    oracle体系结构有四个部分组成分别为:oracle 服务器.用户进程.服务器进程.其他关键文件.其中oracle服务器又有实例(instance)和database组成是一个数据库管理系统. 一. ...

  8. GitHub问题之恢复本地被删除的文件

    折腾了真久,GitHub commit之后,我手痒把本地的一个文件给删了,然后一直Git pull都发现不能恢复.远程库里面还是有该文件的.就是我想将远程库的文件回到本地被删除了的位置. 特别的是,我 ...

  9. wifi 攻破

    链接1 wifi 加密方式 1,wep加密 2.WPA/WPA2-PSK加密 WPA2 的破解方式: 1 爆力破解 2,pin 破解 1) 先破解 pin 码 2)再用 minidwep-gtk 破解

  10. Aix6.1安装openssh

    一.软件下载 1.官方网站下载: openssl IBM官方网站下载:https://www14.software.ibm.com/webapp/iwm/web/reg/download.do?sou ...