Android系统蓝牙模组调试说明

free-jdx 2020-10-15 15:43:43 4663
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或者没有这个属性。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 13 6 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区