CSR8670的TWS模式的应用笔记
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–
1. 应用场景
1.1 非TWS会话
单个音箱最多可以连两个A2DP源。
- 当音箱A同时与两个A2DP源建立了连接,另一个音箱B不能与其建立TWS会话
- 同一时间一个音箱只能选择2个A2DP源中的一个来播放
1.2 TWS会话
1.2.1 准备工作
单个音箱最多可以连接1个A2DP源,1组TWS会话最多连接2个A2DP源。
在进入TWS会话之前,两个A2DP源必须分别与两个音箱完成配对,否则一旦开始建立TWS会话,A2DP源无法搜索到两个音箱,也就无法配对。
1.2.2 建立会话
两个音箱与两个A2DP源完成配对后,开始建立TWS会话:
音箱A调用EventUsrPeerSessionInquire,进入inquiry模式
音箱B调用EventUsrPeerSessionConnDisc,进入conndisc模式
音箱A搜索到音箱B,根据如下设定建立TWS连接:
链接丢失后自动回连。建议slave使能此选项,防止master出现音频抖动
使用受限呼叫访问码
连接设备过滤方式。如果音箱B的UUID能通过音箱A设定的滤波器规则,那么音箱A与音箱B开始建立TWS连接。此处的滤波器规则有设备ID和CSR对等设备服务UUID,后者是由客户定义的非零值。
配对模式
是否支持作为音频中继者和音频被中继者
音频中继模式:双立体声、主左从右、主右从左、缩混
音量削减。TWS的音量由系统音量和削减音量控制。系统音量由AVRCP指令设定,削减音量的默认值存储在PSR配置中。master会将配置发送给slave,模式切换时master会再发送给slave
单设备模式。此模式使能后,A2DP源的AVRCP指令可以在master,slave和A2DP源之间保持同步,否则slave接收的AVRCP指令不能中继到master
1.2.3 播放音频
TWS会话建立成功后,连接两个A2DP源中的一个并播放音频文件。假设A2DP源1正在播放,那么与A2DP源1配对的音箱作为TWS会话的master,另一个音箱作为slave。A2DP1的音频数据会从master中继到slave。
假设此时播放A2DP源2,则与源2配对的音箱作为TWS会话的master,另一个音箱自动切换成slave
A2DP源可以是其它蓝牙设备,也可以是本地的音频接口。
蓝牙设备必须支持A2DP,AVRCP协议。可支持的蓝牙设备的音频编码方式有SBC,MP3,AAC,aptX。
本地音频接口包括USB接口和analog接口(ADC/SPDIF/I2S)。本地音频接口将音频数据缓存在内部RAM中,使用SBC编码后,通过master与slave之间建立的连接传送给slave。
slave接收后用SBC解码,将解码后的音频数据通过DAC转换成音频信号,或是用I2S接口输出给外部音频芯片。
1.2.4 设置命令
TWS模式支持AVRCP 1.4中定义的命令,包括快进快退,播放暂停等。
TWS模式也支持特有的AVRCP命令如下:
TWS模式支持的GAIA命令如下,且这些指令在TWS会话的两个设备之间同步(音量控制和设备音量削减控制不能同步):
TWS模式的音量控制分两部分:
系统音量:可以通过AVRCP命令设定,如果需要同步到A2DP源,需支持AVRCP的绝对音量控制(absolute volume control)
音量削减:可以由master通过如下用户事件调用
1.2.5 切换音频源
TWS模式建立时的默认音频源由PSR决定。可选项有auto,A2DP,USB,analog。
选择auto选项后,TWS连接建立时选择当前可用的音频源,优先级为A2DP>USB>analog。
运行时可调用下列事件以手动切换音频源:
可调用EventUsrSelectAudioSourceNone再切换回自动切换模式。
1.2.6 结束TWS会话
调用EventUsrPeerSessionEnd以结束TWS会话。
调用EventUsrEstablishPeerConnection以请求重新连接已配对完成的TWS会话。
#2. 建立VM应用
##2.1 修改VM应用工程properties
2.2 使能对等设备支持
设定对等设备支持“true wireless”
使能MP3,AAC和aptX A2DP编解码
- 安装对应的ADK编解码包
- 将对应的解码器工程包含在工作站内
- 申请解码算法的授权
- 修改speaker.mak,将kap文件加入到工程的映像文件夹
使能扩展编解码extra codec
使能USB / 有线音频
sbc_decoder的配置文件选择TWS_WIRED_MODE
2.3 使能调试信息
- 修改sink_debug.h
- 使能DEBUG_PRINT_ENABLE
- 使能DEBUG_PEER
- 使能DEBUG_PEER_SM
- 添加库文件
- 打开库文件目录C:\ADK4.0.0\tools\lib\BlueLab-7.0.1-Release\assisted
- 找到libcsr_a2dp_decoder_common_plugin_stereo_tws_debug.a
- xIDE->project->properties->libraries,添加csr_a2dp_decoder_common_plugin_stereo_tws_debug
3 扩展应用——analog模式的I2S接口
在CSR的官方demo中,当TWS模式的音频源是analog时,程序中设定的硬件接口是ADC。而本项目中需要用到I2S接口作为音频输入。修改步骤如下:
第一步:将CSR8670的I2S设为master,采样率设为48KHz。
第二步:按下暂停键后,I2S时钟会消失。修改sink_audio_routing.c的代码如下:
第三步:修改csr_a2dp_decoder_common_plugin.c的函数MusicConnectAudio如下:
第四步:重新编译库文件。开始菜单->adk4.0.0->rebuild->vm libraries
第五步:修改sink_wired.c
1: 修改宏定义,用程序来控制ADC设备的接入检测的结果
2: 新建函数wiredAudioSetAnalogConnect(uint8 status)
第六步: 只有inquriy的设备才会enable analog connect,当收到发送inquiry事件的请求时,使能模拟连接;当收到发送conndisc事件的请求时,关闭模拟连接。
第七步:如果A2DP源发生切换,master和slave的规则也会发生转换,因此需修改sink_a2dp.c的sinkA2dpSetLinkRole
4 总结
TWS模式的特点是帧与帧之间有同步时间戳,两个音箱之间的音频数据延迟只有±5Sample。
在使用过程中遇到过长时间不能进入TWS会话的情况,还需继续深入探寻原因。
CSR8670的TWS模式的应用笔记相关推荐
- CSR867x — TWS模式的应用笔记【转载】
文章出处:RyomaWang(转载文章,已通过作者授权) 1. 应用场景 1.1 非TWS会话 单个音箱最多可以连两个A2DP源. 当音箱A同时与两个A2DP源建立了连接,另一个音箱B不能与其建立TW ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 《x86汇编语言:从实模式到保护模式》读书笔记之后记
本来打算把整本书的读书笔记写完,可是由于有其他的计划(就叫做"B计划"吧)且优先级更高,所以我的读书笔记搁浅了.为了全力以赴执行B计划,我的博客要荒芜一段时间(我希望不要永远荒芜下 ...
- 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
处理器在实施任务切换时的操作--<x86汇编语言:从实模式到保护模式>读书笔记39 处理器可以通过以下四种方法实施任务切换: 1. call指令或者jmp指令的操作数是GDT内的某个TSS ...
- 任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38
任务切换--<x86汇编语言:从实模式到保护模式>读书笔记38 本文及后面的几篇博文是原书第15章的学习笔记. 本章依然使用第13章的主引导程序. 1. 协同式多任务与抢占式多任务 有两种 ...
- 任务切换的方法——《x86汇编语言:从实模式到保护模式》读书笔记37
任务切换的方法--<x86汇编语言:从实模式到保护模式>读书笔记37 1. 中断门和陷阱门 在实模式下,内存最低端的1M是中断向量表,保存着256个中断处理过程的段地址和偏移.当中断发生时 ...
- 任务和特权级保护(五)——《x86汇编语言:从实模式到保护模式》读书笔记36
任务和特权级保护(五)--<x86汇编语言:从实模式到保护模式>读书笔记36 修改后的代码,有需要的朋友可以去下载(c14_new文件夹).下载地址是: GitHub: https://g ...
- 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
任务和特权级保护(四)--<x86汇编语言:从实模式到保护模式>读书笔记35 7. 正式进入用户程序的局部空间 67 mov ebx,message_1 68 call far [fs:P ...
- 任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34
任务和特权级保护(三)--<x86汇编语言:从实模式到保护模式>读书笔记34 5.2.7 在GDT中创建LDT描述符 处理器要求在GDT中安装每个LDT的描述符.当要使用这些LDT时,可以 ...
最新文章
- Android开发万能Utils(工具大全)
- linux 7autofs配置,基于CentOS7.x 使用Autofs_配置自动挂载NFS服务
- 牛客 - Animal Protection(单调栈)
- 【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得
- Robolectric 探索之路
- Bitset的一些总结
- perl发送天气预报
- ArcGIS 安装出现Mircrosoft .NET Framework 3.5 sp1问题的解决方案
- JS常见的逻辑题目操作(常见面试逻辑题)
- linux电子表格工具,Linux系统办公一条龙之电子表格Calc
- html毛玻璃背景代码,css毛玻璃背景的制作
- python二项分布产生随机数_python随机生成 - osc_c10h48oh的个人空间 - OSCHINA - 中文开源技术交流社区...
- matlab去除摩尔纹,索尼ILCE-7RM2测评——理论画质篇
- 寒武纪MLU270 平台 CNStream 学习记录
- XCTF MISC 高手区 2017_Dating_in_Singapore
- 小米将推出新款自研芯片
- java.lang.NullPointerException: null无堆栈信息
- Matlab通过整除判断倍数
- 自由空气间隙,爬电距离计算~~最便宜的ESD防护方法
- Flex入门学习教程
热门文章
- 用RTF格式解决DrawText函数或Graphics.DrawString方法不能设置行距的问题
- 计算机应用当兵分配到哪,小编告诉你参军后的去向是如何确定的
- cesium 入门开发系列矢量瓦片加载展示(附源码下载)
- php访问数据库遇到乱码问题
- 最新M1专用LRC更新Adobe Lightroom CC 2021中文直装版,已解决M1安装不上闪退等问题!
- 死亡计算机官网在线,死亡计算器
- cygwin 查找ip地址_NBtscan扫描整个局域网IP及MAC地址
- 1.1 计算机硬件基础知识
- 金融、房贷、五险一金小程序
- 基于HTML5+CSS+JS的响应式圣诞老人过悬崖小游戏