Android系统蓝牙模组调试说明

1.前言

这里主要描述android平台蓝牙模块打不开问题时,如何排查问题

2.概述

目前调试的蓝牙模组都是和wifi功能集成在一起的,即wifi和蓝牙二合一的模组,常见的蓝牙模组有正基的AP6210(目前已经停产)、AP6212、AP6330、AP6335等和realtek的rtl8723bs、rtl8703as等。这些模组在蓝牙功能的硬件上有8个IO引脚需要与主控连接,如图1所示,箭头表示方向,其中比较重要的两个引脚是BT_RST_N和LPO。此外蓝牙模组还有一个总的模组电压(VBAT)。

Android系统蓝牙模组调试说明

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时钟输出的上拉电阻已经焊接上。 Android系统蓝牙模组调试说明

经过以上这些排查,一定可以知道并确保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或者没有这个属性。

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:Android系统蓝牙模组调试说明 https://www.yhzz.com.cn/a/14357.html

上一篇 2023-05-12
下一篇 2023-05-12

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。