https://static.assets-stash.eet-china.com/album/old-resources/2008/12/12/8d8a637a-d4b9-406e-83dc-e1777df9e854.rar
内容概要:
蓝牙技术广泛应用于局域网络中各类数据及语音设备的无线传输。根据蓝牙耳机的协议栈原理描述蓝牙无线耳机的硬件电路设计和软件设计的实现过程;详细说明其系统内部传输音频数据的I2 S 总线的接口原理、读写时序和控制函数;按照蓝牙耳机应用规范中各层数据处理要求,给出嵌入式实时操作系统VxWorks 在蓝牙芯片BRF6150上的部分程序移植,最后通过协议模型讲述语音网关与蓝牙耳机进行语音传输的具体过程。
蓝牙耳机是一种无线语音传输技术,是基于耳机在无线技术方面的延伸。它是相配于蓝牙技术而进入多媒体个人区域网络的。随着蓝牙技术的日趋完善和蓝牙产品市场占有率逐渐提升,蓝牙耳机在技术上也将不断得到改进,使之成为个人多媒体区域网络的主要配套产品。蓝牙耳机的应用范围,除了手机以外,PDA,无绳电话应用,汽车免提工具,电话终端等,也是蓝牙耳机发挥起技术优势的应用领域。本文设计的蓝牙耳机支持蓝牙规范1.2版本,传输距离达10米,传输速率达723.2kbit/s,并且具有低功耗和(几乎)无辐射等技术优点和优势。
1 蓝牙技术
蓝牙(Bluetooth)作为一种低成本、短距离的无线连接技术标准,是由爱立信(Ericsson)、国际商用机器(IBM)、英特尔(Intel)、诺基亚(Nokia)和东芝(Toshiba)5家公司共同倡导的一种全球无线技术标准,它是一种无线数据与语音通信的开放性全球规范,它以低成本的短距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其实质是建立通用的无线空中接口及其控制软件的公开标准,实现设备间的电缆替代。
1.1 蓝牙协议栈
不是任何应用都必须使用全部蓝牙协议,根据功能不同,蓝牙协议栈可分为4 层:
1) 蓝牙核心协议,包括基带协议BaseBand),链路管理协议(LMP),逻辑链路控制与适配协议(L2CAP),服务发现协议(SDP)。
其中,基带协议(BaseBand)确保微微网内各蓝牙设备单元之间由射频构成物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。它使用查询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL)。而且,在同一射频上可实现多路数据传送。ACL适用于数据分组,SCO适用于话音以及话音与数据的组合,所有的话音和数据分组都附有不同级别的前向纠错(FEC)或循环冗余校验(CRC),而且可进行加密。此外,对于不同数据类型(包括连接管理信息和控制信息)都分配一个特殊通道,负责跳频和蓝牙数据及信息帧的传输。
链路管理协议(LMP)负责各蓝牙设备间连接的建立。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。
逻辑链路控制和适配协议(L2CAP)是基带的上层协议,可以认为它与LMP并行工作,它们的区别在于,当业务数据不经过LMP时,L2CAP为上层提供服务。L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP允许高层协议以64k字节长度收发数据分组。虽然基带协议提供了SCO和ACL两种连接类型,但L2CAP只支持ACL。
服务发现协议(SDP)是所有用户模式的基础,为上层应用程序提供一种机制来发现网络中可用的设备信息和服务类型,从而在蓝牙设备间建立相应的连接。
2) 电缆替代协议,即串口仿真协议(RFCOMM),是基于ETSI-07.10规范的串行线仿真协议。它在蓝牙基带协议上仿真RS-232控制和数据信号,为使用串行线传送机制的上层协议提供服务。
3) 电话控制协议(TCP),包括二元电话控制协议(TCS-Binary)和AT命令.二元电话控制协议是蓝牙SIG(特殊利益集团)基于国际电联的ITU-T Q.931标准开发的面向比特协议,定义了蓝牙组件间建立语音和数据呼叫控制信令,以及处理蓝牙TCS设备群的移动管理进程,电话控制AT信令是蓝牙SIG根据ITU-TV.250和ETSI 300 916(GSM07.07)定义的控制多用户模式下移动电话和调制解调器的AT命令集,用于传真业务时根据需要对AT命令集做出限定。
4) 选用协议,包括点对点协议(PPP) ,UDP/TCP/IP协议 ,对象交换协议(OBEX),无线应用协议(WAP)等。
1.2 蓝牙应用规范
在蓝牙应用规范中,定义了4个通用的应用规范,是实现其它蓝牙应用规范的基础。
1) 通用访问应用规范(GAP)
GAP定义了一个蓝牙设备如何发现另一个设备并与之建立连接,主要处理未连接的设备之间发现对方以及建立连接的问题。这个框架定义的是通用的操作,可以被与GAP有关的框架和实现多个框架的设备使用。GAP保证任意厂商生产的两个蓝牙设备之间可以交换信息,并发现这些设备可以提供什么类型的服务。一个蓝牙设备可以不遵守其它蓝牙框架的约定,但必须遵守GAP框架以保证基本的互用和共存。
2) 服务发现应用规范(SDAP)
SDAP定义了发现一个蓝牙设备可用服务的方法,主要处理对已有服务的搜索。SDAP包括一个用户服务发现应用,这个应用用来在一个蓝牙设备中对服务进行定位,它与服务发现协议接口。SDAP框架依赖于GAP框架,采用了GAP框架的一部分。
3) 串口应用规范(SPP)
SPP定义了如何在两个蓝牙设备上建立虚拟串口,然后将这两个串口连接起来。采用这个框架,可以为蓝牙设备提供一个使用RS232控制信令的串行线缆。串口框架就像SDAP框架一样依赖于GAP框架,也采用了GAP框架的一部分。
4) 通用对象交换应用规范(GOEP)
GOEP定义了一套用于内容交换的协议和过程,以及如何从另一个蓝牙设备接收数据等。一些用户模块如文件传输和同步等都基于这个框架。GOEP依赖于串口框架。
在这些通用的应用规范的基础之上,蓝牙SIG还定义了一些面向最终用户的应用规范,例如:耳机应用、个人局域网应用。
蓝牙耳机的协议栈原理见图1。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
2 蓝牙耳机系统设计
2.1 硬件设计
硬件电路信号处理与控制部分采用TI公司的基于ARM7的音频处理器BRF6150。由于蓝牙基带链路控制器模块由integrated RF+Filter+Baseband+SRAM组成,BRF6150处理器就是在一个单芯片收发器上加入一个集成RF、数字信号处理、通信处理和运算及控制处理功能的ARM7微处理器,,片外可扩展Flash Memory,以实现需要技术和高度最佳化的音频处理。BRF6150 芯片可提供极低的工作模式功耗。该芯片在进行语音链接时仅需 12mA的电流。BRF6150 的关机模式通过将芯片不工作时的电源降低至 6uA而进一步降低功耗。此外,该芯片可直接与任何类型的现有电池相连,因此免去了采用外部稳压器的麻烦,从而减少了移动设备制造商进一步集成的工作。
音频处理方面,采用TI公司的TLV320AIC23B音频芯片。TLV320AIC23B 是一颗专为便携式产品所设计的单芯片立体声音频编解码器 (codec),它可以提供立即可用的先进音频功能。 这颗音频编解码器能够快速地将麦克风及无线耳机功能加到PDA 产品中,它一款高性能低功耗的立体声音频Codec芯片,内置耳机输出放大器,支持MIC和LINE IN两种输入方式,输入/输出都具有可编程增益调节。内部集成了模数转换(ADC)和数模转换(DAC)电路,输出信噪比可分别达到90dB和100dB,可在8K~96K的频率范围内提供16/20/24/32位的采样。 音质较为纯正,保真度高,高音响亮,低音实净。
蓝牙耳机的电路原理框图见图2。
2.2 I2S总线
本设计在硬件电路上使用了基于I2S总线的音频系统体系结构,I2S(Inter-IC Sound bus)又称IIS,它是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对I2S的支持。
I2S总线只处理声音数据,其他信号(如控制信号)必须单独传输。为了使芯片的引出管脚尽可能少,I2S只使用了三根串行总线。这三根线分别是:提供分时复用功能的数据线(SD)、字段选择线(声道选择WS)、时钟信号线(SCK)。
此设计中采用电源统一供电,BRF6150作为主设备,TLV320AIC23B作为从设备。BRF6150使用3个通用I/O口来模拟I2S总线。I2S总线读写时序图见图3。
2.3 I2C总线
I2C(Inter Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据端在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。I2S总线读写时序图见图4。
2.4 软件设计
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、支持多种硬件环境、高性能的内核以及友好的用户开发环境,使之在嵌入式实时操作系统领域占据一席之地。
VxWorks操作系统是现在所有独立于处理器实时系统中最具特色的操作系统。VxWorks的微内核Wind是一个具有较高性能的、标准的嵌入式实时操作系统内核,其主要具有特点包括:快速多任务切换、抢占式任务调度、任务间通信手段多样化、任务间切换时间短、中断延迟小等。VxWorks操作系统还包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几个部分,且VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。
在该设计中,软件协议全部下载到蓝牙设备内核处理器的外置Flash中,操作通过人机接口控制。
基于VxWorks的软件编写工作主要包括:BSP包的改动、程序的编写和操作系统的裁减,。由于VxWorks高度灵活性,可以很容易地对这一操作系统进行定制或作适当开发,来满足系统的实际应用需要。BSP包的改动指根据目标硬件实际配置修改系统的配置参数宏(MACRO),主要修改config.h, makefile.h, bspname.h文件。程序编写函数主要包括以下几个:
1)系统引导函数
VxWorks操作系统在一些板级系统初始化后自动执行tUsrRoot()函数,以完成初始化。
tUsrRoot()
{
…… //必要初始化程序
vInitializeLmp(); //LMP初始化完成
vInitializeL2cap(); //L2CAP初始化完成
vInitializeSdp(); //SDP初始化完成
vInitializeRf (); //RFCOMM初始化完成
vInitializeHA(); //HeadsetApplication初始化完成
exit(); //退出
}
2)系统初始化函数(以L2CAP为例)
typedef
{
MSG_ID SdpToL2cap;
MSG_ID L2capToSdp;
MSG_ID RfToL2cap;
MSG_ID L2capToRf;
MSG_ID HAToSdp;
MSG_ID SdpToHA;
MSG_ID HAToRf;
MSG_ID RfToHA;
}MSG_QUEUE_ID //定义消息队列ID结构体类型
MSG_QUEUE_ID MsgQueueId //定义全局消息队列ID结构体,用于存放每个消息队列
的ID
vInitializeL2cap(); //L2CAP初始化,包括初始化全局变量、创建定时器、创建消息队列、创建并启动任务
3)LMP软件设计
基带程序运行在蓝牙芯片的信号处理单元中,而LMP程序运行在蓝牙芯片的微处理器中,他们通过邮箱来交换信息。只要任何一方向邮箱发送了信息,邮箱就会产生中断信号,另外一方可以在中断服务程序中进行信息读取和处理。其处理函数为:
vLmpDealFromBB() //处理来自BaseBand层的消息以建立连接,对来自BaseBand层的操作码决定接受与否,并进行鉴权、加密、处理或断开等操作。
4)L2CAP软件的设计
tL2capDealMsgFromSdp() //处理来自SDP层的消息SdpToL2cap,生成L2CAP数据包,把数据传BaseBand层
tL2capDealMsgFromRf() //处理来自RFCOMM层的消息RfToL2cap,生成L2CAP数据包,把数据传BaseBand层
vL2capDealMsgFromBB() //处理来自BaseBand层的消息,在处理器邮箱中断程序被调用
5)SDP软件的设计
tSdpDealMsgFromL2cap() //处理来自L2CAP的消息L2capToSdp,并上报搜索到的服务的属性
tSdpDealMsgFromHA() //处理来自HeadsetApplication的消息HAToSdp,对上报信息进行应答
6)RFCOMM软件的设计
tRfDealMsgFromHA() //处理来自HeadsetApplication的消息HAToRf,生成RFCOMM数据包,传送给L2CAP
tRfDealMsgFromL2cap() //处理来自L2CAP的消息L2capToRf,对不同的帧进行处理
7)HeadsetApplication软件的设计
tHADealMsgFromSdp() //处理来自SDP的消息SdpToHA,判断是否正常并处理
tHADealMsgFromRf() ///处理来自RFCOMM的消息RfToHA,对AT命令及其应答作出处理
3 语音传输建立过程
蓝牙耳机系统工作时总是蓝牙语音网关(AG)和蓝牙耳机(HS)成对出现的。AG是语音信号的控制器和网关,HS是远程音频输入输出设备。其通信所用到的协议栈及实体见图5。
蓝牙设备连结的建立遵循底层到高层的原则,即搜索蓝牙设备、建立链路、服务搜索、建立信道、建立连接和数据传输。其中SCO链路的建立是在SCL链路建立以后完成的。
音频连接建立的全过程:(以AG主动发起连接请求为例)
1 AG首先发起查询,通过查询AG获得HS的蓝牙地址。
2 AG在应用层的驱动下向查询到的HS发起一个page进程,当接收到HS返回的应答信号,AG与HS之间的ACL链接则已经成功建立。
3 一旦 ACL 链接建立,即可以被用来传送振铃信号。振铃信号的发送是通过AT 命令 RING来完成的。
4 ACL 链接好后,接着建立L2CAP链路。AG首先在信令信道上发送一个链接请求信令L2CAP_req,要求建立信道标号为0x0040的L2CAP,当HS返回链接响应信号,表明0x0040 信道已经建好。然后对此信道进行配置,配置完信道后,就可以利用此CID(信道标识符)为 0x0040 的 L2CAP 信道进行SDP查询。
5 AG 在L2CAP 信道上发送一个SDP查询包,SDP查询包将查询SDP服务器端HS是否具有所需要的服务。若查询成功,在 ACL链路上,AG 再建立一条标号为 0x0041 的L2CAP链路,用来传输 RFCOMM 数据。同时断开用作SDP查询的标号为 0x0040 的L2CAP链路。
6 当CID为 0x0041 的 L2CAP 信道建好之后,首先建立控制信道 DLCI0(DLCI,Data Link Connection Identifier,用来识别客户机和服务器间应用的正在进行的连接),AG 在信道上发送一个SABM帧,即要求建立RFCOMM 层上的Channel 0,如果响应方 HS希望建立链接,返回一个 UA 帧,表明已经建立好了Channel 0这条RFCOMM信道。此信道为控制信道,用来传送携带控制信息和命令的UIM 帧。如果响应方HS不希望建立链接,返回一个 DM 帧。其次建立数据信道,先是对数据传送信道的参数进行协商,协商命令PN参数包括对将要建立的信道Channel 1的优先级,最大帧长等,当双方协商好后建立传输数据的信道Channel 1。
7 通过RFCOMM 信道传输HS 控制层的AT命令;即在RFCOMM数据传送信道 Channel 1上利用UIH帧传送AT+CKPD命令,当接收到对方的响应后,就可以开始建立SCO链接。
8 HCI(主机控制接口)发一个WRITE_VOICE_SETTING 命令,对音频状态进行一些设置,当接收到 AG的建立SCO 链接的请求时,若HS允许,发送一个接收的HCI命令,在命令完成之后,传输音频信号的SCO链路就建立好了,此时就可以进行语音通信。
4 总结
本文给出了蓝牙及蓝牙耳机系统的基本概念及其在软硬件方面的具体实现。蓝牙耳机使用户摆脱线缆的束缚,能够在较大的自由空间内通话。由于采用专用的声音编解码芯片和标准音频取样率44.1KHz,并经过先进的信号处理技术能够使声音效果接近CD音质,这样也使蓝牙耳机真正取代有线耳机成为可能。
鉴于技术的保密性,最后吐血推荐部分源程序,见附件。文中部分图片也在附件中
用户361239 2011-8-1 09:57
用户361239 2011-8-1 09:51
用户172008 2009-4-12 16:11
用户172008 2009-4-12 16:10
用户1534760 2009-3-7 18:31
用户849075 2009-2-8 17:48
用户1365832 2009-1-24 14:58
用户1574576 2009-1-8 23:22
用户1534760 2009-1-8 17:01
用户203963 2008-12-19 09:39