蓝牙精讲 (2)

上传人:无*** 文档编号:158385415 上传时间:2022-10-04 格式:DOC 页数:16 大小:175KB
收藏 版权申诉 举报 下载
蓝牙精讲 (2)_第1页
第1页 / 共16页
蓝牙精讲 (2)_第2页
第2页 / 共16页
蓝牙精讲 (2)_第3页
第3页 / 共16页
资源描述:

《蓝牙精讲 (2)》由会员分享,可在线阅读,更多相关《蓝牙精讲 (2)(16页珍藏版)》请在装配图网上搜索。

1、蓝牙1.1标准改进设备协同工作 蓝牙技术展现给人们的是一种全新的商业模式:通过无线连接毫不费力就可与同事交换商业信用卡、文件和其它信息,或让人们建立属于自己的个人网络,把他们的PC连接到手持设备、移动电话、打印机、扫描仪、传真机和复印机等。新的Bluetooth1.1(蓝牙1.1)标准使这些都成为现实提供了保障。 在此之前的Bluetooth1.0b虽然定义了详细的功能,但缺乏严格的实施准则,使这个标准的关键部分协同工作能力出现了隐患,最终导致Bluetooth1.0b未能完全履行其当初的承诺,而且由于协同工作能力问题的不断出现,也阻碍了更广泛地实施。显而易见,如果厂商A的Bluetooth电

2、话不能与厂商B的BluetoothPC卡正常工作,那么厂商C的Bluetooth打印机也一定畅销不了。 对此,在Bluetooth1.1中提出了相应的措施,其中最重大的改进就是验证。为安全起见,一般来说蓝牙设备之间的通信都要进行加密。当两个蓝牙设备之间建立连接时,首先要做的事情之一就是交换密钥以确认对方的身份。如果密钥不匹配,这两个设备就不能对话。而是否能生成正确的密钥取决于设备之间的最终关系,首先启动对话的设备称为主设备,另一个设备称为从设备。在Bluetooth1.0b中,连接对话启动时,两个设备争夺主从地位的竞争就陷入了矛盾的状态,虽然它们都能执行一定的算法生成密钥,但密钥是不一样的,而

3、且由于时机的原因,往往会出现问题。也就是说,如果在启动对话时,从设备处理信息的速度大于主设备,那么这种竞争就会导致误将从设备当成主设备,在这种错误基础上,设备之间当然不会生成匹配的密钥。Bluetooth1.1非常明确地定义了设备验证所需的各个步骤,彻底纠正了这个问题。它要求每个设备必须明确承认(或协调)首先启动对话的设备,从而确认自己在主从关系上的角色。另一个与协同工作能力相关的问题就是频率。Bluetooth设备将通用的2.4GHz频段分为79个跳频信道,使用一种称做跳频扩频的技术来传输数据。这样主设备与从设备必须在2.4GHz上下保持同步以维护它们的连接,如果不能在相同时刻同时到达跳频点

4、,就会失去通信。少数国家,如法国、日本、西班牙等将2.4GHz作为非商业目的频段,例如军事通信等,为适应这些国家的需要,Bluetooth1.0b定义了第二种跳频数,将2.4GHz频段分为23个跳频信道。工作在这两种不同跳频数的设备是互不兼容的。为解决这个问题,蓝牙特别兴趣工作组与这些使用23个跳频信道的国家协商,最终也使用79个跳频信道设备,这样所有的Bluetooth1.1设备都使用79个跳频信道在2.4GHz频段上进行通信。 不兼容的数据格式也是阻碍Bluetooth1.0b设备协同工作能力的问题之一。Bluetooth支持的通道数多达每个包5个,使其最大的数据传输率为每信道720kbp

5、s。但并不是所有的Bluetooth设备都支持每个包5个通道,如果一个主设备发送的通道数超出了从设备的支持范围,那么通信就会失败。在Bluetooth1.0b中,从设备不能告诉主设备通信时能使用多少个通道。但Bluetooth1.1改变了这种局面,使从设备可以根据实际情况告诉主设备应该发送多少个通道/包,还可以将包的大小等信息随时反馈给主设备。Bluetooth1.1标准已经在今年上半年制定完成,一些1.1的兼容产品也已经问世。微微网蓝牙(Bluetooth)这个技术名称来源于公元900年左右古代丹麦统治者“HaraldBluetooth”的名字,这位君王在位期间统治了丹麦和挪威的大部分地区。

