找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

QCC30xx学习笔记:earbuds 2.0例程简介

2020-5-14 19:01| 发布者: csdn| 查看: 4172| 评论: 1|来自: CSDN

摘要: 1. 引言 苹果airpods在蓝牙耳机市场横扫千军,安卓阵营急需一员大将正面迎敌,高通的qcc302x/512x方案横空出世

1. 引言

苹果airpods在蓝牙耳机市场横扫千军,安卓阵营急需一员大将正面迎敌,高通的qcc302x/512x方案横空出世,成为下一代蓝牙SOC霸主的有力竞争者。

在这里插入图片描述

qcc30xx/51xx在硬软件架构上较上一代CSR867x有了明显的提升,主要体现在如下几点:

  • 芯片制程提高到40nm
  • 功耗<6mA
  • 双dsp(qcc512x)+双MCU架构
  • 支持tws和tws+

软件上增加earbuds例程,可以快速开发出充电盒+耳机的产品形态。

2. earbuds与sink主要区别

在开发之前,先对earbuds和sink例程的区别有一个宏观的了解:

3. 跑通例程看得出earbuds例程的开发工具链与sink例程相差很大,配置方式也不够完善,给我们开发带来了一定的挑战。

在安装完工具链,并根据指导手册创建了第一个qcc3020的earbuds工程后,开始了常规的踩坑填坑过程。好在有QQ群里的朋友的帮助,快速完成了earbuds例程的测试,相关源码和固件都会上传到共享组,有需要的朋友可以下载测试。

3.1. 关闭电池温度检测

earbuds例程第一次deploy到硬件平台后,TRB调试器突然找不到设备。原因是硬件平台用USB供电,而非电池供电,也没有接热敏电阻。

修改方法是,将earbuds工程属性的DEFS选项中的HAVE_THERMISTOR和INCLUDE_TEMPERATURE这两个宏disable掉,再重新编译。之后TRB工具的link灯会点亮,可以进入调试模式查看运行log。

3.2. 区分左右耳

earbuds例程用蓝牙地址区分左右耳,需要修改dev_cfg_filesystem工程下的subsys1_config2.htf,然后rebuild此工程,再re-deploy earbud工程。

我的左耳地址是0x00ff01 0x5b 0x0002,右耳是0x00ff02 0x5b 0x0002。对于TWS来说,左耳是主,右耳是从。

修改完蓝牙地址后,将两个硬件平台同时复位,可以从log窗口中看到两个设备会自行建立TWS连接。

3.3. 理解物理状态机

earbuds例程的状态机的示意图如下:

在这里插入图片描述

当左右耳完成TWS配对后,其仍处在IN_CASE状态,即在盒中。此时我们需要通过pydbg调试工具发送状态转移命令,将左右耳都切换到OUT_OF_EAR状态,在这种状态下,左右耳的按键可以工作了,且手机能够搜索到左耳的蓝牙名称;连接手机后,再用pydbg调试工具切换到IN_EAR状态,即进入正常听音状态。

通过pydbg调试工具发送命令的方式有一个局限,即在我们只有一个TRB调试器时,需要反复插拔TRB工具,使用较繁琐。在真实的产品中,状态切换是由传感器(入耳检测和重力加速度)触发的,这里建议可以自定义一个按键来触发,方法很简单。

首先在1_button.buttonxml文件中加入PIO20作为用户自定义按键,并定义按键触发事件:

<pio>
        <pinFriendlyName>USR_BUTTON_1</pinFriendlyName>
        <pad>20</pad>
    </pio>

    <message>
        <messageName>APP_USR_BUTTON_1_PRESS</messageName>
        <buttonEvent>RELEASE</buttonEvent>
        <activePinFriendlyName>USR_BUTTON_1</activePinFriendlyName>
    </message>


然后rebuild,MDE会自动将xml转成代码。此时我们打开av_headset_ui.c,在appUiHandleMessage函数中将按键事件关联到状态机:

case APP_USR_BUTTON_1_PRESS:
        {
            DEBUG_LOG("APP_USR_BUTTON_1_PRESS");
			if (appSmIsInCase())
			{
				appTestPhyStateOutOfCaseEvent();
			}
			else if (appSmIsOutOfCase())
			{
				appTestPhyStateIsInEar();
			}
        }
        break;

这样在我们按下此键后,状态机会发生转变,方便测试验证。

3.5. 使能外接功放

由于我们的平台使用了外接功放,需要将PIO3映射到功放的使能脚才能听到音乐。修改av_headset_config.h文件,使能外放控制脚:

#define appConfigExternalAmpControlRequired()    (TRUE)
#define appConfigExternalAmpControlPio()         (3)
#define appConfigExternalAmpControlEnableMask()  (1 << appConfigExternalAmpControlPio())
#define appConfigExternalAmpControlDisableMask() (0 << 0)

4. 总结

有以下几点直观的感觉:

  • earbuds代码没有sink代码看上去精致美观,不像是欧洲人写的,怀疑是外包给印度人
  • 从整体的代码架构看,写earbuds代码的可能是linux的驱动开发人员,软件思路是否杀鸡用牛刀?
  • 配置方式需要修改代码,开发门槛较高
  • 代码运行速度有显著提高,应该是双核MCU带来的改进
  • kymera DSP还没玩转起来,调音工具也没有用起来

总体的感觉,earbuds不是很成熟,还需要时间打磨,期待下一个ADK大版本能有惊喜给到开发者们。


来源:https://blog.csdn.net/wzz4420381/article/details/99736922
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
2

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)

相关阅读

发表评论

最新评论

引用 Dark_moon 2020-10-1 09:47
楼主辛苦了,感谢分享。

查看全部评论(1)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-20 16:35 , Processed in 0.171643 second(s), 33 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部