物联网与短距离无线通信技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 蓝牙协议体系结构

蓝牙技术规范的目的是使符合该规范的各种应用之间能够互通。为此,本地设备与远端设备需要使用相同的协议栈。

不同的应用可以在不同的协议栈上运行。但是,所有的协议栈都要使用蓝牙技术规范中的数据链路层和物理层。完整的蓝牙协议栈如图2.6所示,在其顶部支持蓝牙使用模式的相互作用的应用被构造出来。不是任何应用都必须使用全部协议,相反,应用只会采用蓝牙协议栈中垂直方向的协议。图2.6显示了数据经过无线传输时,各个协议如何使用其他协议所提供的服务,但在某些应用中这种关系是有变化的,如需控制连接管理器时,一些协议如逻辑链路控制应用协议(L2CAP)、二元电话控制规范(TCS Binary)可使用连接管理协议(LMP)。完整的协议包括蓝牙专用协议(LMP和L2CAP)和蓝牙非专用协议(如对象交换协议OBEX和用户数据报协议UDP)。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互通性,充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的开放性保证了设备制造商可自由地选用蓝牙专用协议或常用的公共协议,在蓝牙技术规范基础上开发新的应用。

图2.6 蓝牙协议栈

蓝牙协议体系中的协议由SIG分为4层:

  • 蓝牙核心协议——Baseband、LMP、L2CAP、SDP;
  • 电缆替换协议——RFCOMM;
  • 电话传送控制协议——TCS Binary、AT Commands;
  • 所采用的协议——PPP、UDP/TCP/IP、OBEX、vCard、vCal、IrMC、WAE。

除上述协议层外,蓝牙规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器提供命令接口,并且可通过它访问硬件状态和控制寄存器。HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。蓝牙核心协议由SIG制定的蓝牙专利协议组成,绝大部分蓝牙设备都需要蓝牙核心协议(包括无线部分),而其他协议根据应用的需要而定。总之,电缆替换协议、电话控制协议和被采用的协议构成了面向应用的协议,允许各种应用运行在核心协议之上。

2.2.1 蓝牙核心协议

1)基带协议(Baseband)

基带和链路控制层确保了微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频扩展频谱系统,其任一分组在指定时隙、指定频率上发送,它使用查询和寻呼进程来同步不同设备间的发送跳频和时钟。蓝牙提供了两种物理连接方式及其相应的基带数据分组:同步面向连接和异步无连接,而且在同一射频上可实现多路数据传送。ACL只用于数据分组,SCO适用于音频及音频与数据的组合,所有音频与数据分组都附有不同级别的前向纠错(FEC)或循环冗余校验(CRC),而且可进行加密。此外,不同数据类型(包括连接管理信息和控制信息)都被分配了一个特殊通道。

2)音频(Audio)

音频数据可以在蓝牙设备间传送,使得各种使用模式成为可能。面向连接的音频分组只需经过基带传输,不通过L2CAP。音频模式在蓝牙系统内相对简单,只需开通音频连接,就可传送音频。

3)连接管理协议(LMP)

连接管理协议(LMP)负责蓝牙各设备间连接的建立。它通过连接的发起、交换、核实,进行身份验证和加密,通过协商确定基带数据分组大小;它还控制无线设备的电源模式和工作周期,以及微微网内蓝牙单元的连接状态。

4)逻辑链路控制和适配协议(L2CAP)

逻辑链路控制和适配协议(L2CAP)位于基带层之上,向上层协议提供服务,可以认为它与LMP并行工作,它们的区别在于L2CAP为上层提供服务,与此同时,负荷数据从不通过LMP消息进行传递。

L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP允许高层协议及应用以最大为64KB的长度收发数据包。

虽然基带协议提供了SCO和ACL两种连接类型,但L2CAP只支持ACL连接,不支持SCO连接。

5)服务发现协议(SDP)

发现服务在蓝牙技术框架中起到至关重要的作用,它是所有使用模式的基础。使用SDP,可以查询到设备信息、服务和服务类型,从而在蓝牙设备间建立相应的连接。

1.蓝牙基带层协议

1)基带

基带就是蓝牙的物理层,它负责管理物理信道和链路中除了错误纠正、数据处理、调频选择和蓝牙安全之外的所有业务。基带在蓝牙协议栈中位于蓝牙射频之上,基本上起链路控制和链路管理的作用,比如承载链路连接和功率控制这类链路级路由等。基带还管理异步和同步链路、处理数据包、寻呼、查询接入和查询蓝牙设备等。基带收发器采用时分复用TDD方案(交替发送和接收),因此除了不同的跳频之外(频分),时间都被划分为时隙。在正常的连接模式下,主单元会总是以偶数时隙启动,而从单元则总是从奇数时隙启动(尽管可以不考虑时隙的序数而持续传输)。

