找回密码
 注册
关于网站域名变更的通知
查看: 441|回复: 1
打印 上一主题 下一主题

蓝牙无线耳机设计及VxWorks移植方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-8-1 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
蓝牙无线耳机设计及VxWorks移植方法
6 e: a+ K2 s$ O( c8 y3 z+ p. R

9 c% T* q6 o7 R6 b' ?4 K1 c9 r5 K- f
   摘要 蓝牙技术广泛应用于局域网络中各类数据及语音设备的无线传输。根据蓝牙耳机的协议栈原理描述蓝牙无线耳机的硬件电路设计和软件设计的实现过程;详细说明其系统内部传输音频数据的I2S总线的接口原理、读写时序和控制函数;按照蓝牙耳机应用规范中各层数据处理要求,给出嵌入式实时操作系统VxWorks在蓝牙芯片ZV4301上的部分程序移植,较后通过协议模型讲述语音网关与蓝牙耳机进行语音传输的具体过程。
; P0 d3 k. i( N, P' n' j" X# J$ g关键词 蓝牙 耳机 I2S总线 VxWorks" b' I* u" [4 m7 f' X+ a+ r; P

  @; c9 V4 D) y& b5 \$ M    蓝牙耳机是一种无线语音传输技术,是基于耳机在无线技术方面的延伸。它是相配于蓝牙技术而进入多媒体个人区域网络的。随着蓝牙技术的日趋完善和蓝牙产品市场占有率逐渐提升,蓝牙耳机在技术上也将不断得到改进,使之成为个人多媒体区域网络的主要配套产品。蓝牙耳机的应用范围除了手机以外,PDA、无绳电话应用、汽车免提工具、电话终端等,也是蓝牙耳机发挥技术优势的应用领域。本文设计的蓝牙耳机支持蓝牙规范1.2版本,传输距离达10 m,传输速率达723.2 kb/s,并且具有低功耗和(几乎)无辐射等技术优点和优势。
/ A# E; R0 H* C1 蓝牙技术& x$ W) g3 m# V+ l2 h3 ?1 e  s
    蓝牙作为一种低成本、短距离的无线连接技术标准,是由Ericsson、IBM、Intel、Nokia和Toshiba五家公司共同倡导的一种全球无线技术标准,是一种无线数据与语音通信的开放性全球规范。它以低成本的短距离无线连接为基础,为固定设备与移动设备通信环境建立一个特别连接。其实质是建立通用的无线空中接口及其控制软件的公开标准,实现设备问的电缆替代。5 Z: v9 C- ?) g. x- D' y

- z# G4 w7 Q' C6 h  I    蓝牙技术规范包括协议和应用规范两个部分。协议定义了各功能元素各自的工作方式,整个蓝牙协议体系结构分为4层,即核心协议层、线缆替代协议层、电话控制协议层和采纳的其他协议层;应用规范则阐述了为了实现一个特定的应用模型,各层协议间的运转协同机制。较典型的应用规范有拨号网络、耳机(headset)、局域网访问和文件传输等。蓝牙耳机的协议栈原理如图1所示。5 I2 p+ C9 Z+ u0 c

& K# ]" ], W0 A# j* N% [4 s; e5 F  s
2 硬件设计
& i0 T+ K7 r. U# [    硬件电路信号处理与控制部分采用Zeevo公司的基于ARM7的音频处理器ZV4301。ZV4301处理器是在一个单芯片收发器上加入一个集成RF、数字信号处理、通信处理和运算及控制处理功能的48 MHz APM7微处理器,片外扩展闪存,以实现需要技术和高度较佳化的音频处理。, r  @+ y0 X' p0 N; i) n$ A

/ t2 m3 B! h, M" N% o* e' Q    编解码芯片采用飞利浦公司的UDAl380音频芯片。UDAl380是一颗专为便携式产品所设计的单芯片立体声音频编解码器,可以提供立即可用的先进音频功能。这颗音频编解码器具有24位数据路径、多重时钟支持、DC偏移消除、支持多重数据格式以及数字静音检测等集成功能。本设计中,UDAl380利用与微控器接口作音控处理.并利用L3接口来控制音量。
# W' l8 U  g% q  L- m- O5 e3 I2S总线
: a! V" |( k. P3 @3 J    本设计在硬件电路上使用基于I2S总线的音频系统体系结构。I2S(Inter-IC Sound bus)是飞利浦公司提出的串行数字音频总线协议。- D& G: H4 H0 E, P0 N8 C

