高通CSR QCC300x和RDA 5856软件音频流走向和系统架构

前几天有朋友问, CSR和RDA软件, 假设在上层用一个while(1), 会不会死掉; 另外, A2DP音频流数据是如何到DSP的. 还有CSR和RDA CPU架构是如何? 这些都是不错的问题, 因为这对于study现已成熟产品的系统架构有帮助.

1. 上层使用while(1)会不会死掉.

分为两方面来讨论, 一方面是CSR, 另一方面是RDA, GO!
方法: 当音乐开始播放后, 进入while(1).

1.1 CSR

以ADK2.5.1为例, 在以下函数最后添加一行:

void handleA2DPStartStreaming(uint16 DeviceId, uint16 StreamId, a2dp_status_code status)
{
   
   
...
   while(1);
 }

实验结果: 蓝牙不会断开连接, 但声音不出来, 串口发AT指令无作用.
之前以为会死掉,并断开连接, 但实际上只是死掉, 不会断开连接.
分析: CSR上层的代码全部在void app_handler(Task task, MessageId id, Message message);
上层代码死在while(1)中, 底层系统可能在等app_handler回调完成. 但是Controller可能是独立运行的, 故和手机的交互还在, 所以没有表现出断开连接.

1.2 RDA

void app_a2dp_msg_handle(COS_EVENT *ev)
{
   
   
		case RDABT_A2DP_SEND_SEP_START_IND_MSG:
		{
   
   
            		stateManagerEnterA2dpStreamingState();
                    while(1);
		}
		break;
		case RDABT_A2DP_SEND_SEP_PAUSE_IND_MSG:
        ....

}

结果: 串口程序不响应, 无声音, 没有断开连接, 但是大约1分钟后, 程序重启了. 自然, 蓝牙连接也断开重连了.
分析: 软件task(任务)实现架构和A2DP/串口数据流向如下:
BAL_TaskInit生成了许多子任务, 主要如下图所示:
串口中断服务是独立的.

MOD_APP
QCC3031是一款入门级可程式设计蓝牙音讯SoC,专为优化的蓝牙音箱而设计。基于极低功耗架构,支援高通aptX:trade_mark:aptX HD音讯、并可开启TWS功能将左右声道输出到两个QCC3031蓝牙音箱再配合高通独有可控制开启外部2.4 GHz TRANSMIT/RECEIVE射频芯片将输出功率加大、支援最高到1.8A的充电电流设计,更可以让音乐享受不受间断距离的打扰。 QCC3031采用QFN封装,旨在为客户提供有助于缩短开发时间成本的解决方案。除了高品质的Analogue Audio 输出界面之外,另可程式化的Digital audio 丰富音源输出,输入方面除了无线蓝牙之外,有线输入支援USB音源拨放,还可以设定成wire in的方式让你聆听音乐的方式不再受到限制。 现在将透过硬体设计的规范、测试软体的设定来帮助你如何快速设计高通QCC3031 Class 1 TWS蓝牙音箱。 硬体设计 在硬体线路设计方面,除了QCC3031基本线路之外,我们另外考虑外部线路,此次设计不用QCC3031原来的Analogue Audio 输出界面,而是另外设计Digital I2S界面,并留出控制外部2.4 GHz TRANSMIT/RECEIVE射频芯片开启脚位来达到无线输出大功率的设计。三个按键足以应付一般开关机,配对,大小声等基本功能,当然还可以触发TWS功能,开启、切换EQ等进阶功能应用。三个LED的设计也可以让你在使用蓝牙音箱时能时时刻刻知道现在蓝牙音箱的状态。 电路布局方面,QCC3031外包装为QFN80 pins设计,周边零件都可围绕QCC3031来做摆放,不需双面元件摆放来设计。 除了RFCrystal下方不能有任何连接线经过之外,在传输线的四周带通滤波器下方也尽量钻孔连接下方的大地层。 此外还需特别注意1.8V 1.1V SMPS buck 线路,保持SMPS周边零件靠QCC3031 摆放除了可以避免PCB板的杂散电感而造成的电压杂讯,并可以限制EMI的产生。 当然其馀的滤波稳压电容也是靠近QCC3031脚位摆放。 软体设定 在软体方面,高通除了Mutlicore Development Environment(MDE)开发环境之外,还有ADK Configuration tool 可以用来做按键触发I2S,TWS功能设定、LED显示、音源输出设定,然后再搭配QCAT来调整cVcMusic EQ效果。 关于I2S输出设定,首先要在Project 内 Enable wire 的功能Properties/Project : ENABLE_WIRED 然后在fw_cfg_filesystem\common\subsys3_config1.htf 设定I2S的脚位。 # Select PIOs for I2S interface 0 and 1: SCK, WS, MCLK, SD_OUT, SD_IN. PcmPioConfig = [ 10 11 ff 12 13 ] Build AllDeploy All之后还要再进入ADK Configuration tool去做Channel Allocation的设定。这边须注意如果要看到I2S的选项一定要在前一步骤Enable-Wired之后才会出现。 我们在ADK Configuration tool 工具内Configuration Set > Audio > Output > Channel Allocation底下将Endpoint Hardware Type改成 I2S。 如果要开启TWS音箱的功能,也要在Properties/Project : enable_peer_device 选择ENABLE_PEER_TWS_PEER_AVRCP。 启动ADK configuration tool 关闭ShareMe的设定,Configuration Set > Peer Device Support > ShareMe 在Configuration Set > Peer Device Support > True Wireless Stereo设定TWSAudio Source的来源。 以上完成软体的所有设定之后Write Device 接着就可以Disconnect form Device。 当HSP/HFP或A2DP 连接完成后,就可以看到I2S的输出,再搭配Stereo I2S Audio Amplifier即可以推动大瓦数的喇叭。 QCC3031本身提供aptX Classic + aptX-HD Decoders高音质较少损耗的无线音乐品质,除了喇叭单体音箱结构设计来调整音质之外,另外可借由QACT(Qualcomm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值