首页 > 技术知识 > 正文

1. 前言

这篇主要是解决&分析具体的调试遇到的一些问题

2. 蓝牙打开失败-32k时钟 问题:

蓝牙无法打开。

问题分析:

1、android4.2上蓝牙的调试要看android层的打印信息,内核打印很少,无法帮助定位问题。

2、由android层的打印信息看到在android向蓝牙发完HCI_RESET命令,由于得不到响应而失败返回,蓝牙无响应由之前的调试经验,有两种可能,一是蓝牙模组上电失败,二是uart的四根脚跟主控端不是交叉相连。

3、用万用表做测量,在打开蓝牙时模组是上电的,蓝牙的使能脚也被拉高到1.8V,由原理图确认模组的四根串口线跟主控端是交叉相连的。

4、原理图上看到蓝牙的32K时钟是由主控端的PM07提供,而不是由单独的晶振源提供,用示波器量模组的第24脚LPO是没有时钟波形,需要把的控PM07功能配好,把32K时钟提供出来。

问题解决:

编写代码把PM07配成clk功能并把clk的时钟通道打通, 需要注意的32k时钟还涉及到电压源的, 没电压源即使把PM07配成clk功能和把时钟通道打道也是没有clk输出。

3. 蓝牙打开失败-三极管 问题:

蓝牙无法打开。

问题分析:

1、在蓝牙32k时钟已提供的前提下,蓝牙打开仍然是失败,还是在android向蓝牙发完HCI_RESET命令就得不到响应,模组上电、蓝牙使能、串口连接和蓝牙时钟均ok的情况蓝牙端仍不响应android的reset命令,有些弄不明白了。

2、向ampak请教,了解到ap6476蓝牙有个特性,在蓝牙初始化时,BT_WAKE_HOST是高电平,但由于BT_WAKE_HOST与cpu间接有三极管,所以BT_WAKE_HOST会瞬间被拉低,蓝牙判断BT_WAKE_HOST为低电平就认为数据通道是SPI mode,所以无法响应reset。

问题解决:

按照ampak给出的建议,更换三极管与模组端的电阻, 原来是电阻是4.7K欧姆,改成47K欧姆的电阻即可。

4. 开关蓝牙setting会崩掉 问题:

打开和关闭蓝牙时setting会崩掉

D/BluetoothAdapterService(1089985376)( 9093): getState(): mAdapterProperties: com.android.bluetooth.btservice.AdapterProperties@40f7ed08 W/dalvikvm( 8952): threadid=1: thread exiting with uncaught exception (group=0x40ae6930) D/BtSettings.ProfileConfig( 9093): getProfileSaveSetting: com.android.bluetooth.pan.PanService D/BtSettings.ProfileConfig( 9093): getProfileSaveSetting: com.broadcom.bt.service.gatt.GattService D/BluetoothBondStateMachine( 9093): make E/AndroidRuntime( 8952): FATAL EXCEPTION: main E/AndroidRuntime( 8952): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.adapter.action.STATE_CHANGED flg=0x8000010 (has extras) } in com.android.systemui.statusbar.policy.BluetoothController@40fec2c8 E/AndroidRuntime( 8952): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768) E/AndroidRuntime( 8952): at android.os.Handler.handleCallback(Handler.java:725) E/AndroidRuntime( 8952): at android.os.Handler.dispatchMessage(Handler.java:92) E/AndroidRuntime( 8952): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime( 8952): at android.app.ActivityThread.main(ActivityThread.java:5041) E/AndroidRuntime( 8952): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 8952): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime( 8952): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817) E/AndroidRuntime( 8952): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) E/AndroidRuntime( 8952): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 8952): Caused by: java.lang.NullPointerException E/AndroidRuntime( 8952): at com.android.systemui.statusbar.phone.QuickSettingsModel.onBluetoothStateChange(QuickSettingsModel.java:506) E/AndroidRuntime( 8952): at com.android.systemui.statusbar.phone.QuickSettingsModel.onBluetoothStateChange(QuickSettingsModel.java:485) E/AndroidRuntime( 8952): at com.android.systemui.statusbar.policy.BluetoothController.refreshViews(BluetoothController.java:140) E/AndroidRuntime( 8952): at com.android.systemui.statusbar.policy.BluetoothController.onReceive(BluetoothController.java:94) E/AndroidRuntime( 8952): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758) E/AndroidRuntime( 8952): … 9 more I/BluetoothBondStateMachine( 9093): StableState(): Entering Off State D/HeadsetService( 9093): onStartCommand() D/HeadsetService( 9093): Received start request. Starting profile… D/HeadsetService( 9093): start()
<
问题分析:

