基于蓝牙技术的车载音频流播放器设计

时间:2011-07-16

  摘要:本文设计了一款在车载娱乐系统中使用的蓝牙音频流播放器,采用CAN总线技术进行通信,采用AVRCP实现对音乐的远程控制和信息读取,采用A2DP实现音乐数字音频流的传输,介绍了该播放器的若干设计技术。

  现在的车载信息娱乐系统多种多样,有CD播放器,液晶屏,GPS导航等,有些车型还配置了蓝牙免提装置等设备。随着蓝牙技术在音视频传输中的应用,蓝牙音频流播放功能正逐步在车载信息娱乐系统中得到应用,可以大大增强用户娱乐体验感。蓝牙音频流播放功能是指将蓝牙MP3或蓝牙手机上的音乐通过蓝牙以流媒体的方式传输到远端设备上进行解码后通过远端设备的功放系统播放,同时远端设备还带有远程控制功能,使得用户可以在远端设备上操作音乐,使其暂停、播放、快进快退或进行上下首切换。笔者设计实现了一款基于CAN总线的蓝牙车载音频流播放器,控制命令和播放信息都是通过CAN总线进行传输,控制操作在收音机上实现,液晶屏显示音乐的tagID3、播放时间、音轨、总音轨等信息。从用户的使用角度来说,该蓝牙音频流播放器是和收音机、液晶屏组成一套系统的。

  1 系统结构

  在汽车电子系统中,CAN总线通信技术不仅减少了线束减轻了汽车重量从而提高了效率,更重要的是它实现了汽车电子网络的信息共享和数据传输,利用它可以把某项应用按照功能分拆在不同的组件中实现,这样在实现各个功能子系统时非常灵活,系统中组件的使用更广泛更充分,单个组件可以在多个功能系统中被应用。可以说CAN总线的出现更好地体现了网络复用的特点。蓝牙技术在消费电子领域中的成功运用经验推广到汽车电子领域后,其开发与测试遇到了一定的挑战,

  系统结构如图1所示。车载娱乐系统的CAN网络由音频流播放器、液晶屏和收音机组成,控制命令及状态信息均通过CAN总线传输,其中收音机带有功放,直接驱动汽车喇叭,并统一管理包括FM、CD和音频流播放器的音频输出在内的音源。音频流播放器和蓝牙手机通过蓝牙进行交互,采用A2DP(Advanced Audio Distribution Profile)完成音乐音频流数据及相关格式信息的传输,通过AVRCP(Audio/Video Remote Control Profile)完成对音乐的远程播放控制及播放信息及状态的读取。在A2DP中引入了2个终端名:SRC(Source)和SNK(Sink)。在这里,数字音频流的数据发送端蓝牙手机称为SRC,数字音频流的接收端蓝牙音频流播放器称为SNK。

  2 硬件设计

  蓝牙音频流播放器的硬件设计中,包括CAN通讯、蓝牙子系统和音频系统3个部分,其中蓝牙子系统和音频系统部分采用CSR的蓝牙单芯片Bluecore5-MutiMedia(以下简称BC5)实现。该芯片集成了MCU实现蓝牙协议栈及应用,集成了性能高达64MIPS的DSP实现音乐文件的编解码,集成了CODEC、音频ADC及DAC,实现了音频输入输出功能,图2描述了基于该芯片的硬件设计。

  由图2可见,BC5内部集成了蓝牙射频及基带控制、MCU、DSP和音频CODEC,只需要很少的外围元件便能完成电路设计。

  3 播放控制状态机的设计

  蓝牙音频流的远程播放控制使得用户可以使用车载收音机上控制CD音乐的按键来控制蓝牙手机上的音乐,控制操作包括播放、暂停、上一首、下一首、快进和快退,通过AVRCP(音视频远程控制剖面)命令实现。考虑到用户操作随机性很强及蓝牙手机的音频流支持特性不同的问题,需要设计一个完善的远程播放控制状态机来保证良好的操作体验。

  远程播放控制状态机是个组合式状态机,包括2个小的状态机:(1)状态为蓝牙手机音乐状态,输入为人机接口操作,在人机接口操作的处理中判断当前音乐状态,决定输出的AVRCP命令;(2)状态为人机接口操作或者说“期望状态”,输入为蓝牙手机音乐当前状态的更新,在音乐状态更新的处理中根据期望状态决定输出的AVRCP命令。把人机接口操作称为“期望状态”,把当前音乐状态称为“实际状态”,这两个状态机的原理便是当期望状态和实际状态不一致时,发送可以达到期望状态的AVRCP命令。

  在状态机的实现中,关键跳转条件是CAN帧和蓝牙信号,CAN帧方面主要是标识符的管理,标识符是指当前液晶屏应该显示什么样的页面,提供什么样的显示信息和导航选择,在该页面下收音机和方向盘按键操作对应哪些控制命令,可以实现哪些选择性的操作(选择、退出、向上向下导航、向前向后导航),由USB-BOX和收音机共同管理。而蓝牙信号涉及到不同手机在同一功能上的不同差异,信息组合不完整,次序不固定,这就会带来一定的兼容性问题。 对于快进命令,则是先执行FF_PRESS命令,在快进按键松开时再执行FF_RELEASE命令。 对于播放、暂停、上一首、下一首操作,命令是连续执行的,比如暂停操作便是在AVRCP上连续执行PAUSE_PRESS和PAUSE_RELEASE命令。

  音乐状态(包括期望状态和实际状态)包括播放状态PLAY、暂停状态PAUSE这个两个稳定状态和 快进状态FF和快退状态FB这两个中间状态。对于稳定状态,由于蓝牙手机的播放键和暂停键是一个乒乓按键,即暂停状态下按下会启动播放,播放状态下按下会引起暂停,所以如果实际状态和期望状态一致时便不发送AVRCP命令,而且对于用户在手机上进行操作引起的实际状态和期望状态的不一致,也不发送任何AVRCP命令,否则会造成本该暂停却播放或本该播放却暂停的错误。对于快进快退这种中间状态,首先在快进快退中不需要判断音乐是播放还是暂停,其次因为部分手机在快进快退结束后会先把音乐暂停一下再播放,所以不要在快进快退刚结束时便调用播放控制状态机,需要延迟一段时间处理。

  4 音频流状态处理及信息解析

  流媒体信息包括编解码格式及采样率设置、音乐播放状态、当前播放时间、TagID3信息等。首先蓝牙传输的数据为编码后的音乐文件,SRC端实现编码,SINK端实现解码,所以首先要按照编码格式选择相应的解码器,其次还需要在本地音频输出端设置同样的采样频率。

  播放状态包括播放、暂停、快进、快退4种状态,其中播放和暂停是对播放控制状态机非常关键的状态。对无法把播放和暂停状态发送上来的蓝牙手机,需要设计一种方法来判断当前音乐处于哪种状态。音乐在播放状态时,流媒体音乐数据通过蓝牙从SRC端传输到SNK端,SNK端将该蓝牙数据传输到BC5的DSP中进行解码,所以可以通过判断DSP的解码器缓存中是否有数据来判断当前音乐状态,如果没有数据则音乐处于暂停状态。

  当前播放时间、TagID3信息需要AVRCP V1.3的支持,AVRCP V1.3定义了一种独特格式的TagID3信息,下面以迈克杰克逊的Billie Jean这首音乐为实例分析AVRCP中的TagID3格式,其Tag ID3数据为十六进制形式的“0 0 0 1 0 6a 0 b 42 69 6c 6c 69 65 20 4a 65 61 6e 0 0 0 2 0 6a 0 f 4d 69 63 68 61 65 6c 20 4a 61 63 6b 73 6f 6e 0 0 0 3 0 6a 0 0 0 0 0 4 0 6a 0 1 32”。TagID3包括标题名、演唱者、专辑名称、音轨(第几首)、总音轨(音乐总数)5个属性,每条属性采用“4个字节的属性ID+2个字节的字符集信息+2个字节的属性长度+属性数据”的格式,其中属性ID“0 0 0 1”表示标题名,“0 0 0 2”表示演唱者,“0 0 0 3”表示专辑名称,“0 0 0 4”表示音轨,“0 0 0 5”表示总音轨,常用字符集为avrcp_char_set_ascii=0 3,avrcp_char_set_utf_8=0 6a。按照上述格式,该音乐标题名为长度为11(0 b)的“42 69 6c 6c 69 65 20 4a 65 61 6e”,即Billie Jean,演唱者为长度为15(0 f)的“4d 69 63 68 61 65 6c 20 4a 61 63 6b 73 6f 6e”,即Michael Jachson,没有专辑名称和总音轨(长度为0),音轨为0x32,即第2首歌。

  根据该格式设计属性提取器如下:

  While(m<TagID3_length)

  {

  for (k=0;k<4;k++)

  {   av_streaming[n].attri[k]=TagID3[m];

  m++;

  }

  if((av_streaming[n].attri[0]!=0)‖(av_streaming[n].attri[1]!=0)‖(av_streaming[n].attri[2]!=0)‖(av_streaming[n].attri[3]>5))

  {     errorflag=1;

  }

  if(errorflag==0)

  {                                                       for(k=0;k<2;k++)

  {     av_streaming[n].charset[k]=TagID3[m];

  m++;

  }

  for (k=0;k<2;k++)

  {     av_streaming[n].datalength[k]=TagID3[m];

  m++;

  }

  av_streaming[n].datalen=av_streaming[n].datalength[1]|(av_streaming[n].datalength[0]<<8);

  for (k=0;k<av_streaming[n].datalen;k++)

  {     av_streaming[n].tagid3data[k]=TagID3[m];

  m++;

  }

  av_streaming[n].tagid3data[av_streaming[n].datalen]=‘\0’;

  n++;

  }

  else

  {     errorflag=0;

  }

  }

  经上述代码的解析,属性ID在av_streaming[n].attri中,属性数据在长度为av_streaming[n].datalen的数据av_streaming[n].tagid3data中。

  本文设计一款基于CAN总线及蓝牙技术的汽车电子产品,该产品运行稳定可靠,目前已经成功装车应用,本文分析了其产品开发及测试的原理及特点,并结合具体实例介绍了开发及测试的实现。


  
上一篇:一种机动车综合检测系统的实现
下一篇:有源高压瞬态保护器在汽车电子无源保护器件应用和设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料