TWS耳机方案设计开发

2020-05-08 15:39:21 fandoukeji

随着全方位移动通信时代的到来,轻便小巧的蓝牙产品正受到越来越多的青睐。近年来,蓝牙TWS耳机和音频网关产品迅速发展起来,成为蓝牙领域中的亮点。蓝牙TWS耳机和音频网关可以保证在10m范围内快速稳定的语音连接。音频网关不但是一个无线终端,直接与蓝牙TWS耳机连接通话。其更重要的功能是作为耳机的接入点,扩充GSM模块、固定语音终端等设备的短距离

蓝牙是一种工作频段在全世界范围内都可以自由使用的214GHz短距离射频无线通信技术,其利用短距离、低成本的无线连接替代了电缆连接,从而为现存的数据网络和小型的外围设备接口提供了统一的连接。蓝牙HeadSet应用蓝牙技术实现了TWS蓝牙耳机与音频网关(例如手机)之间的无线通信,从而提供手机呼叫免提接听的功能。在蓝牙HeadSet模型中首先需要明确两个角色:一个是AG(AudioGateway),他充当音频网关,既可以作为音频输入也可以作为音频输出;另一个是HS(HeadSet),即TWS蓝牙耳机,他是一个作为蓝牙远端音频输入与输出的设备,并且提供了一些远端控制方式。

一、TWS耳机开发流程

在蓝牙TWS耳机(Bluetoothheadset,HS)和音频网关(audiogateway,AG)的开发中,我们采用英国CSR公司的完全嵌入式蓝牙开发方案,以BlueCore22External蓝牙芯片为核心进行设计。CSR向开发者提供了几种基本剖面(profile)的下层固件(fireware),用以实现蓝牙核心协议栈的功能。我们所做的工作,重点是在headset剖面固件的基础上,利用其向上提供的应用程序API,编写适合于实际需要并符合蓝牙规范的耳机、音频网关应用程序,并且与硬件实体相结合,最终完整实现HS/AG的全部功能。在PC上编写蓝牙嵌入式程序,需要Linux的交叉编译环境。而相应的蓝牙调试、仿真、下载软件都是基于Windows操作系统的。解决这一矛盾的方法是使用Cygwin软件,它提供一个基于Win32API的Unix系统库,能模拟出在Windows平台上运行的Linux环境。在Cygwin中输入命令makebc02,应用程序和相应固件将被整体编译成一个.xdv下载文件,并通过PC并口到芯片的SPI接口,最终将所有软件嵌入蓝牙模块的Flash存储器中。

深圳TWS耳机方案开发公司

二、TWS蓝牙耳机硬件开发

CSR公司的BlueCore22External蓝牙芯片全面兼容蓝牙V1.1和V1.2规范,集成射频、基带信号处理器、微控制器及32KBRAM,外接8MBFlash用来存储蓝牙协议栈和应用程序。蓝牙模块的空中接口提供64KbpsA律PCM、μ律PCM和CVSD(连续可变斜率增量调制)3种压缩编码方式,所以根据软件选择的编码方式,应采用相应的具有64Kbps以上性能的编解码器。我们采用完全嵌入的开发方式,所有蓝牙软件栈和应用程序都运行在单芯片上,通过按键和LED与用户交互。

三、TWS蓝牙耳机软件的体系结构

蓝牙协议体系结构采用分层方式,包括蓝牙核心协议和一些专用协议。headset剖面定义了HS和AG应用中使用到的蓝牙规范协议并且指示了蓝牙规范中的一些消息和过程,可以被看作协议栈的纵切面。单声道耳机和音频网关完全兼容蓝牙规范中的headset剖面,他们的软件体系基本一致,只是在应用层上的程序有所区别。

其中基带、链路管理(LMP)、逻辑链路控制与适应协议(L2CAP)和业务搜寻协议(SDP)是蓝牙栈底的核心部分,分别完成跳频和数据帧拆装、数据流的过滤和传输、链路控制、业务质量(QoS)、协议复用、服务发现等功能。串行电缆仿真协议(FCCOMM)提供电缆替代的能力,为那些将串行线用作传输机制的高级业务提供服务。

蓝牙基带在同一射频链路上同时支持ACL(asynchronousconnectionless)和SCO(synchronousconnection2oriented)2种连接,ACL用作异步数据传输,SCO则适于同步话音。在HS和AG间,应用程序依靠基于ACL的RFCOMM连接收发AT命令,进行呼叫应答和交换MIC、speaker音量增益参数等控制操作。而基于SCO的语音流则由高层直接送交基带传输,这也是保证语音处理实时性的关键。

