为什么传送蓝牙时会突然中断

2025-04-16 05:58:08
推荐回答(1个)
回答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数据帧在报头中携带有指明文件数据在文件具体某个位置开始的偏移量。当发生错误或连接中断时,接收方发送一个带有偏移量的信息帧,说明它希望发送方从该位置重新开始传输。这样就无需重传整个文件,从而实现了断点续传