CSR8675项目实战:BlueAg蓝牙一拖二发射器

Posted NiceBT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSR8675项目实战:BlueAg蓝牙一拖二发射器相关的知识,希望对你有一定的参考价值。

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–

1. 引言

最近刚完成一个蓝牙一拖二发射器的项目。这个项目的软件需求来自一款竞品——Bluetooth Multipoint Transmitter - Priva III

2. 主要功能

系统框图如下:

BlueAg是一款中高端的蓝牙发射器。主要规格如下:

序号规格参数
1蓝牙版本BT4.2
2蓝牙profileA2DP,AVRCP,HFP
3支持解码格式SBC,FastStream,aptX,aptX-LL,aptx-HD
4工作距离Class 2,空旷地域30英尺或10米
5一拖二功能能同时给两台耳机提供音乐,数据包交替发给两台耳机,但是APTX-HD、APTX-LL、APTX解码时不能支持两路,此时自动使用Faststream或SBC解码
6USB音频和AUX_in只要有USB音源信号,就发送USB音源信号;没有USB音源信号,有AUX_in信号,则播放AUX_in信号;如两路音源信号都没有,则进入低功耗待机状态
7保存配对信息最多8个

状态指示如下:

序号功能LED指示备注
1开机蓝灯常亮1s开机能回连之前配对过的设备,1MIN回连不上进入搜索状态。如果开机时没有连接过任何设备,直接进入搜索状态
2关机红灯常亮1s设备进入省电模式
3待机未连接红蓝灯交替闪烁搜索时间5分钟,5分钟内没和耳机,音箱或者其他接收器连接上,进入待机状态
4配对成功蓝灯5s闪1次默认SBC解码模式
5非连接待机状态蓝灯2s闪1次
6连接待机状态(SBC)蓝灯5s闪1次
7连接待机状态(FastStream)蓝灯5s闪2次
8连接待机状态(aptX)绿灯5s闪1次
9连接待机状态(aptX-LL)绿灯5s闪2次
10连接待机状态(aptX-HD)绿灯5s闪3次
11清除配对列表蓝灯常亮2s清除配对列表后进入搜索状态
12耳机回连蓝灯5s闪1次断开连接后两分钟内在有效距离内会自动回连,如不回连,则短按MFB(GPIO 0)键连接
13aux-in音乐发射器使用aux-in线连接手机或者其他媒体播放器,可以通过发射器把音频传输到耳机,音箱或者其他接收端。aux-in优先级低于USB
14USB音乐发射器使用USB连接线连接到PC或laptop上,打开发射器和耳机,并配好对;右键点击屏幕右下角的喇叭图标;选择播放设备时将此产品作为默认设备;此时产品将可作为USB无线耳机使用,可听到电脑端播放的音乐,并可作为PC端的即时通讯设备使用(Skype或QQ)
15一拖二1、如果发射器连接过A,B两个设备,A,B设备在正常的范围,开机能直接回连A,B这两个设备。2、如果发射器连接上A或者B设备(只连一个设备),MFB按键进入配对,可搜索连接新的设备,不会断开之前连接上的设备。3、如果发射器连接上A和B两个设备,MFB按键进入配对,断开早期连接的设备A,并进入搜索,可以连接新的设备。

3. 项目难点

3.1. 支持FastStream

FastStream是aptX的上一代音频编码格式,其已经包含在DSP工程sbc_encoder中,VM的代码中也能看到相关代码。修改source config tool的选项即可使能FastStream。

3.2. USB和AUX切源

ADK默认可支持USB或AUX源,如何实现在程序运行过程中的切源呢?在source_app_msg_handler.c的app_msg_handler中添加如下代码:

case APP_ANALOG_AUDIO_ACTIVE:

    APP_MSG_DEBUG(("APP_ANALOG_AUDIO_ACTIVE\\n")); 
    
    theSource->ps_config->usb_config.usb_speaker_interface = 0;
    theSource->ps_config->usb_config.usb_mic_interface = 0;
    theSource->ps_config->features.input_source = A2dpEncoderInputDeviceAnalogue;
    theSource->audio_data.audio_a2dp_connect_params.input_device_type = theSource->ps_config->features.input_source;
    app_usb_audio_active();

return;

case APP_ANALOG_AUDIO_INACTIVE:

    APP_MSG_DEBUG(("APP_ANALOG_AUDIO_INACTIVE\\n")); 

    theSource->ps_config->usb_config.usb_speaker_interface = 1;
    theSource->ps_config->usb_config.usb_mic_interface = 1;
    theSource->ps_config->features.input_source = A2dpEncoderInputDeviceUsb;
    theSource->audio_data.audio_a2dp_connect_params.input_device_type = theSource->ps_config->features.input_source;
    app_usb_audio_active();

return;

当需要切换到analog源时,发送APP_ANALOG_AUDIO_ACTIVE消息;当需要切换到USB源时,发送APP_ANALOG_AUDIO_INACTIVE消息。

4. 总结

此项目已经成功量产。在此项目的基础上,可以继续丰富产品的功能,如增加SPDIF输入源、I2S输入源,或是增加蓝牙接收功能以支持蓝牙收发一体。

以上是关于CSR8675项目实战:BlueAg蓝牙一拖二发射器的主要内容,如果未能解决你的问题,请参考以下文章

CSR8675项目实战:BlueHiFi蓝牙音乐收发器

CSR8675项目实战:BlueBrowsing蓝牙播放器

CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器

CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器

CSR8670项目实战:BlueAgBatC蓝牙发射器&BLE遥控器

CSR8675项目实战:BlueEarphone 左右声道各10个Speaker EQ