根据剖面规定,HS和AG都可以发起建立ACL。在ACL建链成功后,就能在任何希望的时候建立SCO。可以是AG主动发起SCO,也可以是收到HS发来的AT+AKPD(表明触发了耳机TALK键)后,AG响应建立SCO,但本质上都是只有AG有权最终决定何时产生SCO。同样,ACL和SCO的拆除也由AG负责。

深圳TWS耳机PCBA设计

四、蓝牙建链过程的软件实现

蓝牙应用程序运行于芯片内的虚拟机上,采用消息(message)驱动方式。调度器(schedular)负责采集消息事件,启动相应任务函数。

4.1初始化(initialisation)

首先初始化耳机库函数,向SDP注册相应的headset服务,设置设备类型(classofdevice)。如果存在一个已经完成过配对的设备,应用程序就发送CM_ADD_SM_DEVICE_REQ消息,在链路管理器中把它注册为可信任设备,从而简化双方鉴权步骤,加快建链速度。

4.2配对(Pairing)

配对请求CM_PAIR_REQ将设备置于配对模式,随后可以查询对方蓝牙地址,交换个人识别码(PIN)以进行鉴权。在两端设备输入的PIN码一致才能鉴权成功,最终基于PIN码、蓝牙地址和随机数生成通信所用的链路密钥(linkkey)并调用PsStore()函数将它存储在Flash上,供再次连接时使用。

4.3连接(connecting)

任何一端都可以以主或从设备的身份请求建立RFCOMM连接。值得注意的是,随后只有AG可以发出CM_SCO_CONNECT_REQ,请求建立SCO连接。如果双方都得到了正确的状态返回,语音链路就接通了。

五、TWS蓝牙耳机系统的原理设计方案

蓝牙系统的基本功能模块如图1所示。他的功能模块包括天线单元、链路控制器、链路管理、软件功能。

图1 蓝牙系统的基本功能模块

5.1无线技术规范

蓝牙天线属于微带天线,蓝牙无线接口是基于常规无线发射功率0dBm设计的,符合美国联通讯委员会(FCC)的ISM频段的规定。扩展频谱技术的应用使得功率可增至100dBm,可满足不同国家的需要。在日本、西班牙、法国,由于当地规定的频段相对较窄,可用内部软件转换实现。

5.2蓝牙基带技术规范

基带描述了设备的数字信号处理部分,即蓝牙链路控制器,他完成基带协议和其他底层的链路规程。主要包括以下几个方面:

(1)网络连接的建立;(2)链路类型和分组类型:链路类型决定了哪种分组模式能在特定的链路上使用,蓝牙基带技术支持2种链路类型:即同步面向连接类型SCO(主要用于语音)和异步非连接类型ACL(主要用于分组数据)。(3)纠错:基带控制器采用3种纠错方式:1ö3速率前向纠错编码(FEC),2ö3速率前向纠错编码(FEC),对数据的自动请求重传(ACL)。(4)鉴权和加密:蓝牙基带部分在物理层为用户提供保护和信息保密机制。鉴权基于“请求响应”运算法则。鉴权是蓝牙系统中的关键部分,他允许用户为个人的蓝牙设备建立一个信任域,比如只允许主人自己的笔记本电脑通过主人自己的移动电话通信。加密被用来保护连接的个人信息。密钥由程序的高层来管理。网络传送协议和应用程序可以为用户提供一个较强的安全机制。

六、HeadSet应用模型的协议栈结构

蓝牙的协议栈采用分层结构,如图2所示。

图2 蓝牙协议栈

各层功能简要介绍如下:

基带(baseband)是蓝牙的物理层,主要负责物理信道的编解码,底层的定时控制,以及在单个数据包传送期间的链路管理等业务,在原始的荷载数据上增加地址域和控制域,并进行错误检测或纠正。

LC(LinkControl)层负责在一批数据包传送期间,响应上层LM命令(如执行建立数据包的传输链路,维持链路等功能的LM命令)。

LM(LinkManager)层是蓝牙协议栈的链路管理层协议,他负责将上层HCI命令翻译成基带能接受的操作,建立ACL(数据)和SCO(语音)链接,以及使蓝牙设备进入节能状态的工作模式等。

ME(ManagementEntity)为管理实体,他的功能是发现远端设备并且与他们建立连接,为需要管理蓝牙微微网的应用层和其他系统层提供接口API。