# Z& f6 y$ S' h    I2S总线只处理声音数据,其他信号(如控制信号)必须单独传输。为了使芯片的引脚尽可能少,I2S只使用了三根串行总线。这三根线分别是:提供分时复用功能的数据线(SD)、字段选择线(声道选择WS)、时钟信号线(SCK)。
  d$ I0 q) R4 D  i  x  i/ D* [+ a2 e  n" [3 l+ H  R7 R
    此设计中采用电源统一供电,ZV4301作为主设备,UDAl380作为从设备。ZV4301使用3个通用I/O口来模拟I2S总线。其读写I2S总线的数据主要包括以下几个函数;
, B9 m$ d( y, R4 f" V- C    word_selection();   //字选择函数% N; s9 Y2 q7 H* |: I4 b/ w; u
    serial_clock();     //时钟信号函数- e) G, d5 y; x, U6 y. `
    serial_data();     // 串行数据函数/ X1 K4 ~& S# @; B. x2 {
    shift_register();   //寄存器移位函数9 B' H  Y. P; H( |4 u  E8 b; i

6 x) B' _" t& H4 软件设计8 a3 Y2 r7 z0 |. T6 |8 [
    VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统。良好的持续发展能力、支持多种硬件环境、高性能的内核以及友好的用户开发环境,使之成为所有独立于处理器实时系统中较具特色的操作系统。( e8 n' V  l! t8 J' m

9 X, z1 Q3 I; j# T1 Q" G# N    在该设计中,软件协议全部下载到蓝牙设备内核处理器的外置闪存中,操作通过人机接口控制。基于VxWorks的软件编写工作主要包括:BSP包的改动、程序的编写和操作系统的裁减。由于VxWorks的高度灵活性,可以很容易地对这一操作系统进行定制或作适当开发,来满足系统的实际应用需要。BSP包的改动指根据目标硬件实际配置修改系统的配置参数宏(MAC-RO),主要修改config.h、makefile.h、bspname.h文件。
/ y) }5 P7 @& c( _5 b) i
5 ^/ `( ]8 }  x7 b6 i& b" c    程序编写函数主要包括以下7个。! N, _4 q8 o( O3 g7 s) U: |
(1)系统引导函数
8 Z9 K6 G" J$ f' \& Y, O    VxWorks操作系统在一些板级系统初始化后自动执行tUsrRoot()函数,以完成初始化。( d$ y3 N% F" X" M
tUsrRoot()
8 R0 z6 D* x# p. \& p( X8 \% L……                      //必要初始化程序
3 F. s. a: }% F    vInitializeLmp();    //LMP初始化完成
8 Z3 ?/ b; n5 c! G    vInitializeL2cap();  //L2CAP初始化完成
2 T& s/ ]9 d. S/ x/ M4 A    vInitializESDp();    //SDP初始化完成: k6 U  U2 }4 o- p3 I& u
    vInitializeRf();     //RFCOMM初始化完成9 v0 Y8 Q3 Z, }, l5 a" {' C: D4 `
    vInitializeHA();     //HeadsetApplication初始化完成