2)ACL和SCO链路

基带可以处理两种类型的链路:SCO(同步连接)和ACL(异步无连接)链路。SCO链路是微微网中单一主单元和单一从单元之间的一种点对点对称的链路。主单元采用按照规定间隔预留时隙(电路交换类型)的方式可以维护SCO链路。SCO链路携带语音信息。主单元可以支持多达三条并发SCO链路,而从单元则可以支持两条或者三条SCO链路。SCO数据包永不重传。SCO数据包用于64kbps语音传输。ACL链路是微微网内主单元和全部从单元之间点对多点的链路。在没有为SCO链路预留时隙的情况下,主单元可以对任意从单元在每时隙的基础上建立ACL链路,其中也包括了从单元已经使用某条SCO链路的情况(分组交换类型)。只能存在一条ACL链路。对大多数ACL数据包来说都可以应用数据包重传。

3)蓝牙编址

蓝牙有4种基本类型的设备地址,见表2.1。

表2.1 蓝牙设备地址

4)蓝牙数据包

微微网信道内的数据都是通过数据包传输的。通常的数据包格式如表2.2所示。

表2.2 标准的蓝牙数据包

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

5)纠错

纠错方式有3种:1/3速率FEC、2/3速率FEC和ARQ。采用1/3速率FEC则每个位被重复三遍作为冗余;2/3方式则采用一个生成多项式把10位代码编码为15位代码。在ARQ方式下,数据包被重传,直到最终收到确认(或者超时)。蓝牙使用快速的无编号确认,通过设置适当的ARQN值来使用正确认和负确认。如果传输超时,蓝牙丢弃数据包并处理下一个数据包。

6)流控与同步

蓝牙建议在ACL和SCO链路中采用先入先出(FIFO)队列处理数据包的收发。链路管理器(Link Manager)填充这些队列,链路控制器负责自动清空队列。

如果这些RX FIFO队列全满,流控就会避免丢弃数据包和防止阻塞。如果数据没有收到,STOP表示符即被接收方的链路控制器插入到返回数据包的包头中被传送。当发送方收到STOP表示符,它就冻结其FIFO队列。如果接收方准备完毕即可发送GO数据包从而再次恢复数据流传输。我们已经知道,蓝牙收发器采用时分复用(TDD)技术方案,这意味着它可以采用同步方式实现交替地传送和接收操作。主单元数据包传输的平均时间相对于理想的625μs时隙必定不会快于20ppm。平均延迟时间应当小于1ms。微微网由主单元的系统时钟同步。主单元的蓝牙设备地址(BD-ADDR)决定了跳频序列和信道访问码:主单元的系统时钟确定跳频序列的相位。主单元通过查询方式控制信道上的流量。在微微网存在期间主单元从不调节其系统时钟。从单元为了匹配主单元时钟采用时序偏移以适应其内部时钟。蓝牙时钟应该达到31.25μs的精度。为了让接收方的访问相关器可以搜索到正确的信道访问码并和发送方保持同步,精确接收时间允许有一个20μs的不确定窗口。当从单元从保持状态返回时,它即可和更大的不确定窗口发生相关直到从单元不再与时隙交叠。休眠的从单元周期性地被唤醒以侦听来自主单元的信号并重新同步自身的时钟偏移。

2.链路管理协议(LMP)

链路管理协议(LMP)和逻辑链路控制与适应协议(L2CAP)都是蓝牙的核心协议,L2CAP与LMP共同实现OSI数据链路层的功能。

LMP负责蓝牙设备之间的链路建立,包括鉴权、加密等安全技术及基带层分组大小的控制和协商。它还控制无线设备的功率以及蓝牙节点的连接状态。L2CAP在高层和基带层之间作适配协议,它与LMP是并列的,区别在于L2CAP向高层提供负载的传送,而LMP不能,即LMP不负责业务数据的传递。

链路管理协议(LMP)有以下关键作用:

(1)链路管理协议(LMP)负责蓝牙组件间连接的建立和断开。在两个不同的蓝牙设备之间建立连接时,该连接由ACL链路组成(先传递参数),然后就可以建立起一条或多条SCO链路。链路管理协议(LMP)支持由主、从单元初始化SCO链路,支持由主、从单元请求改变SCO链路参数;它还提供了一种协商呼叫方案的方法,并支持通过协商确定基带数据分组大小。