SE(SecurityManager)和ME一起工作允许应用程序对鉴权和加密进行设置,真正的鉴权和加密是由硬件来实现的。

逻辑链路控制协议(L2CAP)采用了信道的概念在蓝牙设备不同应用之间建立不同的路径,但他只支持ACL链路。主要功能是为高层应用层提供协议复用,允许他们共享低层数据链路。并对超过低层支持的大数据包进行分组和重组操作,同时提供了对上层服务的质量管理。

业务搜寻协议(SDP)是极其重要的部分,他提供了一种SDP客户向SDP服务器查询关于服务信息的方式。服务器维护一个服务记录列表,服务记录列表描述与该服务器有关的服务特征。客户端可以通过发送一个SDP请求从服务器记录中索取服务信息,业务及业务特征,并在查询之后建立两个或多个蓝牙设备间的连接。

RFCOMM提供串口仿真,蓝牙的低层负责提供无线的连接方式,但在此之前已经存在很多传统的应用都是基于有线方式开发的,蓝牙如果不能解决对传统协议的适配问题,就很难成为一个广泛应用的标准。为此,蓝牙制定了像RFCOMM的适配协议来实现对传统应用的支持。

HeadSet控制层:主要是实现HeadSet的Profile定义的功能,例如对音频网关的MIC(麦克风)的音量控制,对SPK(扬声器)的音量控制,SCO链接的建立与释放,以及音频转移等。

音频端口应用层:是一些针对应用的功能,耳机应用层必须实现的应用特征有:

(1)接到AG的呼叫时能建立音频链接,通话结束后能断开音频链接。(2)能发起对远方的呼叫,通话结束后同样能断开音频链接。(3)音频链接转移。(4)对远端AG的音量控制。

蓝牙TWS耳机设计开发商

七、蓝牙HeadSet的建链

当蓝牙音频网关AG接收到一个呼叫,发起与HS的链接时,为使应用层语音通信可靠,需要蓝牙协议栈建立可靠的通信链路。根据蓝牙协议栈运行,从底层到高层的建链一般要经过以下几个过程:

(1)建立ACL即基带层的链接;(2)建立L2CAP层的链接;(3)进行SDP的查询过程;(4)建立RFCOMM层的链路;(5)RFCOMM链路建好后,将通过RFCOMM信道传输HeadSet控制层的一些AT命令;(6)建立SCO链接;(7)根据应用层的动作执行蓝牙HS与AG之间的音频通信。蓝牙协议栈的建链过程具体讨论如下。

7.1建立ACL即基带层的链接

AG接收到一个呼叫时,首先建立与HS之间的ACL链接,此HS与AG之间需预先绑定,或者把原来处于休眠状态下的HS唤醒。这是通过page进程完成的,在用page进程建立ACL时,定义AG是Master角色,于是AG首先发起查询,通过查询AG获得HS的蓝牙地址。然后AG在应用层的驱动下向查询到的HS发起一个page进程,当接收到HS返回的应答时,这时AG与HS之间的ACL链接已经成功建立。

一旦ACL链接建立,他可以被用来传送振铃信号。振铃信号的发送是通过AT命令RING来完成的。振铃信号也可以在SCO链路上发送。

7.2建立L2CAP层的链接

ACL链接好后,接着建L2CAP链路。AG首先在信令信道上发送一个链接请求信令,要求建立信道标号为0x0040的L2CAP(0x0001~0x003F是协议保留不可动态分配的,0x0040~0xFFFF可以自由分配),此信道的PSM(协议服务复用)标志0001,当对方返回链接响应信号,表明0x0040信道已经建好。然后对此信道进行配置,配置完信道后,就可以利用此CID为0x0040的L2CAP信道进行SDP查询了。

7.3进行SDP的查询过程

利用CID为0x0040的L2CAP信道进行SDP的查询过程,首先是AG在此L2CAP信道上发送一个SDP查询包,SDP查询包将查询SDP服务器端HS是否具有所需要的服务。若查询成功,在ACL链路上再建一条标号为0x0041的L2CAP链路,此信道的PSM为0003,用来传输RFCOMM数据流的。同时断开用作SDP查询的标号为0x0040的L2CAP链路。

7.4建立RFCOMM层的链路