" N8 |2 B/ x) h" c3 |    exit();              //退出1 Z# b0 k- H( A8 Q
+ E0 a5 V8 X# \8 g
(2)系统初始化函数(以L2CAP为例)
5 X) k7 z' J* A: a- z+ A    typedet" z, d4 Q2 I+ f0 \# F$ [* x2 v8 i
    {MSG_IDSdpToL2cap;+ g: j7 U6 L9 s4 ]' d4 w( a
    MSG_ID L2capToSdp;% p% |6 C$ [/ B* d
    MSG_ID RfToL2cap;" G+ |9 T# V* g, C9 s3 K
    MSG_ID L2capToRf;
2 Z8 d- p6 N/ ]: D    MSG_lD HAToSdp;
5 _1 j2 w$ l1 K- m& z) {8 x( Z! ]# k    MSG_ID SdpToHA;" x/ [$ N( s7 e+ T
    MSG_ID HAToRf;- D7 z5 {6 F0 r" ~3 U, [2 g( Y
    MSG_ID RfToHA;2 d" j1 E; A. H5 N; B9 P0 d3 ]. H
    }MSG_QUEUE_ID//定义消息队列1D结构体类型- L* \3 q8 x% M# R$ B* Z+ t
    MSG_QUEUE_ID MsgQueueld;    //定义全局消息队列ID结构体,用于存放每个消息队列的ID
& m6 E% n* g! \1 M. i7 |: z; d    vInitlalizeL2caD();//L2CAP初始化,包括初始化全局变量、创建定时器、创建消息
) t  Q0 c/ G( F) Z                        //队列、创建并启动任务
, O5 a& v4 w1 O( ?
: v9 j0 g; t$ j5 }4 L1 C(3)LMP软件设计2 |0 u: P8 n" Y) Z0 f2 n1 s4 S/ Z
    基带程序运行在蓝牙芯片的信号处理单元中,而LMP程序运行在蓝牙芯片的微处理器中,它们通过邮箱来交换信息。只要任何一方向邮箱发送了信息,邮箱就会产生中断信号,另外一方可以在中断服务程序中进行信息读取和处理。其处理函数为;, N" j& W5 h  ?" M' g3 Y6 C
    vLmpDealFromBB()
9 G4 X) l# e; A9 C; i3 w7 W    //处理来自BaseBand层的消息以建立连接,对来自BaseBand层
* U* \3 `# W. I: f    //的操作码决定接受与否,并进行鉴权、加密、处理或断开等操作9 S- g" V7 l9 O- O9 V
; q9 b: B) t9 P1 a# A$ T
(4)L2CAP软件的设计
. C* c0 s) W* E6 I  Z. M1 k    tL2capDealMsgFromSdp()
6 t$ c) `2 n  k0 `' K& ^1 M    //处理来自SDP层的消息SdpToL2eap,生成L2CAP数据包,把数据传BaseBand层
- {) L0 a" c3 \. i: Q    tL2capDealMsgFromRf()& H! a' f; D" O8 d
    //处理来自RFCOMM层的消息RfToL2cap,生成L2CAP数据包,把数据传BaseBand层
% t2 F# t4 ]/ t    vL2capDealMsgFromBB()& Y9 M& C" y/ \- ]+ I+ z: O
    //处理来自BaseBand层的消息,在处理器邮箱中断程序被调用
4 m9 {1 N  r. w2 L
5 l8 S# w. N6 W& P; Q5 l+ k9 O' W! {(5)SDP软件的设计$ R3 c1 r* b' f- _5 a' Z! ~5 {
    tSdpDealMsgFromL2cap()! w, `' V2 U1 Q; X" Z! W
    //处理来自L2CAP的消息L2capToSdp,并上报搜索到的服务的属性* ^) _2 a, A6 F) E' R$ h
    tSdpDealMsgFromHA()" C# y/ K. E6 O3 L4 o- P
    //处理来自HeadsetApplieation的消息HAToSdp,对上报信息进行应答. v& ~( H- L/ {: W

