本发明涉及蓝牙通信领域,尤其涉及一种蓝牙数据传输方法及装置。
背景技术:
在蓝牙4.0及其之后的协议中,包含了经典(classic)蓝牙以及低功耗(lowenergy,le)蓝牙两部分。低功耗蓝牙协议在蓝牙4.0协议中引入,数据包中的数据长度最大为39字节(byte),使用1mbps(兆比特每秒)速率传输。经典蓝牙数据包中的数据长度最大为1023字节,传输速率可以为1mbps、2mbps以及3mbps。
为了减少对经典蓝牙协议的修改,同时为了支持低功耗蓝牙,通常情况下将两种工作模式分开。然而,在实际应用中,当经典蓝牙在进行同步链路数据包发送或接收时,可能存在低功耗蓝牙的连接事件(connectionevent,ce),即存在两种工作模式的数据传输时隙发生冲突的情况。
技术实现要素:
本发明实施例解决的是如何避免两种工作模式的数据传输时隙发生冲突的问题。
为解决上述问题,本发明实施例提供一种经典蓝牙数据传输方法,包括:
当接收到对端设备发送的广播包时,获取接收所述广播包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置;
根据所述时间位置,对低功耗蓝牙连接事件的发送时隙进行调整,使得调整后的低功耗蓝牙连接事件的发送时隙处于所述经典蓝牙的同步链路数据包所未占用的发送时隙。
可选的,所述对所述低功耗蓝牙连接事件的发送时隙进行调整,包括:对所述低功耗蓝牙连接事件的发送时隙之前的传输窗口偏移参数进行调整。
可选的,所述经典蓝牙的同步链路数据包所未占用的发送时隙包括:第一发送时隙和第二发送时隙,所述第一发送时隙为所述经典蓝牙的同步链路数据包发送周期中的第三个发送时隙,所述第二发送时隙为所述经典蓝牙的同步链路数据包发送周期中的第六个发送时隙。
可选的,所述蓝牙数据传输方法还包括:对所述低功耗蓝牙连接事件的数据包发送周期进行调整,使得调整后的低功耗蓝牙连接事件的数据包发送周期等于n×7.5ms,n为正整数。
可选的,采用如下公式对所述低功耗蓝牙连接事件的数据包发送周期进行调整:conninterval=[(max_interval+min_interval)/12+1]×6,其中,conninterval为调整后的低功耗蓝牙连接事件的数据包发送周期,max_interval为主机下发的最大数据包发送周期,min_interval为主机下发的最小数据包发送周期。
可选的,所述获取接收所述广播包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置,包括:将所述接收所述广播包的时隙对应的时钟计数值对24取模,得到的模值与时钟周期相乘,将得到的乘积作为所述接收所述广播包的时隙在所述经典蓝牙的同步链路数据包发送周期中所处的时间位置。
本发明实施例还提供了一种蓝牙数据传输装置,包括:
接收单元,用于接收对端设备发送的广播包;
时间位置获取单元,用于获取所述接收单元接收所述广播包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置;
调整单元,用于根据所述时间位置,对低功耗蓝牙连接事件的发送时隙进行调整,使得调整后的低功耗蓝牙连接事件的发送时隙处于所述经典蓝牙的同步链路数据包所未占用的发送时隙。
可选的,所述调整单元用于对所述低功耗蓝牙连接事件的发送时隙之前的传输窗口偏移参数进行调整。
可选的,所述调整单元还用于:对所述低功耗蓝牙连接事件的数据包发送周期进行调整,使得调整后的低功耗蓝牙连接事件的数据包发送周期等于n×7.5ms,n为正整数。
可选的,所述调整单元采用如下公式对所述低功耗蓝牙连接事件的数据包发送周期进行调整:conninterval=[(max_interval+min_interval)/12+1]×6,其中,conninterval为调整后的低功耗蓝牙连接事件的数据包发送周期,max_interval为主机下发的最大数据包发送周期,min_interval为主机下发的最小数据包发送周期。
可选的,所述时间位置获取单元用于:将所述接收所述广播包的时隙对应的时钟计数值对24取模,得到的模值与时钟周期相乘,将得到的乘积作为所述接收所述广播广播包的时隙在所述经典蓝牙的同步链路数据包发送周期中所处的时间位置。
与现有技术相比,本发明实施例的技术方案具有以下优点:
根据接收到的广播包在经典蓝牙的同步链路数据包发送周期中所处的时间位置,将低功耗蓝牙连接事件的发送时隙调整为经典蓝牙的同步链路数据包所未占用的发送时隙,从而可以有效地避免低功耗蓝牙连接事件的发送时隙与同步链路数据包的发送时隙冲突。
附图说明
图1是现有蓝牙协议中低功耗蓝牙的工作时序图;
图2是本发明实施例中的一种蓝牙数据传输方法的流程图;
图3是现有同步链路数据包发送周期的时序图;
图4是本发明实施例中的一种蓝牙数据传输装置的结构示意图。
具体实施方式
在现有技术中,在蓝牙4.0及其之后的协议中,蓝牙设备的工作模式包括经典蓝牙模式和低功耗蓝牙模式两种。为了减少对经典蓝牙协议的修改,同时为了支持低功耗蓝牙,通常情况下将两种工作模式分开。然而,在实际应用中,当经典蓝牙在进行同步链路数据包发送或接收时,可能存在低功耗蓝牙的连接事件(connectionevent,ce),两种工作模式的数据传输时隙有可能会发生冲突。
在本发明实施例中,根据接收到的广播包在经典蓝牙的同步链路数据包发送周期中所处的时间位置,将低功耗蓝牙连接事件的发送时隙调整为经典蓝牙的同步链路数据包所未占用的发送时隙,从而可以有效地避免低功耗蓝牙连接事件的发送时隙与同步链路数据包的发送时隙冲突。
为使本发明实施例的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
在对本发明实施例提供的蓝牙数据传输方法进行描述之前,对现有的低功耗蓝牙传输过程进行简要说明。
参照图1,给出了现有蓝牙协议中,低功耗蓝牙从接收广告包(advertising,adv)到发送第一个数据包的时序图。
在现有的蓝牙协议中规定,一个时钟周期为312.5μs,以2×312.5μs=625μs为一个时隙。本端设备在偶数时隙向对端设备发送数据包,在奇数时隙接收对端设备发送的数据包,以2×625μs=1.25ms为一个收发对,约定tim0对应发送开始,对应发送开始时刻为0μs,tim2对应接收开始,对应接收开始时刻为625μs。
在t0时刻,本端设备接收对端设备发送的广告包;在t1时刻,本端设备接收完成广告包。在经过一个间隔时长(t_ifs)后,在t2~t3时刻,向对端设备发送连接请求(connect_req)协议数据单元(protocoldataunit,pdu)。在连接请求pdu发送完成后,在t4~t5时刻内,向对端设备发送第一个数据包。在第一个数据包发送完成后的一个间隔时长(t_ifs)后,在t6~t7时刻接收对端设备发送的应答数据。之后,每隔一个预设的定时发送周期(conninterval),定时进行数据包的发送操作,定时发送周期以1.25ms为单位。
t3~t4时刻的取值范围可以为(1.25ms+transmitwindowoffset)~(1.25ms+transmitwindowoffset+transmitwindowsize)。transmitwindowoffset为传输窗口偏移参数,transmitwindowsize为传输窗口大小,二者可以根据实际需求进行设定。例如,设定transmitwindowoffset=5ms,设定transmitwindowsize=5ms。
约定所有的发送都在tim0进行,因此,t4时刻为tim0时刻,由于定时发送周期为1.25ms的整数倍,因此,在每个定时发送周期的第一次数据发送时刻均为tim0,这样可以保证经典模式发送与低功耗蓝牙模式发送在蓝牙时钟的差值是4倍的关系,因此可以确保经典蓝牙模式和低功耗蓝牙模式均在tim0发送数据。也就是说,经典蓝牙模式和低功耗蓝牙模式的发送时隙相同。
本发明实施例提供了一种蓝牙数据传输方法,参照图2,以下通过具体步骤进行详细说明。
步骤s201,接收对端设备发送的广告包。
在实际应用中,对端设备可以为从设备,本端设备可以为主设备,例如,本端设备为笔记本电脑,对端设备为蓝牙鼠标。在处于不同的应用环境时,主设备和从设备之间可以自由切换。
在具体实施中,当本端设备与对端设备建立低功耗蓝牙连接时,本端设备的主机向本端设备的基带控制器下发创建低功耗连接(hci_le_create_connection)请求后,本端设备的基带控制器进入初始化(initiating)状态。
当基带控制器处于初始化状态时,可以实时监测是否接收到对端设备发送的广告包。若基带控制器一直未接收到对端设备发送的广告包时,则一直处于初始化状态,并持续监听,直至接收到本端设备的主机下发的取消创建连接(hci_le_create_connection_cancel)指令时,才退出初始化状态。
若基带控制器监测到对端设备发送广告包时,接收对端设备发送的广告包,在完成接收广告包后,经过一个间隔时长(t_ifs),向对端设备发送包含有连接请求(connect_req)的pdu。在现有的协议中,一个间隔时长为150μs。
步骤s202,获取所述接收所述广告包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置。
在具体实施中,可以根据接收广告包的时隙,以及经典蓝牙的同步链路数据包发送周期,来获知接收广告包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置。
首先,参照图3,给出了现有蓝牙协议中,上述三种同步链路数据包格式的发送接收的时序图。
当数据包格式为hv3时,每3个收发对为一个数据包发送周期,即t0~t3为一个数据包发送周期,t3~t6为一个数据包发送周期。
当数据包格式为ev3时,与数据包格式为hv3时类似,每3个收发对为一个数据包发送周期,即t0~t3为一个数据包发送周期,t3~t6为一个数据包发送周期。在每一个数据包发送周期内,第一个收发对进行数据包发送和数据包接收,第二个收发对为重传窗口。例如,当t0~t3为一个数据包发送周期时,第一个收发对为t0~t1,第二个收发对为t1~t2。
当数据包格式为2-ev3时,每6个收发对为一个数据包发送周期,即t0~t6为一个数据包发送周期。在每一个数据包发送周期内,第一个收发对(t0~t1)进行数据包发送和数据包接收,第二个收发对(t1~t2)为重传窗口。t6时刻为当前数据包发送周期的结束时刻,也为下一个数据包发送周期的起始时刻。
对应于hv3、ev3以及2-ev3三种同步链路数据包格式,hv3格式以及ev3格式对应的数据包发送周期为3.75ms,每个数据包发送周期对应的时钟周期个数为3.75ms/312.5μs=12;2-ev3的格式的每个数据包发送周期对应的时钟周期个数为7.5ms/312.5μs=24。
在本发明实施例中,在初始化模式(initiating)后接收到广告包(adv)时可获知当前蓝牙本地时钟计数值,将此时钟计数值对24取模后与上0xffffffc,此时即可获知接收广播包的时隙在经典蓝牙的同步链路数据包(sco/esco)发送周期中所处的时间位置。
例如,低功耗蓝牙接收广告包(adv)的时隙对应的蓝牙本地时钟计数值为109,则(109%24)&0xffffffc=12,即接收广播包的时隙所处的时间位置为同步链路数据包(sco/esco)发送周期的3.75ms~5ms。
步骤s203,根据所述时间位置,对低功耗蓝牙连接事件的发送时隙进行调整。
在实际应用中,根据图1可知,在接收完成对端设备发送的广告包后,间隔一个t_ifs,向对端设备发送连接请求pdu,在pdu中携带有传输窗口偏移参数(transmitwindowoffset),以告知对端设备何时进行第一次数据包的发送。
在本发明实施例中,对低功耗蓝牙连接事件发送时隙进行调整,可以是对传输窗口偏移参数(即transmitwindowoffset)进行调整,使得调整后的低功耗蓝牙连接事件的发送时隙处于经典蓝牙的同步链路数据包所未占用的发送时隙。
在本发明实施例中,从图3中可以得知,现有的三种同步链路数据包格式的数据包发送周期中,存在三种同步链路数据包格式的数据包发送周期均未占用的收发对:收发对(t2~t3)以及收发对(t5~t6),收发对(t2~t3)中包括第三个发送时隙,收发对(t5~t6)中包括第六个发送时隙。
在本发明实施例中,可以将低功耗蓝牙连接事件的发送时隙调整为同步链路数据包发送周期的第三个发送时隙,也可以调整为第六个发送时隙,可以根据情况自行设定。
例如,低功耗蓝牙接收到广告包的时隙对应的蓝牙本地时钟计数值为196。将196对24进行取模,得到(196%24)&0xffffffc=4,4×325μs=1.25ms,即接收到广告包的时隙所处的时间位置为t1~t2。参照图3可知,此时已经与esco/sco发送/接收时隙相冲突。
假设将第一个低功耗蓝牙的连接事件发送时刻安排在图3中的t2时刻,则需要将低功耗蓝牙的连接事件的发送时隙向后偏移1.25ms。由于根据现有的蓝牙协议,第一个连接事件在连接请求pdu发送完成之后的1.25ms+transmitwindowoffset到1.25ms+transmitwindowoffset+transmitwindowsize之间进行,因此只要将连接请求数据单元(connect_req)pdu的传输窗口偏移参数(transmitwindowoffset)设为0即可。
为了避免兼容性问题,可以将传输窗口偏移参数(transmitwindowoffset+6)。由于已经约定数据发送均在tim0进行,因此可以保证第一个连接事件在图3的t2时刻进行,由于设定低功耗蓝牙的连接事件的发包周期为7.5ms的整数倍,因此后续的连接事件必然和esco/sco传输周期互斥。
假设将第一个低功耗蓝牙的连接事件发送时刻安排在图3中的t5时刻,因此可以将连接请求数据单元(connect_req)pdu的传输窗口偏移参数(transmitwindowoffset)设置为2即可。
在本发明实施例中,由于hv3、ev3以及2-ev3的数据包发送周期的最小公倍数为7.5ms,因此低功耗蓝牙连接事件的定时发送周期(conninterval),也即低功耗蓝牙连接事件的数据包发送周期需能够被7.5ms整除。
在本发明一实施例中,将低功耗蓝牙连接事件的数据包发送周期conninterval调整为:conninterval=[(max_interval+min_interval)/12+1]×6,其中,conninterval为调整后的低功耗蓝牙连接事件的数据包发送周期,max_interval为主机下发的最大数据包发送周期,min_interval为主机下发的最小数据包发送周期。
例如,max_interval=12,min_interval=6,则conninterval=2.5×6=15。由于conninterval以1.25ms为单位,因此conninterval对应的时长为15×1.25=18.75ms。
在现有技术中,存在低功耗蓝牙连接事件与经典蓝牙同步链路数据包冲突的情况。若优先调度经典蓝牙同步链路数据包,则可能会影响低功耗蓝牙连接事件对应的业务,导致业务超时。反之,若优先调度低功耗蓝牙连接事件,则可能会影响经典蓝牙的业务,例如,影响音质。
在本发明实施例中,根据接收到的广播包在经典蓝牙的同步链路数据包发送周期中所处的时间位置,将低功耗蓝牙连接事件的发送时隙调整为经典蓝牙的同步链路数据包所未占用的发送时隙,从而可以有效地避免低功耗蓝牙连接事件的发送时隙与同步链路数据包的发送时隙冲突。
参照图4,给出了本发明实施例中的一种蓝牙数据传输装置40,包括:接收单元401、时间位置获取单元402以及调整单元403,其中:
接收单元401,用于接收对端设备发送的广播包;
时间位置获取单元402,用于获取所述接收单元接收所述广播包的时隙在经典蓝牙的同步链路数据包发送周期中所处的时间位置;
调整单元403,用于根据所述时间位置,对低功耗蓝牙连接事件的发送时隙进行调整,使得调整后的低功耗蓝牙连接事件的发送时隙处于所述经典蓝牙的同步链路数据包所未占用的发送时隙。
在具体实施中,所述调整单元403可以用于对所述低功耗蓝牙连接事件的发送时隙之前的传输窗口偏移参数进行调整。
在具体实施中,所述经典蓝牙的同步链路数据包所未占用的发送时隙包括第一发送时隙和第二发送时隙,所述第一发送时隙为所述经典蓝牙的同步链路数据包发送周期中的第三个发送时隙,所述第二发送时隙为所述经典蓝牙的同步链路数据包发送周期中的第六个发送时隙。
在具体实施中,所述调整单元403还可以用于:对所述低功耗蓝牙连接事件的数据包发送周期进行调整,使得调整后的低功耗蓝牙连接事件的数据包发送周期等于n×7.5ms,n为正整数。
在具体实施中,所述调整单元403可以采用如下公式对所述低功耗蓝牙连接事件的数据包发送周期进行调整:
conninterval=[(max_interval+min_interval)/12+1]×6,其中,conninterval为调整后的低功耗蓝牙连接事件的数据包发送周期,max_interval为主机下发的最大数据包发送周期,min_interval为主机下发的最小数据包发送周期。
在具体实施中,所述时间位置获取单元402可以用于:将所述接收所述广播包的时隙对应的时钟计数值对24取模,得到的模值与时钟周期相乘,将得到的乘积作为所述接收所述广播包的时隙在所述经典蓝牙的同步链路数据包发送周期中所处的时间位置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:rom、ram、磁盘或光盘等。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。