当CID为0x0041的L2CAP信道建好之后,接着就是RFCOMM的建链过程,如图3所示。首先建控制信道,建链发起方AG在信道上发送一个SABM帧,即要求建RFCOMM层上的Channel0,如果响应方HS希望建立链接,返回一个UA帧,表明已经建立好了Channel0这条RFCOMM信道。此信道为控制信道,用来传送携带控制消息和命令的UIH帧。如果响应方HS不希望建立链接,返回一个DM帧。

其次建立数据信道,先是对数据传送信道的参数进行协商,协商命令PN参数包括对将要建立的信道Channel1的优先级,最大帧长等,当双方协商好后建立传输数据的信道Channel1。

图3 RFCOMM的建链过程

RFCOMM层的数据信道建好后,再对HeadSet控制层的控制命令进行传输。即在数据传送信道Channel1上利用UIH帧传送AT+CKPD=200等命令,当接收到对方的响应OK之后,就可以开始建立SCO链接。

7.5建立SCO链接

初始化时HCI发一个WRITE_VOICE_SETTING命令,对音频状态进行设置,当接收到AG的建立SCO链接的请求时,若HS允许,发送一个接收的HCI命令,在命令完成之后,传输音频信号的SCO链路就建好了,此时就可以进行语音通信。

八、蓝牙应用层的状态机设计

在协议栈的通信链路建立后,可以进行应用层通信。应用层有一个主状态机在运行,如图4所示。根据用户的动作以及AG发送的命令,HS应用进程将在各状态之间跑动。空闲状态HS与AG之间可能已经存在ACL链接,但没有RFCOMM信道建立,也没有音频信号的SCO链路存在。当AG响应内部事件或者用户请求时,便发起链接建立的请求,HS接收到建立链接的请求时,HS与AG开始建ACL,L2CAP,RFCOMM链路,建好RFCOMM信道后,AG发送一个或多个AT+RING的振铃指示命令,通知HS用户有入呼的音频链接到达。此时状态将转至来电振铃状态。

图4 应用层主状态机运行

来电振铃状态此时音频网关AG已经建立了与HS的ACL与RFCOMM信道,并且HS已经接收到振铃信号,这预示着音频网关要求建立SCO链接,若用户不对振铃做出响应,音频网关将终止RFCOMM信道,状态将重新回到空闲状态,若用户按下HS上的Bluetooth键,则表示用户接受入呼音频链接的请求,这时HS将发送AT控制命令AT+CKPD给AG,这时两者之间将建立SCO链接,状态将转至链接状态。

呼叫状态当HS用户按下HS上的Bluetooth键,用户发出呼叫音频网关的请求,这时HS将先建立ACL链接,再对音频网关进行SDP查询。若SDP查询成功,HS打开与AG链接的RFCOMM信道,并且发送AT命令+CKPD要求建立SCO的音频链接。当SCO链接建立时,状态将转移到连接状态,若SCO链接建立失败,状态将转到空闲状态。

链接状态链接状态下,ACL,L2CAP,RFCOMM都已经建立,而且已经执行了SDP查询,音频通话就绪。若用户对HS讲话,语音将通过SCO链路传送至AG,并通过AG将语音传到远端。

链接断开状态链接断开可以通过HS上的Bluetooth键完成,也可以通过AG的内部事件或用户干预触发产生。无论那一种原因引起,实质上都是AG链路释放的结果。如果HS发出了断开链接的请求,并且发送一个AT命令+CKPD到音频网关要求音频网关断开链接,于是音频网关断开SCO链接和RFCOMM信道。当RFCOMM断开时,状态将转换到空闲状态。而ACL链接有可能处于断开状态也有可能处于链接状态。

九、蓝牙HeadSet的实现方案

以摩托罗拉蓝牙解决方案为例,摩托罗拉在先进射频技术方面很有经验。摩托罗拉蓝牙解决方案可利用UART,RS232,USB或SPI连接主处理器,而主处理器可通过这些接口处理蓝牙协议上的堆栈及主控制器的接口等功能;而这个蓝牙解决方案则负责执行下堆栈(主控制器接口,链路管理程序协议,基带及射频)其余的功能。并采用摩托罗拉的MCORETM32位精简指令集运算(SISC)处理器内核,内含一个高度灵活的外围设备集,适用于多种不同的嵌入式蓝牙应用方案。

总结

近年来移动通信、便携式计算机以及因特网的迅速发展,使人们对电话通信以外的各种数据信息传递的需求日益增长。“蓝牙”技术把各种便携式电脑与蜂窝移动电话用无线电路连接起来,使计算机与通信更加密切结合起来,使人们能随时随地进行数据信息的交换与传输。