6、和古代的那位“蓝牙”相比,今天的蓝牙势将统治全球大多数家庭从日本到欧洲或者美国都会采用蓝牙技术来改变人们的生活。蓝牙系统既可以实现点对点连接也可以实现一点对多点连接。在一点对多点连接的情况下,信道由几个蓝牙单元分享。两个或者多个分享同一信道的单元构成了所谓的微微网(piconet)。一个微微网中存在1个主单元和最多可达7台的活动从单元。这些设备可以处在以下几个状态情况下:active(活动)、park(暂停)、hold(保持)和sniff(呼吸)。多个相互覆盖的微微网形成了所谓的分布网(scatternet)。蓝牙的结构和运行蓝牙系统由无线电单元、链路控制单元、链路管理支持单元以及主机终端接口

7、所组成。蓝牙运行在2.4 GHz ISM (工业、科学和医疗)频段。蓝牙无线电波根据天线的传送能力可以实现从10米(家庭)到100米(机场候机大厅)范围内的无线通信。依赖于设备的类型,蓝牙无线电可以传输最高100 毫瓦(20 dBm)最低1 毫瓦(0 dBm)的功率。 蓝牙采用跳频技术抑制干扰、降低信号衰减,使用时分复用TDD和高斯频移键控GFSK (Gaussian Frequency Shift Keying)调制实现全双工数据传输。蓝牙协议采用了电路交换和分组交换技术。信道被划分为时隙,时隙则可以预留给同步数据包。 蓝牙协议栈支持针对数据的异步无连接(ACL)链路和针对语音的多达三条同步

8、定向(SCO)链路,此外蓝牙还支持异步数据和同步语音的组合链路,即所谓的DV分组类型。各种语音信道都支持64 Kb/s双向同步信道。异步信道则支持最高723.2 Kb/s上行链路和57.6 Kb/s下行链路(反之亦然)或者433.9 Kb/s对等链路。协议栈主要由作为物理层的基带以及链路层的链路管理器和控制器所组成。更上层的协议接口取决于这些层次所实现的方式以及应用程序的使用.协议栈主要由物理层协议基带(Baseband)和链路层协议LMP和位于上层的适应层协议L2CAP组成,更上层协议通过该层和蓝牙协议栈中的低层协议交互。无线电结构蓝牙无线电(Bluetoothradio)作为蓝牙设备的一部

9、分为其提供电气接口,设备通过该接口,采用经过调制的载波频率和无线承载业务(CDMA、GSM和DECT等)传输数据包。设备采用的无线通信频率位于2.4 GHz ISM (工业、科学和医用频率)频段,该频段只需要很小的高效天线、优良的芯片级RF前端(LNA,上行转换器和下行转换器)、电源控制器、GFSK调节器和一个起收发器作用的发送/接收开关即可正常工作。在本文的以下部分,我们就会参考SiliconWave.Com开发的蓝牙无线调制解调器和控制器讨论一下蓝牙无线电的结构,以上的这两种设备采用了经过绝缘硅(SOI)BICMOS工艺处理的两种芯片。蓝牙无线调制解调器集成电路无线调制解调器执行GFSK调

10、制和解调、符号和帧时序恢复等功能。调制解调器在一个芯片上即包含了完整的集成无线收发器以及跳频合成器。该无线单元基本上如下图所示:蓝牙控制器集成电路控制器实现了基带协议及其功能。在收信端它执行错误检测和归一化功能。链路控制器硬件实现了基本的、重复性的寻呼、查询、寻呼扫描和查询扫描等功能 。它还向主机系统提供了USB以及音频编解码接口。控制其结构如下所示:无线电频带和信道如前所述,蓝牙无线电运行于2.4 GHz ISM频带。在这个频带上,美国和欧洲只能使用其中的 83.5 MHz可用频段,其中定义了相隔1 MHz的 79个RF频道。日本、西班牙和法国只能使用间隔1 MHz的23个RF频道。国家和地

11、区频率范围RF频道欧洲和美国2400 - 2483.5 MHzf = 2402 + k MHzk = 0,.,78日本2471 - 2497 MHzf = 2473 + k MHzk = 0,.,22西班牙2445 - 2475 MHzf = 2449 + k MHzk = 0,.,22法国2446.5 - 2483.5 MHzf = 2454 + k MHzk = 0,.,22频道由伪随机调频序列的79个或者23个RF频道所代表。调频序列对微微网而言是唯一的并且由主单元的蓝牙设备地址所决定;调频序列的相位则由主单元的蓝牙时钟决定。频道被划分为时隙,每个时隙的长度为625微秒,每个时隙对应一个

