蓝牙技术是一项新兴的技术。它的主要目的就是要在全世界范围内建立一个短距离的无线通信标准。它使用 2.4-2.5 GHz的 ISM(Industrion ScientifcMedical ) 频段来传送话音和数据。运用成熟、实用、先进的无线技术来代替电缆,它提供了低成本,低功耗的无线接口,使所有的固定和移动设备诸如:计算机系统、家庭影院系统、无绳电话系统、通信设备等,通过微微网(PAN, Personal Area Network)连接起来相互通信,实现资源共享。
关于蓝牙规范
蓝牙的标准是IEEE802.15,工作在2.4GHz 频带,带宽为1Mb/s。以时分方式进行全双工通信,其基带协议是电路交换和分组交换的组合。一个跳频频率发送一个同步分组,每个分组占用一个时隙,使用扩频技术也可扩展到5个时隙。同时,蓝牙技术支持1个异步数据通道或3个并发的同步话音通道,或1个同时传送异步数据和同步话音的通道。每一个话音通道支持64kb/s的同步话音;异步通道支持最大速率为721kb/s,反向应答速率为57. 6 kb/s的非对称连接,或者是432. 6 kb/s对称连接。
依据发射输出电平功率不同,蓝牙传输有3 种距离等级:Class1 为100m左右;Class2约为10m;Class3 约为2-3m。一般情况下,其正常的工作范围是10m半径之内。在此范围内,可进行多台设备间的互联。
蓝牙技术的特点包括:1、采用跳频技术,数据包短,抗信号衰减能力强;2、采用快速跳频和前向纠错方案以保证链路稳定,减少同频干扰和远距离传输时的随机噪声影响;3、使用2.4GHzISM频段,无须申请许可证;4、可同时支持数据、音频、视频信号;5、采用FM调制方式,降低设备的复杂性。
关于蓝牙设备
蓝牙技术将设备分为两种:主设备和从设备。
蓝牙主设备的特点:主设备一般具有输入端。在进行蓝牙匹配操作时,用户通过输入端可输入随机的匹配密码来将两个设备匹配。蓝牙手机、安装有蓝牙模块的PC等都是主设备。(例如:蓝牙手机和蓝牙PC进行匹配时,用户可在蓝牙手机上任意输入一组数字,然后在蓝牙PC上输入相同的一组数字,来完成这两个设备之间的匹配。)
蓝牙从设备特点:从设备一般不具备输入端。因此从设备在出厂时,在其蓝牙芯片中,固化有一个4位或6位数字的匹配密码。蓝牙耳机、优士通UD笔等都是从设备。(例如:蓝牙PC与UD笔匹配时,用户将UD笔上的蓝牙匹配密码正确的输入到蓝牙PC上,完成UD笔与蓝牙PC之间的匹配。)
关于蓝牙连接
蓝牙主端设备发起呼叫,首先是查找,找出周围处于可被查找的蓝牙设备,此时从端设备需要处于可被查找状态。
主端设备找到从端蓝牙设备后,与从端蓝牙设备进行配对,此时需要输入从端设备的PIN码,一般蓝牙耳机默认为:1234或0000,立体声蓝牙耳机默认为:8888,也有设备不需要输入PIN码。
配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主端即可向从端设备发起呼叫,根据应用不同,可能是ACL数据链路呼叫或SCO语音链路呼叫,已配对的设备在下次呼叫时,不再需要重新配对。
已配对的设备,做为从端的蓝牙耳机也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。
链路建立成功后,主从两端之间即可进行双向的数据或语音通讯。
在通信状态下,主端和从端设备都可以发起断链,断开蓝牙链路。
关于蓝牙协议栈体系结构
Linux系统的官方蓝牙协议栈是Bluez协议栈, 其体系结构如图1所示。它是由底层硬件模块,中间协议层和高端应用层三大部分组成。
图1:蓝牙协议栈体系结构
1、底层硬件模块是蓝牙技术的核心模块,所有嵌入蓝牙技术的设备都必须包括底层模块。它主要由链路管理层(LMP Link Manager Protocol )、基带层(BB Base Band )和射频(RF Rodio Frequency)组成。其功能是如下:
无线连接层(RF):通过2.4GHZ无需申请的ISM 频段, 实现数据流的过滤和传输, 它主要定义了对工作在此频段的蓝牙接收机应满足的要求;
基带层(BB):提供了两种不同的物理链路(同步面向连接链路SCO Synchronous ConnectionOriented和异步无连接链路ACL AsynchronousConnection Less ),负责跳频和蓝牙数据及信息帧的传输,且对所有类型的数据包提供了不同层次的前向纠错码(FEC Frequency ErrorCorrection )或循环沉余度差错校验(CTC Cyc lic RedundancyCheck);
LMP层:负责两个或多个设备链路的建立和拆除及链路的安全和控制,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的访问入口;
蓝牙主机控制器接口HCI(Host Controller Interface):由基带控制器、连接管理器、控制和事件寄存器等组成。它是蓝牙协议中软硬件之间的接口,它提供了一个调用下层BB、LM、状态和控制寄存器等硬件的统一命令, 上、下两个模块接口之间的消息和数据的传递必须通过HCI 的解释才能进行。HCI 层以上的协议软件实体运行在主机上,而HCI以下的功能由蓝牙设备来完成,二者之间通过传输层进行交互。
2、中间协议层由逻辑链路控制与适配协议L2CAP(Logical Link Control andAdaptation Protocol)、服务发现协议SDP (Service Discovery Protocol)、串口仿真协议或称线缆替换协议RFCOM 和二进制电话控制协议TCS (Telephony
Control protocol Spectocol)组成。
逻辑链路控制与适配协议(L2CAP):是蓝牙协议栈的核心组成部分,也是其它协议实现的基础。它位于基带之上,向上层提供面向连接的和无连接的数据服务。它主要完成数据的拆装、服务质量控制,协议的复用、分组的分割和重组(Segmentation AndReassembly )及组提取等功能。L2CAP允许高达64KB 的数据分组。
服务发现协议(SDP): 是一个基于客户/ 服务器结构的协议。它工作在L2CAP层之上,为上层应用程序提供一种机制来发现可用的服务及其属性, 而服务的属性包括服务的类型及该服务所需的机制或协议信息。
串口仿真协议或称线缆替换协议RFCOMM:是一个仿真有线链路的无线数据仿真协议,符合ETSI标准的TS 07.10串口仿真协议。它在蓝牙基带上仿真RS-232的控制和数据信号,为原先使用串行连接的上层业务提供传送能力。
二进制电话控制协议TCS :是一个基于ITU-TQ.931 建议的采用面向比特的协议,它定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。
3、高端应用层位于蓝牙协议栈的最上部分。一个完整的蓝牙协议栈按其功能又可划分为四层:核心协议层(BB、LMP、LCAP 、SDP )、线缆替换协议层(RFCOMM )、电话控制协议层(TCS-BIN )、选用协议层(PPP 、TCP 、TP、UDP 、OBEX、IrMC、WAP、WAE)。
高端应用层就是由选用协议层组成。
选用协议层中的PPP (Point-to-Point Protocol)是点到点协议,它由封装、链路控制协议、网络控制协议组成,它定义了串行点到点链路应当如何传输因特网协议数据,它主要用于LAN接入、拨号网络及传真等应用规范;TCP/IP(传输控制协议/ 网络层协议) 、UDP(User Datagram Protocol 对象交换协议)是三种已有的协议,它定义了因特网与网络相关的通信及其他类型计算机设备和外围设备之间的通信。蓝牙采用或共享这些已有的协议去实现与连接因特网的设备的通信,这样,既可提高效率,又可在一定程度上保证蓝牙技术和其它通信技术的互操作性;
OBEX(Object Exchange Protocol)是对象交换协议,它支持设备间的数据交换,采用客户/ 服务器模式提供与HTTP(超文本传输协议)相同的基本功能。该协议作为一个开放性标准还定义了可用于交换的电子商务卡、个人日程表、消息、和便条等格式;
WAP(Wireless Application Protocol)是无线应用协议,它的目的是要在数字蜂窝电话和其它小型无线设备上实现因特网业务。它支持移动电话浏览网页、收取电子邮件和其它基于因特网的协议。
WAE(Wireless Application Environment) 是无线应用环境, 它提供用于 WAP 电话和个人数字助理PDA(Personal Digtital Assistant) 所需的各种应用软件。
蓝牙音频(Audio)是通过在基带上直接传输SCO分组实现的,目前蓝牙SIG并没有以规范的形式给出此部分。虽然严格意义上来讲它并不是蓝牙协议规范的一部分,但也可以视为蓝牙协议体系中的一个直接面向应用的层次。
HCI层位于蓝牙协议的中间层与底层,起着沟通两者的作用(图2中描述了HCI层在底层软件中的位置)。同时,HCI层也是蓝牙软件与蓝牙硬件之间的交互接口。蓝牙软件将通过HCI层提供的一系列接口完成与蓝牙硬件的通信。就是蓝牙软件将通过HCI层的接口函数实现对蓝牙适配器设置和控制。
HCI也可以读取和设置远程蓝牙设备的相应参数。
图2:HCI架构
HCI三项基本功能。
1、完成对本地蓝牙设备参数的读取和设置;
2、负责对周围设备进行扫描,并可以对远程蓝牙设备的基本参数进行读取和设置;
3、提供一个HCI命令的发送接口,可以直接利用HCI命令控制本地蓝牙适配器。
BlueZ的HCI层是基于上文描述的C/S模式进行的。一般来讲,发起会话的蓝牙设备将充当C/S模式的客户端,而被连接的远程设备扮演服务器端角色。在Linux中,蓝牙应用启动以后,其守护进程(守护进程,运行于后台的,用于为系统提供某项服务的程序)bluetoothd起到了C/S模型中服务器的作用,可以对来自远程的查询和链接请求进行响应。
(1) 本地设备参数读取模块实现
本地设备参数的读取将通过get_dev_infor()函数调用完成。这个接口将给出本地设备的bd_addr、dev_name和dev_id等所有包含于hci_dev_info结构中的参数。这个结构体用于描述设备的基本参数。另外,本地参数读取模块还提供了单独针对某一参数的接口。如,获得本地设备名称的get_localnameO,获得本地bd_addr的get_local_addr0等。其实现流程与远程设备参数读取基本类似,只是不需要建立socket连接,不需要对远程设备进行查询,其数据处理方法和实现方法均一致。在此,仅以远程设备的读取流程进行叙述。
(2) 远程设备参数读取模块实现
远程设备参数读取模块的功能与上一模块基本一致。所不同的是,在读取时需要先完成对周围设备查询,得到远程设备的bd_addr,并填充inquiry_info结构。而后,本地设备将与其建立连接,最终实现参数的传递。另外,这里通过调用hciread_remotename0、hciread_remoteversion0和hci_read_remote_featuresO等函数来实现对远程设备其他参数的读取。
蓝牙协议栈中,位于HCI层之上的是L2CAP层,即逻辑链路控制和适配层(Logical Link Control andAdaptation Protoc01)。
L2CAP在蓝牙协议中的位置如图3.9所示。它处于底层与高层协议之间。L2CAP通过协议多路复用、分段和重组操作以及组的概念,向高层协议提供面向链接和面向无链接的数据服务。L2CAP允许高层协议和应用传输长达64Kb的L2CAP分组。