/ ^7 o, ?" e5 T8 ~8 G(6)RFOOMM软件的设计
. w/ g+ i7 Y7 t6 a( i1 L    tRfDealMsgFromHA()% u' K: x$ ?1 _
    //处理来自HeadsetApplication的消息HAToRf,生成RFCOMM数据包,传送给L2CAP9 @% b2 ?. I5 E/ u, v2 N5 L
    tRfDealMsgFromL2cap()
  g5 b- x4 U6 M$ M" K8 c2 _    //处理来自L2CAP的消息L2capToRf,对不同的帧进行处理2 r' S( C9 m* l2 s( D/ V

+ p+ ^0 [9 s- M(7)HeadsetApplication软件的设计$ U8 V4 v' l) ~, a! E; J
    tHADealMsgFronaSdp()
- T$ {7 J- T$ i8 v$ W$ K4 Y# f    //处理来自SDP的消息SdpToHA,判断是否正常并处理& a& n1 M- ^# }4 ]  K+ V  s
    tHADeaIMsgFromRf()
' R6 `$ v% N1 ]- f    //处理来自RFCMM的消息RfToHA,对AT命令及其应答作出处理
. J9 P+ C) W- I- K1 |5 语音传输建立过程
& h0 a! x; F+ F6 A3 z& `' K: o    蓝牙耳机系统工作时总是蓝牙语音网关(AG)和蓝牙耳机(HS)成对出现的。其通信所用到的协议栈及实体如图4所示。
6 u- M- H# ^, Z0 `* Z( J1 M2 O, Q6 q' z1 s: w5 t9 n! \9 m2 [
    蓝牙设备连结的建立遵循底层到高层的原则,即搜索蓝牙设备、建立链路、服务搜索、建立信道、建立连接和数据传输。
% l; ~. Q9 p. b/ G& F. j
. B. x5 J+ ?' d! G. ^    以下是音频连接建立的全过程。(以AG主动发起连接请求为例。)
1 {" k: h+ w, p5 Q# H$ @    ①AG首先发起查询,通过查询AG获得HS的蓝牙地址。
- g3 a$ p! |6 J# y) p    ②AG在应用层的驱动下向查询到的HS发起一个page进程。当接收到HS返回的应答信号时,AG与HS之间的ACL链接已经成功建立。
5 T5 w$ ^2 T" D" U    ③一旦ACL链接建立,即可以被用来传送振铃信号。振铃信号的发送是通过AT命令RING来完成的。
5 U" L7 [7 o9 U$ K" C- u    ④ACL链接好后,接着建立L2CAP链路。AG首先在信令信道上发送一个链接请求信令L2CAP_req,要求建立信道标号为0x0040的L2CAP。当HS返回链接响应信号时,表明0x0040信道已经建立好。然后对此信道进行配置,配置完信道后,就可以利用此CID(信道标识符)为0x0040的L2CAP信道进行SDP查询。
! ?; Z& ?9 ?  Y3 z$ V    ⑤AG在L2CAP信道上发送一个SDP查询包。SDP查询包将查询SDP服务器端HS是否具有所需要的服务。若查询成功,在ACL链路上,AG再建立一条标号为0x0041的l.2CAP链路,用来传输RFCOMM数据;同时,断开用作SDP查询的标号为0x0040的L2CAP链路。
  o0 Y; x4 v  ~  R5 K2 [    ⑥当CID为0x004l的L2CAP信道建立好之后,首先建立控制信道DICIO,AG在信道上发送一个SABM帧,即要求建立RFCOMM层上的Channel O。如果响应方HS希望建立链接,返回一个VA帧,表明已经建立好了Channel 0这条RFCOMM信道。此信道为控制信道,用来传送携带控制信息和命令的UIM帧。如果响应方HS不希望建立链接,返回一个DM帧。其次建立数据信道,先是对数据传送信道的参数进行协商,协商命令PN参数包括对将要建立的信道Channel 1的优先级,较大帧长等,当双方协商好后建立传输数据的信道Channell。5 p% T' x4 r& [) X8 P2 P% l0 q
    ⑦通过RFooMM信道传输HS控制层的AT命令,即在RFCOMM数据传送信道Channe1上利用UIH帧传送AT+CKPD命令。当接收到对方的响应后,就可以开始建立SCO链接。
; f' O9 o( A% C7 R! T" U; o    ⑧HCI(主机控制接口)发一个WRITE_VOICE_SETTING命令,对音频状态进行一些设置。当接收到AG的建立SC0链接的请求时,若HS允许,发送一个接收的HCI命令,在命令完成之后,传输音频信号的SC0链路就建立好了,此时就可以进行语音通信。
2 M4 ~% N. l6 j& |9 Q% F. O- Q结语
" B4 r/ ?! f1 p7 {    本文给出了蓝牙及蓝牙耳机系统的基本概念及其在软硬件方面的具体实现。蓝牙耳机使用户摆脱线缆的束缚,能够在较大的自由空间内通话。由于采用专用的声音编解码芯片和标准音频取样率44.1 kHz,并经过先进的信号处理技术,能够使声音效果接近CD音质,这样也使蓝牙耳机真正取代有线耳机成为可能。
& u7 O' ]; P* K3 V
" V; w4 M* y6 i

该用户从未签到

2#
发表于 2019-8-1 19:16 | 只看该作者
学习一下,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-20 14:54 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表