12、RF跳频。名义上的跳频速度是1600 hops/s。微微网中的所有蓝牙单元针对频道计时和进行跳频同步。发送器和接收器需求发送器采用高斯频移键控GFSK(Gaussian Frequency Shift Keying)技术,也就是说,一个二进制的1由正向频率偏移表示,而一个二进制的0则由负向频率偏移表示。蓝牙调制信号的定义如下所示:调制GFSK调制索引0.32 +/- 1%BT0.5 +/- 1%位速率1Mbps +/- 1 ppm调制数据PRBS9频率精度+/- 1 ppm蓝牙设备根据发送器的输出功率可以划分为三种功率类型。功率控制器即根据设备的功率需要来限制和优化输出功率。功率类型最大输出功

13、率最小输出功率1100 mW (20 dBm)1 mW (0 dBm)22.5 mW (4 dBm)0.25 mW (-6 dBm)31 mW (0 dBm)N/A实际的灵敏级别在原始位错误率BER达到0.1 % 的输入级时定义。蓝牙接收器要求实际灵敏度达到-70 dBm或者更好。蓝牙基带基带基带就是蓝牙的物理层,它负责管理物理信道和链路中除了错误纠正、数据处理、调频选择和蓝牙安全之外的所有业务。基带在蓝牙协议栈中位于蓝牙无线电之上,基本上起链路控制和链路管理的作用,比如承载链路连接和功率控制这类链路级路由等。基带还管理异步和同步链路、处理数据包、寻呼、查询接入和查询蓝牙设备等。基带收发器采用

14、时分复用TDD方案(交替发送和接收),因此除了不同的跳频之外(频分),时间都被划分为时隙。在正常的连接模式下,主单元会总是以偶数时隙启动,而从单元则总是从奇数时隙启动(尽管他们可以不考虑时隙的序数而持续传输)。ACL和SCO链路基带可以处理两种类型的链路:SCO(同步连接)和ACL(异步无连接)链路。SCO链路是微微网中单一主单元和单一从单元之间的一种点对点对称的链路。主单元采用按照规定间隔预留时隙(电路交换类型)的方式可以维护SCO链路。SCO链路携带语音信息。主单元可以支持多达三条并发SCO链路,而从单元则可以支持两条或者三条SCO链路。SCO数据包永不重传。SCO数据包用于64 kB/s

15、语音传输。ACL链路是微微网内主单元和全部从单元之间点对多点链路。在没有为SCO链路预留时隙的情况下,主单元可以对任意从单元在每时隙的基础上建立ACL链路,其中也包括了从单元已经使用某条SCO链路的情况(分组交换类型)。只能存在一条ACL链路。对大多数ACL数据包来说都可以应用数据包重传。逻辑信道蓝牙有五种逻辑信道,他们可以用来传输不同类型的信息。LC(控制信道)和LM(链路管理)信道用于链路层,而UA、UI和US信道则用于携带异步、类异步和同步用户信息。蓝牙编址蓝牙有4种基本类型的设备地址:BD_ADDR48位长的蓝牙设备地址(IEEE802标准)。该地址划分为LAP(24位地址低端部分)、

16、UAP(8位地址高端部分)和NAP(16位无意义地址部分)。AM_ADDR3位长的活动成员地址。所有的0信息AM_ADDR都用于广播消息。PM_ADDR8位长的成员地址,分配给处于暂停状态的从单元使用。AR_ADDR访问请求地址(access request address)被暂停状态的从单元用来确定访问窗口内从单元主单元半时隙,通过它发送访问消息。24816LAPUAPNAP蓝牙数据包微微网信道内的数据都是通过数据包传输的。通常的数据包格式如下所示:标准的蓝牙数据包ACCESS CODE 72HEADER 54PAYLOAD 0-2745单位:位访问码(Access code)用于时序同步、

17、偏移补偿、寻呼和查询。访问码分为三类:信道访问码CAC(Channel Access Code)、设备访问码DAC(Device Access Code)和查询访问码IAC(Inquiry Access Code)。信道访问码标识微微网(对微微网唯一),而DAC则用于寻呼及其响应。IAC用于查询。数据包报头包含了数据包确认、乱序数据包重排的数据包编号、流控、从单元地址和报头错误检查等信息。数据包的数据部分(payload)可以包含语音字段、数据字段或者两者皆有。数据包可以占据一个以上的时隙(多时隙数据包),而且可以在下一个时隙中持续传输。数据部分还可以携带一个16位长的CRC码用于数据错误检测