(2)通过监控信道特性、支持测试模式和出错处理来维护信道。链路管理器负责监控无线单元(射频部分)的信号场强和信号发射功率;链路管理器负责监控在DM和DH之间基于质量的信道变化;链路管理器还提供支持服务质量(QoS)的能力;每一条蓝牙链路都具有一个用于链路监控的计时器,链路管理器利用该计时器对超时进行监控;另外,LMP具有不同蓝牙测试模式的PDU,测试模式主要用于对兼容蓝牙无线电和基带的测试(也可用于蓝牙设备的鉴权);链路管理器中针对各种错误,有相应的出错处理,还能够监测链接中错误消息的数量,一旦超过闭值就将其断开。

(3)通过连接的发起、交换、核实,进行身份鉴权和加密等安全方面的任务。包括链接字(用于身份鉴权)的创建、改变、匹配检验;协商加密模式、加密字长度;加密的开始和停止等。

(4)控制微微网内及微微网之间蓝牙组件的时钟补偿和计时精度。蓝牙的链路管理器可以从其他链路管理器那里请求时钟偏移信息(主单元请求,从单元告诉它目前从单元存储的时钟偏移,而该时间偏移则是从单元自身在和主单元进行某些数据包交换的过程中得到的)、时隙偏移信息(时隙偏移就是微微网内主单元和从单元传送的开始时隙之间的时间差,时间差的单位是毫秒)、计时精度信息(时钟漂移和抖动)。这些信息对微微网内部和微微网间的正常通信是至关重要的,LMP还支持多时隙分组控制。

(5)控制微微网内蓝牙组件的工作模式。链路管理器还可以控制工作模式转换过程(强迫或者请求某台设备把所处工作模式转换为以下模式之一:保持、呼吸或者休眠)。在休眠模式下,链路管理器会负责广播消息给休眠的设备、处理信号参数以及唤醒休眠的设备等任务。链路管理器还会负责解除休眠。

(6)其他功能。包括支持对链路管理器协议版本信息的请求、请求命名、主从角色切换等。

3.逻辑链路控制与适应协议(L2CAP)

L2CAP支持高层的协议复用、数据包打包重组(SAR)、传送服务质量(QoS)等。

逻辑链路控制与适应协议(L2CAP)有以下关键作用:其完成数据的拆装、基带与高层协议间的适配,并通过协议复用、分段及重组操作为高层提供数据业务和分类提取,它允许高层协议和应用接收或发送长过64KB的L2CAP数据包。数据重传和低级别流控由L2CAP协议完成。

逻辑链路控制与适应协议(L2CAP)的关键作用包括以下内容:

(1)协议复用。L2CAP支持协议复用,因为基带协议不能识别并支持任何类型段,而这些类型段则用于标识要复用的更高层协议。L2CAP必须能够区分高层协议,如蓝牙服务搜索协议(SDP)、RFCOMM和电话控制(TCS)。在信道上收到的每一个L2CAP分组都指向相应的高层协议。

(2)信道的连接、配置、打开和关闭。L2CAP基于分组,但它实际上遵循的是一个基于信道的通信模型。一条信道代表远程设备上两个L2CAP实体间的数据流。信道可以是面向连接的,也可以是无连接的。面向连接的数据信道提供了两设备之间的连接,无连接的信道限制数据向单一方向流动。但要注意,如果一开始两个设备之间没有物理链路存在,系统使用LMP命令来产生物理链路。

(3)分段与重组。蓝牙与其他有线物理介质相比,由基带协议定义的分组在大小上受到限制。输出与最大基带有效载荷口HS分组中的341B关联的最大传输单元(MTU)限制了更高层协议带宽的有效使用,而高层协议要使用更大的分组。大L2CAP分组必须在无线传输前分段成为多个小基带分组。同样,收到多个小基带分组后也可以重新组装成大的单一的L2CAP分组。在使用比基带分组更大的分组协议时,必须使用分段与重组功能。实际上,所有L2CAP分组都可以在基带分组的基础上进行分段。

(4)服务质量(QoS)。L2CAP连接建立过程允许交换有关两个蓝牙单元之间的服务质量信息。每个L2CAP设备必须监视由协议使用的资源并保证服务质量(QoS)的完整实现。L2CAP还提供QoS授权控制,以避免其他信道违反QoS协定。

