Android系统蓝牙模组调试说明
1.前言
这里主要描述android平台蓝牙模块打不开问题时,如何排查问题
2.概述
目前调试的蓝牙模组都是和wifi功能集成在一起的,即wifi和蓝牙二合一的模组,常见的蓝牙模组有正基的AP6210(目前已经停产)、AP6212、AP6330、AP6335等和realtek的rtl8723bs、rtl8703as等。这些模组在蓝牙功能的硬件上有8个IO引脚需要与主控连接,如图1所示,箭头表示方向,其中比较重要的两个引脚是BT_RST_N和LPO。此外蓝牙模组还有一个总的模组电压(VBAT)。
3. 模组调试方法
Android上蓝牙调不通,一般都是蓝牙打不开。看到此现象时,需要从两大方面来定位问题,一个是硬件和配置,第二是从log打印去分析。
(1)硬件和配置定位
a. 检查蓝牙模组电源
使用万用表量蓝牙模组的VBAT引脚,看电压是否为3.3V左右。如果不是,则需要从sys_config配置上来确定所使用的axp路是否正常,务必确保VBAT电源正确再往下进行排查。如果wifi可以打开,那么也可以说明VBAT电源是正确的。
b. check串口连接
主控的UART_TX、UART_RX、UART_CTS和UART_RTS和模组的这几个引脚是交叉连接的
c.check32K时钟
为了节约成本,绝大多数情况下都是使用主控的32k时钟作为蓝牙模组的低功耗时钟,正基的所有模组和realtek的COB模组都需要这个时钟。有两种方法检查,第一是用万用表量蓝牙模组的LPO引脚,看电压是否为1.5V左右,第二是用示波器量LPO引脚的信号是否为32KHz。
主控不输出32k时钟有可能是硬件问题,也有可能是软件问题,下面的方法可以排除软件上的问题,就是看寄存器,串口下执行如下命令:
cd /sys/class/sunxi_dump
echo 0x01F00060 > dump
cat dump
如果输出为0x00000001,则表示32k时钟已经打开,软件上配置没问题。
到了这里,很有可能就是硬件上出问题了,下面进一步定位
主控的32k时钟来源于外部的一个32k晶振,如果32k晶振本身有问题,那么主控肯定也是不能输出32k时钟的,因为需要从源头处排查。32k晶振与主控的连接原理图如图2所示,用示波器量X32KI和X32KO这两处,正常情况下至少有一处为32KHz,如果不是,则说明32k晶振没工作。
如果32k晶振没问题,接下来检查主控32k时钟引脚到模组之间的电路,确保32k时钟输出的上拉电阻已经焊接上。
经过以上这些排查,一定可以知道并确保32k时钟是正常工作。
d. 检查BT_RST_N引脚
在打开蓝牙时,用万用表量这个引脚一段时间,看电平是否会发生变化,正常情况下是会发生变化的。
(2)log打印定位
蓝牙打不开,从log来看,绝大多数情况下都会出现以下这句打印
...preload_wait_timeout (retried:%d/max-retry:%d)...
致这个问题出现一般有以上陈述的问题
if (strcmp(module_info.mod_name, "ap6210") == 0)
{
usleep(100000);
close(vnd_userial.fd);
if ((vnd_userial.fd = open(vnd_userial.port_name, O_RDWR)) == -1)
{
ALOGE("userial vendor open: unable to open %s", vnd_userial.port_name);
return -1;
}
}
else if (strcmp(module_info.mod_name, "ap6335") == 0)
{
usleep(500000);
close(vnd_userial.fd);
if ((vnd_userial.fd = open(vnd_userial.port_name, O_RDWR)) == -1)
{
ALOGE("userial vendor open: unable to open %s", vnd_userial.port_name);
return -1;
}
}
else if (strcmp(module_info.mod_name, "ap6212") == 0)
{
usleep(300000);
close(vnd_userial.fd);
if ((vnd_userial.fd = open(vnd_userial.port_name, O_RDWR)) == -1)
{
ALOGE("userial vendor open: unable to open %s", vnd_userial.port_name);
return -1;
}
}
另外,Android的config.disable_bluetooth属性可以控制是否使用蓝牙,如果这个属性的值为true,那么蓝牙肯定是打不开的。因此需要确保此属性值为false或者没有这个属性。
- 分享
- 举报
-
浏览量:5069次2021-03-29 14:17:09
-
浏览量:4644次2021-03-30 14:17:51
-
浏览量:6315次2021-03-29 11:34:27
-
浏览量:5761次2021-03-30 14:44:45
-
浏览量:6075次2021-03-29 15:00:21
-
浏览量:8358次2021-01-20 17:16:00
-
浏览量:6221次2021-01-15 17:26:20
-
浏览量:2243次2022-07-09 08:47:55
-
浏览量:5489次2020-10-15 16:38:57
-
浏览量:6944次2021-01-22 15:28:47
-
浏览量:1967次2019-07-22 17:37:44
-
浏览量:991次2024-03-15 10:04:21
-
浏览量:5598次2021-04-12 16:15:46
-
浏览量:6692次2020-12-19 15:34:44
-
浏览量:5152次2020-12-19 16:14:06
-
浏览量:2927次2020-11-10 14:23:32
-
浏览量:4923次2021-04-10 14:11:46
-
浏览量:5148次2021-04-10 14:21:38
-
浏览量:1846次2020-07-07 17:53:16
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明