18、和错误纠正。SCO数据包则不包括CRC。有5种普通类型数据包、4种SCO数据包和7种ACL数据包。其简要说明请见下表。蓝牙数据包类型类型名称说明CommonID携带设备访问码(DAC)或者查询访问码(IAC)。占据一个时隙。CommonNULLNULL数据包没有数据,用于获得链路信息和流控。占据一个时隙,无确认。CommonPOLL无数据和确认。主单元用它检查从单元是否启动。占据一个时隙。CommonFHS表明蓝牙设备地址和发送方时钟的特殊控制数据包。用于寻呼主单元响应、查询响应和跳频同步。占据一个时隙。2/3 FEC编码。CommonDM1支持任何链路中的控制消息。还可以携带规则用户数据,占

19、据一个时隙。SCOHV1携带10个信息字节。通常用作语音传输。1/3 FEC编码。占据一个时隙。SCOHV2携带20个消息字节。通常用作语音传输。2/3 FEC编码。占据一个时隙。SCOHV3携带30个信息字节。通常用作语音传输。无FEC编码。占据一个时隙。SCODV数据-语音组合数据包。语音字段没有FEC保护。数据字段采用2.3 FEC编码。语音字段从不重传,数据字段可以重传。ACLDM1携带18个消息字节。2/3 FEC编码。占据一个时隙。ACLDH1携带28个信息字节。无FEC编码。占据一个时隙。ACLDM3携带123个信息字节。2/3 FEC编码。占据3个时隙。ACLDH3携带185个

20、信息字节。无FEC编码。占据3个时隙。ACLDM5携带226个信息字节。2/3 FEC编码。占据5个时隙。ACLDH5携带341个信息字节。无FEC编码。占据5个时隙。ACLAUX1携带30个信息字节。类似DH1但没有CRC代码。占据1个时隙。纠错纠错方式有三种:1/3 速率FEC、2/3速率FEC和ARQ。采用1/3速率FEC则每个位被重复三遍作为冗余;2/3方式则采用一个生成多项式把10位代码编码为15位代码。ARQ方式下,数据包被重传,直到最终收到确认(或者超时)。蓝牙使用快速的不编号确认,通过设置适当的ARQN值来使用正确认和负确认。如果传输超时,蓝牙丢弃数据包并处理下一个数据包。蓝牙

21、控制器流控和同步蓝牙建议在ACL和SCO链路中采用先入先出(FIFO)队列处理数据包的收发。链路管理器(Link Manager)填充这些队列,链路控制器负责自动清空队列。如果这些RX FIFO 队列全满,流控就会避免丢弃数据包和防止阻塞。如果数据没有收到,STOP表示符即被接收方的链路控制器插入到返回数据包的报头中被传送。当发送方收到STOP表示符,它就冻结其FIFO队列。如果接收方准备完毕即可发送GO数据包从而再次恢复数据流传输。我们已经知道,蓝牙收发器采用时分复用(TDD)技术方案。这意味着它可以采用同步方式实现交替地传送和接收操作。主单元数据包传输的平均时间相对于理想的625毫秒时隙必

22、定不会快于20 ppm。平均延迟时间应当小于1毫秒。微微网由主单元的系统时钟同步。主单元的蓝牙设备地址(BD_ADDR)决定了跳频序列和信道访问码;主单元的系统时钟确定跳频序列的相位。主单元通过查询方式控制信道上的流量。在微微网存在期间主单元从不调节其系统时钟。从单元为了匹配主单元时钟则采用时序偏移以适应其内部时钟。蓝牙时钟应该达到312.5微秒的精度。为了让接收方的访问相关器可以搜索到正确的信道访问码并和发送方保持同步,精确接收时间允许有一个20微秒的不确定窗口。当从单元从保持状态返回时,它即可和更大的不确定窗口发生相关直到从单元不再与时隙交迭。暂停的从单元周期性地唤醒以侦听来自主单元的信号

23、并重新同步自身的时钟偏移。控制器状态蓝牙控制器主要运行在以下两个状态:待命(Standby)和连接(Connection)。微微网内总共有7种子状态可用于增加从单元或者实现连接。这些状态是寻呼(page)、寻呼扫描(page scan)、查询(inquiry)、查询扫描(inquiry scan)、主单元响应(master response)、从单元响应(slave response)和查询响应(inquiry response)。待命状态是蓝牙单元的默认低功耗状态。这种状态下只有设备的自身时钟在运行而且不存在同任何其他设备之间的交互。在连接状态,主单元和从单元可以采用信道(主单元)访问码和主

