RK3399之AP模块蓝牙兼容问题
背景
项目中,换了一个AP的WIFI/BT模块,AP6356S换成了AP6236。按照RK的WIFI/BT模块兼容框架,把新模块加了进去,简单测试,WIFI的station和ap都没问题,蓝牙a2dp播放没问题,但发现SCO通话模式有问题,一点正常的声音都没有,而且每隔一段时间会有一个很明显的噪声。
后面通过和硬件一起排查,发现新模块(AP6236)在SCO通话模式下,I2S的两边都有时钟输出,即CPU和模块都是master模式。
为什么a2dp模式是正常的呢?
AP模块的A2DP模式走的是UART,SCO模式才走I2S接口
解决
找到上述原因之后,解决就好办了。修改CPU和模块的模式。
在未修改之前,CPU是master,模块是slave。以前的老模块是OK没问题,但是新模块(AP6236)就是不行,估计是它的固件不支持做slave。
首先我只修改CPU的模式,由以前的主改成了从。果然,新模块(AP6236)就OK,但是老模块不行,因为模块这边也是配置的从模式。
RK3399这边主要修改DTS配置,修改如下:
bt_sound: bt-sound {
status = "disabled";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "bt-sco-pcm";
//simple-audio-card,mclk-fs = <128>;
simple-audio-card,bitclock-master = <&dailink0_master>;
simple-audio-card,frame-master = <&dailink0_master>;
simple-audio-card,cpu {
sound-dai = <&i2s0>;
};
dailink0_master: simple-audio-card,codec {
sound-dai = <&bt_sco_codec>;
};
};
修改模块这边的模式,两个模块都OK了,兼容OK了。
模块这边主要修改HAL,修改如下:/hardware/broadcom/libbt/src/include/vnd_rk30sdk.txt
:
SCO_PCM_IF_SYNC_MODE = 1 //master/slave 模式,1为Master
上面txt(vnd_rk30sdk.txt
)里的flag最终影响bt_vendor_brcm.h,和AP模块相关,即broadcom芯片相关
/* SCO_I2SPCM_IF_ROLE - 0=Slave, 1=Master */
/* SCO_PCM_IF_SYNC_MODE
NOTICE: in most usage cases the value will be the same as
SCO_PCM_IF_CLOCK_MODE setting
0 : Slave
1 : Master
*/
/* SCO_PCM_IF_CLOCK_MODE
NOTICE: suggested to be consistent with SCO_I2SPCM_IF_ROLE
0 : Slave
1 : Master
*/
/* SCO_PCM_IF_CLOCK_RATE
NOTICE: suggested to be consistent with SCO_I2SPCM_IF_CLOCK_RATE
0 : 128K
1 : 256K
2 : 512K
3 : 1024K
4 : 2048K
*/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论