BlueTooth 关于蓝牙你不可不知道的几个基础常识

今天晓东和大家一起来看看蓝牙相关的几个基础知识,这样大家在看具体的代码的时候能够做到“手里有枪,心中不慌”。

一、基本概念

微微网——Piconet

    Q1:蓝牙的网络结构是怎么样的?

蓝牙是一个点对点或者点对多点的拓扑结构,他们的交互都是基于一个物理通道(Physical Channel)上的。也就是说点对点之间有一条物理通道,点对多点共享一条物理通道。我们把这些共用一个物理通道的集合称之为微微网(piconet)。

在一个微微网中只有一个设备能称之为Master,其余的设备都是Slave。需要注意的是活跃的slave最多只能是7个,当然我们可以连接更多的slave,但是在同一时间,除了7个活跃的slave外别的slave不能处于活跃的状态。我们把他们称之为parked的slave,也就是说他们是在睡大觉。若是piconet中活跃的设备不足7个,他们就可以随时醒来,而且不需要再进行任何connection建立的过程。具体的可参见下图一,其中绿色的为Master,黑色的为Slave。

图一 piconet示意图

这个你不禁会要问:

Q2:piconet是否有可能交叉呢?

这是一个很好的问题,是的piconet是有可能交叉的,也就是说一个piconet中的master有可能在别的piconet中它只是一个slave,反之一个piconet中的slave他有可能在另外一个piconet中扮演master的角色。当然一个piconet中的slave也是有可能在另外一个piconet中仍然是slave,但是一个piconet中的master是不可能在另外一个piconet中扮演master的,这个道理应该还是很简单吧。这里我们提出一个新的概念,就是有同样设备的piconet组成的网络我们称之为scatternet。

图二 Scatternet示意图

如图二所示,每一个piconet都是只有一个master,而一个piconet中的master在另外一个piconet中可以是一个slave,如图二中设备1,他在以2为master的piconet中就是slave。同样的设备2在以1为master的piconet中也是slave。反过来看,一个piconet中的slave在另外一个piconet中可以为master,比如设备1和2。当然也是可以在另外一个piconet中仍然作为slave,如设备4在以3为master的piconet中就是仍然是slave。需要注意的是,一个piconet中的master在另外一个piconet中是不能够作为master的。否则要么出现一个piconet中有两个master或者这就不是两个piconet的问题。

传输速率

Q3:蓝牙的传输速率怎么样?

蓝牙是在空气中进行传输的,他有两种传输模式:

1、Basic Rate:它的传输速率是1Mbps。

2、Enhanced Data Rate:a)初级调制模式:2Mbps;b)二级调制模式:3Mbps。

时钟相关

Q4:蓝牙有内部时钟吗?

答案是肯定的,蓝牙内部有native的clock。和外部的真实时间是没有关系的。它最低能表示的单元必须是312.5μs,就是半个slot。也就是说时钟的频率需要是3.2kHz。有四个周期在蓝牙中是很重要的,他们分别是312.5μs,625μs,1.25ms以及1.28s。他们对应的就是我们俗称的CLK0,CLK1,CLK2和CLK12。

Q5:蓝牙能容忍的时钟偏差是多少啊?

这是一个很好的问题。在spec上规定,正常情况下native的clock的偏差允许范围是+/-20ppm,当然在一些底功耗的模式下,比如park,sniff,hold等模式下,这个偏差的范围有所扩大,可以到+/-250ppm。

蓝牙地址

Q6:蓝牙地址就是我们看到的那一堆随机数吗?

Spec中对蓝牙地址的格式是有很严格的规定的。他主要分为两个区域三个部分。

1、company_assigned:这个部分主要是LAP,就是Low Address Part,需要注意的是在这个部分0X9E8B00~0X9E8B3F的值是不能使用的。这部分的值是用于设备的特殊类型值的搜索的,除了这个部分,其余的值都是可以使用的。

2、company_id:包含UAP(Upper Address Part)和NAP(None significant Address Part)。他们可以使用任何的值,只不过只有UAP是有意义的,NAP是没有意义的。

这两者的组成部分见下图:

图三 BD_ADDR的结构

工作频段

Q7:蓝牙工作的频段是在哪个区间

这是个很好的问题,通常我们都说蓝牙工作在2.4G的频段。其实它真实的工作频段范围是2400~2483.5MHz。它RF通道的设置如下表一所示。

表一蓝牙工作频段


频段范围


RF通道


2.400~2.4835GHz


F=2.402+k MHz,k=0,….,78

RF通道就是我们通常说的传输的通道,它一共有79个通道,从2.402GHz开始,每隔1MHz有一个RF通道。

若您还有任何关于蓝牙基础知识的疑问可以直接在下面留言,我会及时回答的,谢谢~~