由logcat看是quicksettingmode出问题了,a31st平台默认是不支持蓝牙功能,因而在该平台的overlay\frameworks\base\packages\SystemUI\res\values目录下添加config.xml文件, 把QuickSettings中的蓝牙显示给去掉,在这种情况下,若设置中有添加蓝牙开关项,在打开蓝牙时会向系统发送广播, QuickSetting中收到广播但无法响应导致UI报错了, QuickSettingModel.java是与config.xml配合使用的。

解决方法:

把config.xml中的quick_settings_show_bluetooth_setting值设成true或把整个config.xml文件删除掉即可。

5.蓝牙耳机听歌卡顿 问题:

打开wifi的情况下,使用蓝牙耳机听歌很容易出现卡顿。

07-16 20:33:24.610 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.630 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.640 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.790 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.810 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.830 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.850 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.860 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.890 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:24.900 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:26.280 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:26.350 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 07-16 20:33:26.370 W/bt-btif ( 3018): btif_media_aa_prep_2_send congestion buf count 24 问题分析:

卡顿时内核无异常打印,android会提示丢弃数据包,数据包被丢弃掉是由于数据还没及时通过天线发送出去的情况下,下一笔数据已需要发送了,因而数据会被丢掉,导致听歌存在卡顿现象,这问题跟rf有关。

问题解决:

更新broadcom firmware和hcd文件解决。

6.如何把蓝牙波特率调至3M 问题:

如何把蓝牙波特率调至3M?

问题分析:

1、ap6476模组模组支持最高的波特率是4M,蓝牙波特率的指定是在/external/bluetooth/conf/bt_vendo r.conf,通过修改VendorBaudrate的值即可,vendor.conf的内容如下。

# bt_vendor.conf is the 1st priority for bplus to read # The parameter and content should be defined in bt_vendor.conf # libbt_cust.so is the 2nd priority for bplus to read, # The parameter should be defined and the content is blank # EX: FwPatchFilePath= FwPatchFilePath=/system/vendor/modules/ FwPatchFileName=bcm2076b1.hcd UartPort=/dev/ttyS2 VendorBaudrate=3000000 RegonDelay=500 #AP6476 PCM configuration #PCM2Param=xx:xx:xx:00:D0:07:00:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx #There are total 25 configure, the first one is Test_option. 00:d0:07:00, is frequency settings. #Just leave the field that you don’t want to change as “xx”

涉及到hcd文件的路径和名称、所使用的串口设备名称和蓝牙波特率值的设定。

2、蓝牙要支持3M的波特率,前提是主控端串口要能支持3M波特率,需要修改sys_config.fex文件更换串口的时钟树以支持3M的波特率,因为默认串口的时钟源是24M,最大只能支持1.5M波特率,sys_config.fex的修改如下。

@@ -80,11 +80,12 @@ jtag_di = port:PH12<3><default><default><default> [clock] pll3 = 297 pll4 = 300 -pll6 = 600 +pll6 = 480 pll7 = 297 pll8 = 360 pll9 = 297 pll10 = 702 +apb2 = 48 7.蓝牙自动关闭然后自动打开 问题:

蓝牙存在打开后会自动关闭然后再自动打开、在打开蓝牙后搜索设备按键变成灰色和在打开蓝牙后点击搜索设备按键无效,连续点击几次会导致蓝牙关闭再打开。

E/BTLD ( 3266): #################################################################### E/BTLD ( 3266): # E/BTLD ( 3266): # WARNING : BTU HCI(id=0) command timeout. opcode=0xc13 E/BTLD ( 3266): # E/BTLD ( 3266): #################################################################### W/bt-hci ( 3266): HCI Cmd timeout counter 1 V/codec_audio_pad( 1262): in normal mode, headset or speaker on,****LINE:54,FUNC:set_normal_path I/bt-btif ( 3266): btif_dm_start_discovery E/BTLD ( 3266): #################################################################### E/BTLD ( 3266): # E/BTLD ( 3266): # WARNING : BTU HCI(id=0) command timeout. opcode=0xc52 E/BTLD ( 3266): # E/BTLD ( 3266): #################################################################### E/bt-hci ( 3266): Num consecutive HCI Cmd tout =2 Restarting BT process 问题分析:

1、以上3个问题的根源有可能是相同,logcat看到均是command timeout导致蓝牙关闭。

2、问题均是在系统休眠唤醒后测试发现,需要较长时间的休眠(2小时)。

3、该问题跟硬件相关?bt_rst、VDDIO的电压不稳定?

猜你喜欢