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

Posted NiceBT

tags:

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

为了方便大家学习,现与我爱蓝牙网联合推出【QCC300x/CSR867x/QCC30xx/QCC51xx开发板】

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠独家学习资料)
——————————正文分割线———————————–

1. 引言

蓝牙音乐收发器是一种包含了蓝牙发射器和蓝牙接收器两种工作状态的蓝牙设备,这两种状态可以通过按键或其他方式比较方便地切换,是一种性价比很高的产品形态。

目前市面上主流方案是高通的CSR8675,其支持aptx/aptx-ll/aptxhd/aac等多种编解码格式。CSR8675的ADK提供了source(蓝牙发射器)和sink(蓝牙接收器)这两个例程,如果能将两个例程整合起来,即是一个蓝牙收发器的产品。

客户的需求要更进一步,蓝牙收发器需要支持串口控制,支持USB DFU升级等。

2. 主要功能

功能描述
蓝牙发射AUX 2CH ⇒ BT(SBC/AptX/aptxHD)
与最近的蓝牙设备配对
蓝牙接收BT(SBC/AAC/Aptx/AptxHD) ⇒ I2S 48K/24bit/2CH ⇒ I2S to AUX ES9023
串口控制发射接收模式切换
进入配对/退出配对
获取连接状态
音量控制
上下曲/播放暂停
修改设备名称
当前播放歌曲时长/歌曲名称/播放状态
固件升级USB DFU升级

系统框图如下:

3. 项目难点

需要将source例程的代码文件添加到sink例程,然后屏蔽掉与AGHFP相关的代码,添加aghfp库到sink的工程属性,解决掉aghfp和hfp库的冲突。

编译完成后还需要注意,当编译结果显示stack size > 160时,有很大概率程序时不能运行的。此时需要查看map文件找到占用stack过多的函数。下图可以看出app_msg_hander占用了40的stack,显然是不正常的,就需要单独优化。

在完成上述工作后,需要将source和sink的初始化代码用bootmode模式区分。原本sink的bootmode可以沿用,需要为source创建一个新的Bootmode。每次启动时根据bootmode来选择启用发射还是接收模式。

最后我们如果需要配置source模式的config tool,可以重点看一下ps_read_user函数,通过修改这个函数,可以将配置通过程序来修改。

4. 总结和展望

通过蓝牙收发器的案子,让我加深了对bluestack与VM之间关系的理解。sink和source例程是在bluestack基础上搭建的功能集合,bluestack才是CSR方案的核心,而HCI层是通用的接口,这也解释了为何高通的firmware不开放代码,因为一旦开放这层代码,高通就对方案失去了掌控能力,ADK也就失去了生命力。

很遗憾蓝牙音乐收发器还不能移植到ADK6以上的版本,因为高通没有提供dsp的编码库。从这点也可以看出高通的产品规划是非常到位的,为了尽量拉长每个产品的生命力,使一些特殊功能只在某些平台上能够实现,值得我们在规划产品时充分借鉴。

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

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

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

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

CSR8675的学习笔记:驱动正交编码器

CSR8675的学习笔记:驱动正交编码器

CSR8670项目实战:BlueDongle 蓝牙音频测试dongle