http://blog.csdn.net/u011960402/article/details/17878163

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/sownchz/p/10174215.html

时间: 2024-10-07 02:44:54

BlueTooth 关于蓝牙你不可不知道的几个基础常识的相关文章

我以前不知道的 Session

之前只知道 Session 是服务器与客户端的一个会话,有默认过期时间,是服务器端的技术,与之对应的是 Cookie 技术,是客户端技术. 下面的几点是之前不知道的:[或者是忘了] 1 . Session是什么时候创建的? 2 . SessionId的组成? 3 . Session存储在哪里? 回答上面的问题: 1 .  在 Java中,Session是在调用 HttpServletRequest实例的 getSession()时创建的[不同语言会有不同时机的创建], 2 .  Session

你可能不知道的字符比较中的“秘密”

原文:你可能不知道的字符比较中的"秘密" 有时候,一个简单的字符比较,你可能也会被弄得晕头转向.为什么这样说呢?请看下面这个例子(代码就不贴了,因为后来发现页面不支持这两个字符的显示).猜测一下,会是什么结果?是1还是0? 回答这个问题之前,请再继续向下看.先创建几个不同排序规则的数据库(见数据库名可知). Figure-1: 在SQL_Latin1_General_CP1_CI_AS排序规则下的比较 Figure-2: 在Chinese_PRC_CI_AS排序规则下的比较 在SQL_

你所不知道的html5与html中的那些事(二)

文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作都可以达到真正的云方式呢?这一系列的问题你是否已经想明白了呢? 本系列文章将为您一一解答你所不知道的关于html5与html中的那些事;具体会包括如:html5新的理念与想法,html5的新标签的用意与具体开发中场景应用,html5与css3的感情经历(用法搭配),包括html5的父亲html的一些

你所不知道的html5与html中的那些事(一)

分类: Web开发 文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作都可以达到真正的云方式呢?这一系列的问题你是否已经想明白了呢? 本系列文章将为您一一解答你所不知道的关于html5与html中的那些事;具体会包括如:html5新的理念与想法,html5的新标签的用意与具体开发中场景应用,html5与css3的感情经历(用法搭配),包括html5

Android生命周期里你或许不知道的事

Android生命周期估计连初学者都再熟悉不过的东西了,但这里我抛出几个问题,或许大家以前没有想过或者可能认识的有些错误. 一.当A启动B时,A和B生命周期方法执行的先后顺序是怎样的?当按返回键返回时,又是怎样的?(读者可以先想想,可能会跟你的答案不一致) A--->B时,打印结果如下: 按返回键B--->A,打印结果如下: 结论:先执行当前显示Activity的onPause方法,接着执行完将要显示Activity的生命周期方法,最后再执行当前显示Activity的其它生命周期方法 二.生命

JavaScript你所不知道的困惑(2)

困惑一: var obj1 = new Object(); var obj2 = obj1; obj1.name = "阳光小强"; alert(obj2.name); //输出结果:阳光小强 JavaScript中的5个基本类型:Undefined.Null.Boolean.Number和String都是按值访问的,可以操作保存在变量中的实际的值,内存空间如下: var num1 = 5; var num2 = num1; 引用类型的值是保存在内存中的对象,JavaScript不允许

JavaScript你所不知道的困惑(1)

困惑一: 先看一个例子: function test(){ message = "hi"; } test(); alert(message); 会输出字符串"hi" 在函数内部使用var定义的变量是局部变量,省略var操作符的变量是全局变量. 困惑二: alert(undefined == null) 结果是"true" 我们知道在js中分为基本类型和引用类型,基本类型包括number.string.boolean.undefined.null.

JavaScript中你可能不知道的九件事

今天凑巧去W3School扫了一遍JavaScript教程,发现从中看到了不少自己以前没有注意过的细节. 我这些细节列在这里,分享给可能同样不知道的朋友: 1.使用 document.write() 仅仅向文档输出写内容.如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖: 实例 <!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <p>

你根本不知道的冷知识,看完我惊呆了,原来.....

有些冷知识,非常的有趣,而且说不定就是之后与人交流的谈资,所以,这些必须收藏. 历史文学 1. 朱熹一辈子不吃豆腐 3.方孝儒是中国历史上唯一一个被"株十族"的人 4.猫是<圣经>里唯一没有提到的家养动物 5.埃及金字塔四面均为等边三角形,正对东南西北四个方位 6.条条大路通罗马的原因如图: 科学百科 1. 兔子不会流汗 2.玫瑰和苹果属同科,百合和大葱属同科 3.一张纸不能对折8次 4.北极熊是左撇子 5. dreamt 是唯一以"mt"结尾的英文单词