(5)组管理。许多协议包含地址组的概念。L2CAP组管理协议提供允许在微微网成员与组之间有效映射的单元组概念。L2CAP组概念可以实现在微微网上的有效协议映射。如果没有组概念,为了有效管理组,高层协议就必须直接与基带协议和链路管理器打交道。

2.2.2 电话控制协议

1.二元电话控制协议(TCS BIN)

二元电话控制协议(TCS Binary或TCS BIN)是面向比特的协议,它定义了蓝牙设备间建立语音和数据呼叫的呼叫控制信令。此外,还定义了处理蓝牙TCS设备群的移动管理进程。基于ITU-T推荐书Q.931建议的TCS Binary被定义为蓝牙的二元电话控制协议规范。

2.电话控制协议——AT命令集(AT Commands)

蓝牙SIG根据ITU-TV250建议和GSM07.07定义了在多使用模式下控制移动电话和调制/解调器的AT命令集(可用于传真业务)。

被采用的协议有以下几种。

(1)点对点协议(PPP)。在蓝牙技术中,PPP位于RFCOMM上层,完成点对点的连接。

(2)TCP/UDP/IP。TCP/UDP/IP协议是由IEEE制定的,广泛应用于互联网通信的协议,在蓝牙设备中使用这些协议是为了与互联网相连接的设备进行通信。蓝牙设备均可以作为访问Internet的桥梁。

(3)对象交换协议(OBEX)。IrOBEx(简写为OBEX)是由红外数据协会(IrDA)制定的会话层协议,它采用简单的和自发的方式交换目标。假设传输层是可靠的,OBEX就能提供诸如HTTP等一些基本功能,采用客户机/服务器模式,独立于传输机制和传输应用程序接口(API)。除了OBEX协议本身以及设备之间的OBEX保留用“语法”,OBEX还提供了一种表示对象和操作的模型。

另外,OBEX协议定义了“文件夹列表”的功能目标,用来浏览远程设备上文件夹的内容。在第一阶段,RFCOMM被用作OBEX的唯一传输层。将来可能会支持TCP/IP作为传输层。

(4)无线应用协议(WAP)。无线应用协议(WAP)是由无线应用协议论坛制定的,它融合了各种广域无线网络技术,其目的是将互联网的内容以及电话业务传送到数字蜂窝电话和其他无线终端上。

选用WAP,可以充分复用为无线应用环境(WAE)所开发的高层应用软件,包括能与PC上的应用程序交互的WML和WTA浏览器。构造应用程序网关就可以在WAP服务器和PC上的某些应用程序之间进行调节,从而可以实现各种各样隐含的计算功能,比如远程控制、从PC到手持机预取数据等。WAP服务器还允许在PC和手持机之间交换信息,带来信息中转的概念。WAP框架也使得使用WML和WML Script作为“通用”的软件开发工具来为手持机开发定制应用程序成为可能。

2.2.3 主机控制接口功能规范

1.通信方式

主机控制器接口(Host Controller Interface,HCI)是通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三种包,其中数据包是双向的,命令包只能从主机发往主机控制器,而事件包始终是主机控制器发向主机的。主机发出的大多数命令包都会触发主机控制器产生相应的事件包作为响应。命令包分为6种类型:

(1)链路控制命令:链路控制命令是允许主机控制器控制与其他蓝牙设备的连接。在链路控制命令运行时,LM控制蓝牙Piocnet与Scatternet的建立与维持。这些命令指示LM创建及修改与远端蓝牙设备的连接链路,查询范围内的其他蓝牙设备,及其他链路管理协议命令。

(2)链路策略命令:用于改变本地和远端设备链路管理器的工作方式,允许主机以适当的方式管理Piocnet。

(3)主机控制和基带命令:主机控制器及基带命令被用来改变与建立诸如声音设置、认证模式、加密模式的连接相联系的LM的操作方式。

(4)信息命令:这些信息命令的参数是由蓝牙硬件制造商确定的。它们提供了关于蓝牙设备及设备的主机控制器,链路管理器及基带的信息。主机设备不能更改这些参数。

(5)状态命令:状态命令提供了目前HCI、LM及BB的状态消息。这些状态参数不能被主机改变,除了一些参数可以被重置。

(6)测试命令:测试命令能够测试蓝牙硬件各种功能,并为蓝牙设备的测试提供不同的测试条件。

2.通信过程

