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配置,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

1
SCO_PCM_IF_SYNC_MODE = 1 //master/slave 模式,1为Master

Donate comment here