24、单元蓝牙时钟交换数据包。所采用的跳频方式是信道跳频方案。正常情况下,两台蓝牙设备之间的连接是如下进行的。首先,主单元使用GIAC和DIAC查询一定范围内(查询子状态)的蓝牙设备。如果附近的蓝牙设备正在侦听这些查询(查询扫描子状态),它就会通过发送自己的地址和时钟信息(FHS数据包)给主单元(查询响应子状态)来响应主单元。发送这些信息之后,从单元就开始侦听来自主单元的寻呼消息(寻呼扫描)。主单元在发现范围内的蓝牙设备之后可以寻呼这些设备(寻呼子状态)以建立连接。处于寻呼扫描状态的从单元如果被该主单元寻呼到,则从单元可以立即用自己的设备访问码(DAC)作为响应(从单元响应子状态)。主单元接收到来自

25、从单元的响应之后即可传送主单元的实时时钟、BD_ADDR、BCH奇偶位以及设备类别(FHS 数据包)作为响应。从单元收到该FHS数据包后,主单元和从单元即进入连接状态。下面我们简要说明一下以上的各个状态:寻呼(Page)该子状态被主单元用来激活和连接从单元。主单元通过在不同的跳频信道内传送从单元的设备访问码(DAC)来发出寻呼消息。寻呼扫描(Page scan)在该子状态下,从单元在一个窗口扫描存活期内侦听自己的设备访问码(DAC)。在该扫描窗口内从单元以单一跳频侦听(源自其寻呼跳频序列)。从单元响应(Slave response)从单元在该子状态下响应其主单元的寻呼消息。如果处于寻呼扫描子状

26、态下的从单元和主单元寻呼消息相关即进入该状态。从单元接收到来自主单元的FHS数据包之后即进入连接状态。主单元响应(Master response)主单元在收到从单元对其寻呼消息的响应之后即进到该子状态。如果从单元回复主单元则主单元发送FHS数据包给从单元,然后主单元进入连接状态。查询(Inquiry)查询用于发现相邻蓝牙设备的身份。发现单元收集蓝牙设备地址和所有响应查询消息的单元的时钟。查询扫描(Inquiry scan)在该状态下,蓝牙设备侦听来自其他设备的查询。此时扫描设备可以侦听一般查询访问码(GIAC)或者专用查询访问码(DIAC)。查询响应(Inquiry response)对查询而

27、言,只有从单元才可以响应而主单元则不能。从单元用FHS数据包响应,该数据包包含了从单元的设备访问码、内部时钟和某些其他从单元信息。连接状态连接(Connection)状态开始于主单元发送POLL数据包,通过这个数据包主单元即可检查从单元是否已经交换到了主单元的时序和跳频信道。从单元即可以任何类型的数据包响应。连接状态的蓝牙设备可以处于以下4种状态之下:活动(Active)、保持(Hold)、呼吸(Sniff)和暂停(Park)模式。蓝牙技术中一个显著的技术难点就是如何实现这些状态之间的迁移,特别是从暂停到活动(或者反之)更是相当有难度。这些模式在以下简要说明:活动(Active)该模式下,主单

28、元和从单元通过侦听、发送或者接收数据包而主动参与信道操作。主单元和从单元相互保持同步。呼吸(Sniff)该模式下,为了获得主单元发送给自己的消息而侦听每个时隙的从单元在指定的时隙上嗅探。结果从单元可以在空时隙睡眠而节约功率。保持(Hold)该模式下,某台设备可以临时不支持ACL数据包并进入低功耗睡眠模式,从而为寻呼、扫描等操作提供可用信道。暂停(Park)当某台从单元无需使用微微网信道却又打算维持和信道的同步时,它可以进入暂停模式,这种模式是一种低功耗模式,几乎没有任何活动。设备被赋予一个暂停成员地址(Parking Member Address:PM_ADDR)并失去其活动成员地址(Acti

29、ve Member Address:AM_ADDR)。蓝牙安全蓝牙安全是很重要的一个课题。在链路层,安全通过对方认证和信息加密而得到维护。出于基本安全的目的,我们需要为每台设备采用唯一的公共地址(BD_ADDR)、两个密钥(认证密钥和加密密钥)和随机数生成器。首先,某台设备通过发出一个质询进行认证,其他设备随后必须根据这个质询、其BD_ADDR、两者分享的链路密钥发送针对该质询的响应。认证之后,通信即可使用加密。链路密钥的类型分成4种:联合(combination)密钥、单元(unit)密钥、临时(temporary)密钥和初始(initialization)密钥。链路管理器在讨论了基带及其重

