|
蓝牙无线连接可靠性的研究与实现
摘要:本文叙述了蓝牙无线连接在封频、基带协议、链路管理协议(LMP)中采用的可靠性措施。特别对提高蓝牙文件传拾的可靠性做了深入的研究,在蓝牙RFCOMM 协议的基础之上建立了本文所描述的蓝牙的文件传输协议,称之为RBTFT,其中,创造性地提出了支持文件断点续传的办法。并得到了实现,从而在应用层有效地提高了蓝牙无线连接的可靠性。
关键词:蓝牙,无线,可靠性,研究与实现
1 引言
蓝牙(Bluetooth )是一种低成本、短距离的无线连接技术标准。它是由爱立信(Ericsson ) ,国际商用机器(IBM ) ,英特尔( Intel ) ,诺基亚(Nokia )和东芝(Toshiba ) 5 家公司共同倡导的一种全球无线技术标准。其目的就是将智能移动电话与笔记本电脑、掌上电脑以及各种数字信息的外部设备用无线方式连接起来。目前,无线连接飞速普及、大受欢迎,蓝牙技术的广泛应用对无线移动数据通信将起到巨大的促进作用。
2 蓝牙无线频段的选择和抗干扰
蓝牙技术采用2400~2483.5MHz 的ISM (工业、科学和医学)频段,这是因为:
( l )该频段内没有其它系统的信号干扰,同时频段向公众开放,无须特许;
( 2 )该频段在全球范围内有效。
此时,抗干扰问题便变得非常重要。因为2400~2483.5MHz ISM 频段为开放频段,使用其中的任何频段都会遇到不可预测的干扰源(如某些家用电器、无绳电话和汽车开门器等),此外,对外部干扰源和其它蓝牙设备的干扰也应作充分估计。
抗干扰方法分为避免干扰和抑制干扰。避免干扰可通过降低各通信单元的信号发射电平来达到;抑制干扰则通过编码或直接序列扩频来实现。然而,在不同的无线环境下,专用系统的干扰和有用信号的动态范围变化极大。在超过50dB 的远近比和不同环境功率差异的情况下,要达到1Mb/s 以上速率,仅靠编码和处理增益是不够的。相反,由于信号可在没有干扰时(或干扰低时)发送,故避免干扰更容易一些。若采用时间避免干扰法,当遇到时域脉冲干扰时,发送的信号将会中止。另一方面,大部分无线系统是带宽受限的,而在2.45 GHZ 频段上,系统带宽为80MHz,可找到一段无明显干扰的频谱,同时利用频域滤波器对无线频带其余频谱进行抑制,以达到理想效果。因此,以频域避免干扰法更为可行。
3 蓝牙基带协议中的可靠性措施
蓝牙基带协议把保证蓝牙无线连接的可靠性放在了至关重要的位置上,确保匹克网内各蓝牙设备之间由射频构成可靠的物理连接。实际上,为了提高蓝牙无线连接的可靠性,以较小的开销有效地降低误码率、切实提高蓝牙无线连接的可靠性,蓝牙基带协议中定义了一系列提高蓝牙无线连接可靠性的措施,主要包括:差错检测和校正、进行数据编解码、差错控制、数据加噪等。下面,我们对这些可靠性措施一一进行阐述:
3.1 蓝牙基带协议中的差错控制方案
在蓝牙基带协议中采用的差错控制方案有:1/3 比例前向纠错码(FEC);2/3比例前向纠错码(FEC);数据的自动重传请求(ARQ, Automatic Repeat Request)方案。
其中,FEC(前向纠错)的目的是为了减少数据载荷重发的次数,使用FEC码,检错、纠错以及编解码的过程变得简单迅速,这对RX 和TX 间的有限处理时间非常重要。但是,采用FEC的缺点是还是会降低实际数据传输速率。所以,在纠错要求不高的环境中,可以不采用FEC。蓝牙规范基带协议中的分组的定义对于在有效载荷中是否采用FEC 给出了相当的灵活度,由此而定义了ACL链接中使用的DM 和DH分组以及SCO链接中使用的HV分组。分组头通常采用1/3比例前向纠错码保护,它含有很重要的链接信息,能够容忍多位错误。
3.1.1 1/3 比例前向纠错码(FEC)
在这种3位重复方案中,分组头中的每一位都重复三次。主要用来屏蔽头中的错误,因为分组头中包含有重要的连接信息。实际上在整个分组头里都采用了三位重复码。在这种3 位重复方案中,重复码大部分在接收端判决,既可用于数据包头,也可用于SCO链接的分组。例如,在SCO链接中使用的HV1分组里的话音段中也采用了这种编码格式。
3.1.2 2/3比例前向纠错码(FEC)
在这一方案中,采用了一种(15, 10)精简的(缩短的)汉明码表示方式。每10个信息位被编码为15位的码字,生成多项式为:g(D)= (D+1) (D4+D+1)。此类错误校正方法主要用来以最可靠的方式来发送数据分组。该方案能够在各代码字中纠正所有奇数位错和检测所有偶数位错,误码检测用于数据纠错。它既可用于SCO链接的同步分组,也可用于ACL 链接的异步分组。具体而言,2/3比例前向纠错码可用于DM分组、DV分组中的数据段、FHS 分组以及SCO链接中使用的HV2分组中。由于编码器采用长度为10 的信息段,所以值为O的尾位可附加在CRC位之后。而所有需要编码的位数(即:有效载荷头、用户数据、CRC和尾部数位)必须是10 的整倍数。通常是用线性反馈移位寄存器LFSR来生成2/3比例前向纠错码。
3.1.3 自动重传请求(ARQ)
在蓝牙无线连接中,为了保证可靠传送,常用做法是采用自动重传请求(ARQ)方案,由接收方发回特殊的控制帧,作为对输人肯定或否定性的确认(ACK/NACK)。如果出现丢帧或丢掉确认消息的情况,则计时器在超时后会发出超时信号,提醒发送方可能出现了问题,必须重传此帧。而且收方必须能够辨别收到的是重复帧还是新帧。
在蓝牙采用的ARQ方案中,蓝牙的DM、DH和DV分组的数据段可以进行传输或重发,直到收端返回成功接收确认信息(或超时)为止。该确认信息包含在返回分组头里,即捎带( Piggy backing) 。为了确定有效载荷正确与否,循环冗余校验码应该加载于有效载荷中。ARQ方案只工作在分组的有效载荷上(仅针对具有CRC的有效载荷)。分组头和话音有效载荷不受ARQ 保护。
蓝牙使用快速、无编号确认方案。为了应答前次接收分组,应返回ACK (ARQN=1)或NAK (ARQN=0)。在返回分组的分组头里,生成ACK / NACK 域,同时,接收分组的分组头中的ACK / NACK域可表明前面的负载是否正确接收,决定是否需要重发或发送下一个分组。从单元将在主-从时隙后紧跟在从-主时隙中进行应答。主单元则将在下一个事件中应答,该事件将给出同一从单元地址。由于处理时间短,当分组接收时,解码选择在空闲时间进行,并要简化FEC编码结构,以加快处理速度。快速ARQ方案与停止等待ARQ方案相似,但时延最小,实际上没有由ARQ方案引起的附加时延。该结构比退后n帧ARQ更有效,并与选择重传ARQ 效率相同,但由于只有失效的分组被重发,可减少开销。
在快速ARQ方案中,收方为了辨别是重复帧还是新帧(即过滤重传数据),头部将附加SEQN位。通常,每次新的CRC数据有效载荷传输,SEQN位将交替变化。而在重传中,SEQN位不发生变化。这样,通过辨认SEQN位是否发生变化,收方即可辨别出是重复帧还是新帧。
3.2 蓝牙基带协议中的错误校验
在蓝牙无线连接中,至少应该对HEC进行分组头校验。另外,必要时其有效载荷也必须进行CRC校验。使用分组头HEC信息和有效载荷中的CRC信息,可以检测分组错误和传输错误。
3.2.1 分组头HEC检测
为了检测蓝牙分组头,每个分组头的最高8位定义为HEC ( Header-Error-Check,头部错误检测)信息。HEC由多项式647(八进制数)生成,在生成HEC之前,HEC生成器用一个8 位值来初始化。在初始化后,对分组头的其它10位进行计算,得到8位的HEC值。另外,在接收方校验HEC之前,也必须先进行适当的初始化。在接收分组时,首先校验的是访问码,由于在信道访问码中的64位同步字来源于24位主单元的低地址部分(LAP),这样就可以校验LAP是否正确,并可以防止接收方接收来自其它匹克网的分组。
3.2.2 有效载荷的CRC校验
CRC校验即循环冗余码校验,是一种常用的检错编码,而且已经有相应的国际标准,如CRC-CCITT。在蓝牙无线连接中,发送方按照国际标准CRC-CCITT ,即g (D) = ( D + 1 ) ( D7 +D4+D3+D2+D+1),并用线性反馈移位寄存器LFSR硬件电路生成有效载荷(数据信息)的CRC校验码,附加在数据信息后面构成完整的数据帧,由接收方在接收时检查。若出错,返回NAK,发送方收到NAK 后重发该数据帧。
3.3 蓝牙基带协议中的其它可靠性措施
3.3.1 教据加噪
所有的分组头和载荷信息在发送前都要利用数据加噪字进行加噪处理。这主要是为了避免在传输过程中出现过长的连续0或1的位流模式。基带处理器需要从接收到的模拟数据信号中判断数据是0还是1,但过长的连续0或1位流会造成问题。因为在接收到的模拟数据信号中并不存在象直流信号中那样的参考点,因此必须依靠接收到的最后几个传输信号进行校正。任何连续的0或1的长序列位流串都可能导致校正失败。因此需要采用数据加噪技术对信号进行扰码处理,以大大降低出现长序列0或1位流串的可能性。
在蓝牙无线连接的发送方,这种加噪过程先于FEC编码完成。在接收端,接收数据使用相同的数据加噪字进行还原处理,该还原处理在FEC解码后完成。
3.3.2 链路监测
在无线连接中,有很多原因能够引起连接中断,比如,设备关闭、设备移出了蓝牙通信范围。而且在连接中断发生时,通常不会有任何提前报警,所以,在蓝牙主、从单元两端对链路进行监测是非常必要的。
为此,在蓝牙主、从单元均使用链路监测定时器。一旦收到经过HEC校验的分组和正确的蓝牙活动成员地址(AMADDR),定时器就复位。如果在连接状态的任何时刻,定时器达到阈值(该阈值可协商),则连接复位。SCO和ACL 连接使用同一阈值。这样,就能够在蓝牙主、从单元两端对链路进行监测了。
4 蓝牙链路管理层(LM)中的可靠性措施
类似地,在蓝牙链路管理层(LM )中,也定义有保证可靠的无线连接的措施。
在蓝牙接收和发送设备的链路管理层之间是通过协议数据单元(PDU)来相互通信的。PDU 由操作码、事件ID和内容参数组成,其中,7 位操作码用来标识不同类型的PDU。
如果链路管理器收到不能识别操作码的PDU,就用LMP no accepted协议数据单元(PDU)应答,并且LMP no accepted PDU中含有原因码unknown LMP PDU。而且返回的操作码参数同样也是不能够识别的操作码。如果链路管理器收到含有无效参数的PDU,就用LMP no accepted PDU应答,并且LMP no accepted PDU中含有原因码invalid LMP PDU(无效LMP 参数).
某一方在等待对方响应时,如果发现超过了最大响应时间或者检测到链路丢失,等待应答的一方就可以认为该过程已经终止。
信道出错或发送方系统出错都会引起发送错误的消息。为了检测后一种情况,LM应监测错误消息数量,一旦超过阈值就将其断开,该阈值可根据实际情况进行设置。
由于无法实时地截获PDU,在链路两端的LM都对同一过程进行初始化而且都没有成功时,很可能会发生冲突。这时,主单元将通过发送含有原因码“LMP Error Transaction Collision ”的LMP no accepted PDU,中止从单元的初始化过程,从而保证主单元的初始化过程能够顺利进行。
5 蓝牙应用层中可采用的可靠性措施
5.1 稳定、可靠的蓝牙文件传输协议:RBTFT
蓝牙的文件传输是通过RFCOMM协议建立一条端到端的连接。所以在蓝牙RFCOMM协议的基础之上建立了本文所描述的蓝牙的文件传输协议,称之为RBTFT(表示为Reliable Bluetooth File Transfer),其主要目标是在蓝牙设备之间建立一条可靠的无线连接通道,进行可靠的文件传输。该协议目前的开发是采用VC+ +,应用平台为WIN98/2000/NT,但作为RBTFT 协议的本身不受具体编程语言及操作系统所限制。
RBTFT 协议支持一次传输多个文件、断点续传和CRC校验。其设计思想是基于帧传输方式,即在发送数据时是一帧一帧地发送,为保证可靠的传输,RBTFT协议对RBTFT帧进行了精心的定义,RBTFT 帧由报头、数据子包组成,报头指明帧类型(有些帧是不带数据的命令帧、信息帧,如BTFNAK ) ,还携带CRC校验信息。而数据子包还有不同的子包结束符,指明后面是否有后续包等。在进行数据传输时,采用发送/应答/握手/失败方式,即发送一帧数据,一个应答,若应答没收到,重新进行协商握手,握手失败则向应用程序报告错误。
在利用RBTFT 协议进行实际的文件传输时,首先第一步是进行串口初始化操作,在串口初始化成功时,通过异步消息RBTFT C0NNECT向应用程序报告,表示一条通信链路建立完毕。开始发送数据时,应用程序根据内部缓冲区的大小决定每次真正可发送的数据量,数据将被存储在内部缓冲区内,按照RBTFT协议,内部缓冲区的数据分割成一帧一帧并加人帧信息和CRC校验信息,每一帧将调用内部线程发送数据,当内部缓冲区的数据全部发送完毕(即内部缓冲区为空)时,则向应用程序发送消息表示内部缓冲区的数据全部发送完毕,应用程序将可继续发送其余的数据。在接收方,每到达一帧时,接收方就判读帧信息、对到达的数据进行接收并进行CRC校验,若发生错误则通过RBTFT协议所定义的方式进行重发或协商,当通信能继续则不向应用程序发送任何消息,继续保持链路,若通信不能继续,则放弃此链路,并且向应用程序发送RBTFT ERROR的消息,应用程序将重新复位此链路或进行其它相应的处理。另外,当有任何一方断开链接,应用程序将接收到RBTFT CLOSE消息,表示此链路已经断开。在接收端,所接收到的分帧的数据被去掉帧头重新归到接收缓冲区流,重新拼装为所传输的文件。然后,再进行下一个文件的传输,直至传输完所有的文件。
对于在应用层提高蓝牙无线连接的可靠性而言,最为可贵的是RBTFT协议支持断点续传。我们目前所实现的也就是将RBTFT文件传输协议嵌人到蓝牙无线文件传输的应用中,这样,即便出现文件传输中断的情况,也可以进行断点续传。这对于大文件无线传输尤为有意义。
RBTFT协议支持断点续传的原理在于RBTFT数据帧在报头中携带有指明文件数据在文件具体某个位置开始的偏移量。当发生错误或连接中断时,接收方发送一个带有偏移量的信息帧,说明它希望发送方从该位置重新开始传输。这样就无需重传整个文件,从而实现了断点续传。
5.2 蓝牙文件传翰RBTFT协议发送文件的详细过程
以下是蓝牙文件传输RBTFT 协议发送单个文件的详细过程:
n =0; //初始化重试次数计数器,收发双方建立连接;
file = fopen (filename,“rb ”); 设置并发送包含文件名、文件长度的报头;
for ( ; ;) {
message =所读取接收方发来的响应报头信息;
switch (message) {
case 接收方返回“已经准备接收”:
发送第一个数据子包,并以子包结束符指明后面有后续包;
Continue ;
case 接收方拒绝接收:
fclose (file);
return OK;
case 接收方返回确认信息:
发下一个包;
Continue;
case 超时:n=n+l;
if (n>20)//重试20 次,若还不能恢复连接,则放弃
{return ERROR;}
else if
{重新建立连接;
请求接收方发送带有偏移量的信息帧;
接收该信息帧;
从指定偏移量处开始继续传送;
Continue;}
case 接收方放弃传输:
return ERROR;
case 文件传输完毕:
输出“文件传输完毕”的屏幕提示信息;
return OK;
}
6 结论
本文叙述了蓝牙无线连接在射频、基带协议、链路管理协议(LMP)中采用的可靠性措施,包括:差错检测和校正、进行数据编解码、差错控制、数据加噪等。为了进一步在无线连接中提高蓝牙文件传输的可靠性,在蓝牙RFCOMM协议的基础之上建立了本文所描述的蓝牙的文件传输协议,称之为RBTFT,其中,创造性地提出了支持文件断点续传的办法,并得到了实现,从而在应用层有效地提高了蓝牙无线连接的可靠性。我们相信,在切实提高了蓝牙无线连接的可靠性之后,蓝牙技术将会得到更加广泛的应用。 |
|