当主机与基带之间用命令的方式进行通信时,主机向主机控制器发送命令包。主机控制器完成一个命令,大多数情况下,它会向主机发出一个命令完成事件包,包中携带命令完成的信息。有些命令不会收到命令完成事件,而会收到命令状态事件包,若收到该事件则表示主机发出的命令已经被主机控制器接收并开始处理,过一段时间该命令被执行完毕时,主机控制器会向主机发出相应的事件包来通知主机。如果命令参数有误,则会在命令状态事件中给出相应错误码。假如错误出现在一个返回Command Complete事件包的命令中,则此Command Complete事件包不一定含有此命令所定义的所有参数。状态参数作为解释错误原因同时也是第一个返回的参数,总是要返回的。假如紧随状态参数之后是连接句柄或蓝牙的设备地址,则此参数也总是要返回的,这样可判别出此Command Complete事件包属于那个实例的一个命令。在这种情况下,事件包中连接句柄或蓝牙的设备地址应与命令包种的相应参数一致。假如错误出现在一个不返回Command Complete事件包的命令中,则事件包包含的所有参数都不一定是有效的。主机必须根据与此命令相联系的事件包中的状态参数来决定它们的有效性。

3.HCI流量控制

HCI的流量控制是为了管理主机和主机控制器中有限的资源并控制数据流量而设计的,由主机管理主机控制器的数据缓存区,主机可动态地调整每个连接句柄的流量。

对于命令包的流量控制,主机在每发一个命令之前都要确定当前能发命令包的数目,当然,在开机和重启时发命令包可以不用考虑接收情况,直到收到命令完成事件包或命令状态事件包为止。因为在每个命令完成事件包和命令状态事件包中都有Num_HCI_Command_Packets选项表明当时主机能向主机控制器发送的命令包的数目,而对于每个命令必然会有相应的命令完成事件包和命令状态事件包,主机就能控制命令包不会溢出。

对于数据包的流量控制,一开始,主机调用Read_Buffer_Size命令,该命令返回的两个参数决定了主机能发往主机控制器的ACL和SCO两种数据包的大小的最大值,同时两个附加参数则说明了主机控制器能接收的ACL和SCO数据包总的数目。而每隔一段时间,主机控制器会向主机发Number_Of_Complete_Packets事件,该事件的参数值表明了对每个连接句柄已经处理的数据包的数目(包括正确传输和被丢弃的)。主机根据一开始就知道的总数,减去已经处理的包的数目,则可计算出还能发多少数据包,从而控制数据包的流量。

如有必要,HCI的流量控制也可由主机控制器来实现对主机的控制,可以通过Set_Host_Controller_To-Host_Flow_Control命令来设置,其控制过程基本与主机控制过程类似,只是命令稍有不同。当主机收到断链确认的事件后,就认为所有传往主机控制器的数据包已经全部被丢弃,同时主机控制器中的数据缓冲区也被释放了。

2.2.4 RFCOMM协议

RFCOMM是基于ETSI07.10规范的串行线仿真协议。电缆替换协议在蓝牙基带上仿真RS-232控制和数据信号,为使用串行线传送机制的上层协议(如OBEX)提供服务。

蓝牙技术的目的是替代电缆,很明显最应该替代的似乎就是串行电缆。要有效地实现这一点,蓝牙协议栈需要提供与有线串行接口一致的通信接口,以便能为应用提供一个熟悉的接口,使那些不曾使用过蓝牙通信技术的传统应用能够在蓝牙链路上无缝地工作。对于熟悉串行通信应用开发的人员来说,无须做任何改动即可保证应用能在蓝牙链路上正常工作。然而传输的协议并不是专门为串口而设计的。

SIG在协议栈中定义了一层与传统串行接口十分相似的协议层,这层协议就是RFCOMM,它的主要目标是要在当前的应用中实现电缆替代方案。

RFCOMM使用L2CAP实现两个设备之间的逻辑串行链路的连接。需要特别指出的是,一个面向连接的L2CAP信道能将两个设备中的两个RFCOMM实体连接起来。在给定的时间内,两个设备之间只允许有一个RFCOMM连接,但是这个连接可以被复用,所以设备间可以存在多个逻辑串行链路。第一个RFCOMM的客户端在L2CAP上建立RFCOMM连接;已有连接上的其他用户能够利用RFCOMM的复用能力,在已有的链路上建立新的信道;最后关闭RFCOMM串行链路的用户将结束RFCOMM连接。每个复用链路用一个数字来标识,这个数字被称作数据链路连接标识符(DLCI)。

在一个单独的RFCOMM连接上,规范允许建立多达60个复用的逻辑串行链路,但是对于一个RFCOMM实现而言,没有强制性的规定不能超过这个复用级别。DLCI0为控制信道,DLCI1根据服务器信道概念不能使用,DLCI62~63保留使用。