30、要特性之后,现在我们就来了解一下链路管理协议LMP(Link Manager Protocol),链路管理器位于基带之上的链路层。链路管理器和链路控制器链路管理器用于管理安全、链路建立及其控制。链路管理器可以同其他链路管理器交谈以交换信息,此外,链路管理器还可以使用某些预定义链路级命令控制通过链路管理器的消息。链路管理器对上层协议的支持有点模糊但换个角度看,也许用上层接口来执行模式管理、安全管理、QoS管理等算法更好些。这些算法可以从用户那里获得输入信息。比方说,如果用户请求某个低级操作(家庭或者房间内的低层次操作),那么链路管理器就会和其他链路管理器交涉功率控制,这样交涉的双方都可以根据预先

31、设置的算法进入某种类型的低功耗模式。还有,如果通信中安全不是一个大问题,那么用户就可以通过选择某些降低加密强度的选项来确定所采用的安全层次,然后系统即可通知链路管理器执行该操作。认证和加密管理信息交换和请求蓝牙的链路管理器可以从其他链路管理器那里请求时钟偏移(主单元请求从单元告诉它目前从单元存储的时钟偏移,而该时间偏移则是从单元自身在和主单元进行某些数据包交换的过程中得到的)、时隙偏移(时隙偏移就是微微网内主单元和从单元传送的开始时隙之间的时间差,前者的时隙传送PDU,后者的时隙中PDU内的BD_ADDR即是主单元。时间差的单位是毫秒。时隙偏移对主-从交换和微微网间通信非常有用)、计时精度(时

32、钟漂移和抖动)、链路管理器版本和各类支持特性如认证、SCO数据包等。模式管理和SCO连接链路管理器还可以处理主-从交换过程和模式交换过程(强迫或者请求某台设备把所处模式变更为以下模式之一:保持、呼吸或者暂停)。在暂停模式下,链路管理器会负责广播消息给暂停的设备、处理信号参数以及唤醒暂停的设备等任务。除了以上的特性之外,链路管理器还可以处理功率控制(降低或者提高功率)、通过预留时隙和交换SCO参数建立SCO链路。如果设备之间打算采用链路管理器以上层建立连接,那么必须打开两台设备之间的连接。L2CAP采用协议复用、分段和重组操作以及组抽象等方式向高层协议提供了连接和无连接数据服务。L2CAP允许高

33、层协议和应用程序发送、接收L2CAP 数据包(长度最高可达到64 KB)。L2CAP 只支持ACL链路。L2CAP采用了信道的概念在蓝牙设备不同应用之间建立不同的路径。这些信道都由信道标识符(CID)表示,代表设备上每个应用程序连接的逻辑端点。CID是一个16位长的数字,其中0x0001到0x003F一段保留给特定L2CAP功能使用(0x0001是信令信道,0x0002 是无连接接收信道,其他都被保留或者禁用)。连接标识符(CID)L2CAP的设计目的就是提供一种类似TCP/IP函数调用的接口。在NSBLUE环境下,L2CAP按照以下方式处理连接和发送数据。cid = l2cap-openL2

34、CAPConnection(ui-getContext(); l2cap-send(cid,data,len); l2cap-recv(cid,data,len);以上代码中,“cid”就是信道标识符,“data”是字符指针而“len”则是数据data的长度。“getContext()”函数返回本地环境,比如“沃尔马特连锁超市”和“机场”等。CID可以从空闲CID池获得(该存储池可以按块分配以节约内存)。你可以参考“蓝牙协议中连接的建立”了解更多信息。协议复用L2CAP使用L2CAP连接请求(Connection Request )命令中的PSM字段实现协议复用。L2CAP可以复用发给上层协议

35、的连接请求,这些上层协议包括服务发现协议SDP(PSM = 0x0001)、RFCOMM(PSM = 0x0003)和电话控制(PSM = 0x0005)等。分段和重组分段和重组(SAR)操作通过支持最大传输单元MTU(其大小比最大的基带数据包更大)用于提高传输效率。这样就可以减少由于高层协议采用基带数据包传输所带来的网络负载。L2CAP将高层数据包分段成所谓的“块(chunk)”,这种块可以被传递给链路管理器,后者再传输块并使用HCI以及数据包头所提供的信息把他们重组为L2CAP数据包。SAR的实现几乎没有为基带数据包带来多少负载。基带数据包中数据部分的首字节(也称作帧头)中有两个被定义的L

36、_CH位,这个L_CH即可被用来表示L2CAP 数据包的开始和持续(第1个段的L_CH应当为“10”。持续段的对应部分则设置为“01”。为了避免因为数据包乱序而产生的任何重组问题,所有关联某个L2CAP 数据包的L2CAP段都必须在其他L2CAP 数据包被发送给同一单元之前传递给基带。此外,“基带所采用的停等协议(Stop and Wait)必须在新的数据包被发送之前保证收到正确的数据包。这样就避免了数据包的乱序,正如有线连接的TCP/IP协议下基于“窗口”通信的传输方式类似。L2CAP 的事件和行为L2CAP的操作采用了上下层之间收发的事件和命令。这些事件包括来自上层的连接请求、写数据请求或

37、者断开连接请求等。低层则可以通过事件通知L2CAP入站连接、断开连接或者其他请求等。如果某单元的L2CAP需要和其他单元的L2CAP通信,它就可以使用某些特定的命令完成这项任务,这些命令叫做信令命令。命令通常用在链路级连接建立或者已经存在之后建立连接信道。L2CAP有7种运行状态:CLOSED、W4_L2CA_CONNECT_RSP、W4_L2CAP_CONNECT_RSP、CONFIG、OPEN、W4_L2CAP_DISCONNECT_RSP和W4_L2CA_DISCONNECT_RSP等。这些状态的存在促使L2CAP连接和TCP连接非常相象。信令代码代码说明0x00保留0x01命令拒绝0x

38、02连接请求0x03连接响应0x04配置请求0x05配置响应0x06不连接请求0x07不连接响应0x08回应请求0x09回应响应0x0a信息请求0x0b信息响应连接蓝牙设备故障定义和假设我们这里举例说明的故障实例处于典型的蓝牙微微网中。假设你想通过输入“沃尔马特超市”一词来查找一下“橘子”摆放的位置。于是拿出自己的手机检索“沃尔马特超市”微微网所提供的地图服务。假设该服务位于“沃尔马特超市”微微网的主单元上。出于简单起见,还假设微微网就只有这一个。以后我们还会讨论一下复杂通信的情况,比如多个微微网连接形成分布网、服务位于你进入的微微网之外的节点上等。此外也为了避免出现查询故障,我们认定你的手机

39、可以通过近期经常访问的微微网本地数据库(手机号码薄)进行简单的NSLOOKUP而获得“沃尔马特超市”主单元的蓝牙地址(BD_ADDR)。当你输入“橘子”一词并按下浏览器窗口的搜索键后,蓝牙设备(在我们的示例中就是你的手机)的L2CAP就会收到以L2CA_ConnectReq事件表示的请求。这里我们认为L2CAP维护着一个最近连接的连接句柄缓冲。缓冲中每个条目都有一个标志位表示对应特定连接的连接句柄(CH)是否有效。当LMP向L2CAP报告某CH对应的连接断开或者终止(这是单独实现的)时该标志位即被设置。客户端的连接建立L2CAP对“沃尔马特超市”进行简单的NSLOOKUP检索并得到主单元的地址

40、(BD_ADDR)。L2CAP 随后检查缓冲查看该地址的CH是否存在。如果存在CH(本例中是不可能的,因为你才进入微微网嘛)而且没有设置标志位,那么L2CAP就进一步和“沃尔马特超市”主单元的L2CAP建立逻辑连接,方式是向低层的HCI 发出L2CAP_Connect_Req事件。如果没有链路连接,则L2CAP通过触发LP_Connect_Req事件而要求HCI创建一个。HCI即可发送HCI_Create_Connection命令数据包给LMP。LMP接着触发命令状态事件Command Status。命令状态事件表示命令已经收到,LMP正在执行HCI_Create_Connection 命令指

41、派的任务。该事件对主机的异步操作是必需的,这样主机才可以同时做其他事情而无须等待命令完成。接收连接请求的LMP会查看该连接的对应CH是否存在(以防缓冲溢出或者因为某些原因L2CAP没有在缓冲中找到)。如果CH存在,LMP即向HCI触发带CH的Connection Complete事件。如果没有远程设备(沃尔马特超市主单元)的CH, LMP则首先创建两设备之间的LMP信道,方法是发送LMP_host_connection_reqPDU(协议数据单元)给远程设备。但在该LMP信道建立之前,两台设备之间将在基带级建立物理连接信道。物理级连接基带级的连接有点复杂。原因在于蓝牙规范只允许主单元寻呼从单元

42、反过来则不被允许。所以你的手机只好创建自己的本地微微网(临时的)并把“沃尔马特超市”主单元当作从单元寻呼。“沃尔马特超市”主单元在处于寻呼扫描模式的时候会发现这个寻呼消息(也就是一个简单的ID数据包,其中包含了从单元的设备访问码DAC它是你的手机以寻呼跳频发送的,而寻呼跳频则是从单元的BD_ADDR也就是“沃尔马特超市”地址所决定的)。于是主单元向从单元发送响应。该响应消息只能由从单元的设备访问码“沃尔马特超市”组成。从单元即可在收到寻呼消息开始后625微秒发出响应,响应跳频则对应收到寻呼消息的跳频。主单元也就是你的手机在收到ID数据包后即发出FHS响应数据包,其中包含了主单元的实时蓝牙时钟,

43、主单元的48位长BD_ADDR、BCH奇偶位和设备类型。该数据包发送的频率也是寻呼跳频序列。从单元“沃尔马特超市”则发回响应(其中只有从单元的设备访问码)确认FHS 数据包。这样两台设备都进入了连接(CONNECTION )状态,也就可以在其物理层之上建立更高级信道。主单元(你的手机)发送的第1个数据包是一个POLL数据包,这个包只是再确认连接。从单元可以用任何类型的数据包响应。这里要注意的是,一旦连接建立,连接所采用的跳频序列也就是主单元(你的手机)确定的信道跳频。所以该POLL数据包将按照以上的信道跳频被发送。服务器端连接建立了物理信道之后,基带就会创建一个ACL数据包(DM1、DM3或者

44、DM5),其中数据部分头部的L_CH 字段设置为11(LM 数据包)。数据包头内的AM_ADDR也由你的手机设置(注意你发送的FHS数据包具有一个AM_ADDR字段,从单元将其用作该连接的活动成员地址)。一个字节长的LMP_host_connection_req PDU即形成了该数据包的数据部分。当其他各方收到该数据包,该数据包即会被转发给LMP因为它是一个LM消息。“沃尔马特超市”的LMP识别出从你手机发来的LMP_host_connection_req PDU并为HCI触发一个Connection Request事件。HCI一收到该事件就会通过LP_ConnectInd事件把这个请求告诉L

45、2CAP。 L2CAP就通过L2CA_ConnectInd事件再次上传给更高层让应用程序决定是否接受或者拒绝。低层作出决策也是有可能的,不过本文不再赘述。上层可以分别采用L2CA_ConnectRsp或者L2CA_ConnectRspNeg接受或者拒绝连接请求。同样的,L2CAP也可以采用LP_ConnectRsp或者LP_ConnectRspNeg事件通知HCI。“沃尔马特超市”的HCI随后就向LMP发送HCI_Accept_Connection_Request或者HCI_Reject_Connection_Request命令。LMP也以LMP_accepted或者LMP_not_accep

46、tedPDU响应具体取决于是否接受或者拒绝连接。这个PDU 通过“沃尔马特超市”的基带被发回给你的手机。LM信道的建立你的手机接收基带数据包并把该PDU传送给LMP 因为这个PDU是LM 信道发送的(L_CH = 11)。如果连接被拒绝,LMP就会向HCI触发一个Connection Complete事件,其中包含一个错误码。HCI则采用LP_ConnectCfmNeg告诉L2CAP,再由L2CAP通过L2CA_ConnectCfmNeg告诉更高层。如果连接被接受,LMP就发送一个LMP_setup_completePDU给远端设备的LMP(本示例中就是“沃尔马特超市”)。远端设备也发送一个L

47、MP_setup_complete PDU给你的手机,于是建立LM信道。这以后两台设备的LMP就可以发送连接完成(Connection Complete)事件,事件标志中的状态标志可以设置为00表示连接成功。HCI则使用LP_ConnectCfm告诉L2CAP,再由L2CAP使用L2CA_ConnectCfm告诉更高层。其结果就是初始化了L2CAP信道。在Connection Complete事件数据包内,LMP 会发送该连接的对应CH。L2CAP现在可以为连接分配一个CID(连接标识符)并使用以上的CH建立一个L2CAP信道。L2CAP信道的建立L2CAP 基本上采用信令命令建立L2CAP信道。它采用信令L2CAP_ConnectReq和L2CAP_ConnectRsp建立L2CAP信道。上层就使用L2CAP信道发送数据以及其他信息。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!