手机蓝牙相关

先说说蓝牙的Profiles

    MTK_BT_PROFILE_OPP    

:Object Push Profile  普遍用于文件、名片的传输,从文件管理器中通过蓝牙分享即使用该协议

 

    MTK_BT_PROFILE_SIMAP  :SIM Access Profile  车载蓝牙会通过该协议使用手机上的SIM服务,如通话等,仅将手机作为SIM卡槽,使用车载蓝牙的自带的无线通信模块

 

    MTK_BT_PROFILE_PRXM  :Proximity Monitor 

    MTK_BT_PROFILE_PRXR   :Proximity Reporter  以上两个选项为远程距离感应服务的两个角色,当使用该服务连接的两个设备距离拉大到一定范围(可设定)后,双方设备就会发出声音或震动的提示。典型应用是防丢器

 

    MTK_BT_PROFILE_HIDH   :Human Interface Device Host 该协议的典型应用为连接蓝牙键盘、鼠标等I/O外设

 

    MTK_BT_PROFILE_FTP    :File Transfer Profile 可以使用该设备浏览另一方蓝牙设备的文件系统,并可以对文件、目录进行下载、上传、修改、删除等操作

 

    MTK_BT_PROFILE_PBAP  :Phone Book Access Profile  电话本存取服务。高级蓝牙耳机或车载蓝牙可能会通过该协议获取手机通信录、通话记录等信息

 

    MTK_BT_PROFILE_BPP    :Basic Printing Profile  可通过此设备连接蓝牙打印机,不过其实OPP/BIP/SPP等协议均有可能用于连接打印机(取决于打印机支持哪种协议)

 

    MTK_BT_PROFILE_BIP    :Basic Imaging Profile  用于传输图片。从图库中分享图片即优先使用该协议。

 

    MTK_BT_PROFILE_DUN   :Dial-up Networking  用于蓝牙拨号上网

 

    MTK_BT_PROFILE_PAN   :Personal Area Network 蓝牙共享网络。具体说明及限制可参考ID: FAQ05031 ID: FAQ03951

 

    MTK_BT_PROFILE_HFP   :Hands-free Profile  连接蓝牙耳机、车载蓝牙最常用的协议,用于完成蓝牙基础通话、三方通话的功能。使用手机的无线通信模块,仅在手机和耳机、车载蓝牙之前传输AT控制命令和语音数据。

 

    MTK_BT_PROFILE_A2DP  :Advanced Audio Distribution Profile 播放音乐最常用的协议,通过音乐播放器听音乐时即会使用该协议将音乐传递到蓝牙耳机。

 

    MTK_BT_PROFILE_MAPC = no     MAP Profile client
    MTK_BT_PROFILE_MAPS = no     MAP Profile server 这两项为信息存取服务的两个角色。该协议用于在蓝牙设备见传输短信、彩信和电子邮件信息

 

    MTK_BT_PROFILE_SPP   :Serial Port Profile 虚拟串口协议。该协议是一个通用的模拟串口协议。Google 自带程序BluetoothChat即使用该协议。该协议通常被用来连接特种蓝牙外设,如特种打印机、指纹识别器等

 

    MTK_BT_FM_OVER_BT_VIA_CONTROLLER = no      FM收听的声音通过BT传送给蓝牙耳机,在MT6628上该宏不能开


    MTK_BT_POWER_EFFICIENCY_ENHANCEMENT = yes 

对应到BT功率效能方面的feature,维持default设置就好


    MTK_BT_PROFILE_AVRCP13 = no    
    MTK_BT_PROFILE_AVRCP14 = no    AVRCP用于控制音乐播放,如上一曲、下一曲、暂停、播放等。

后面的数字都是指AVRCP的版本(1.3和1.4版本),default是AVRCP 1.0

 

    MTK_BT_PROFILE_TIMEC = no    Time profile client
    MTK_BT_PROFILE_TIMES = no    Time profile server 目前这两项MP版本未开放使用

 

再说说BLE链接参数和功耗的关系

[DESCRIPTION]

   BLE即低功耗蓝牙,是专为智能设备设计的一种低功耗、低延迟,小数据传输的蓝牙技术。目前广泛应用到手机,平板,及智能穿戴式设备中。 

[SOLUTION]

     BLE的数据传输都是发生在Connection Event之间,客户可以根据具体需求来调节链接参数(Connection Parameters),从来来寻求速率和功耗之间的平衡,本FAQ主要阐述链接参数和功耗、速率之间的关系!下图是BLE设备在Connection Event时间是的波形图。可以看到,BLE设备在Connection Event时,电流还是比较大,能达到10多个mA(但脉宽非常小),但是在Connection Interval时电流非常低,一般为几个uA,BLE设备工作中绝大部分时间在Sleep状态,这样就能做到非常省电。

  

BLE设备链接参数Connection Parameters主要有三个:

    1. Connection Interval:连接间隔,BLE的Connection Event是周期性发生的,两次Connection Event之间的间隔(Connection Event开始时刻算起,到下一次Connection Event开始),此值越小,那么BLE通信就越频繁,数据吞吐率就越高,功耗也相应升高。此值越大,BLE设备就会有更多时间Sleep,数据通信频繁度降低,数据吞吐率变低,功耗下降。

     2.Slave Latency:此值表示BLE Slave可以跳过的Conenction Event。如果Slave Latency为0,表示slave必须回复Master的数据包,而如果不为0,slave就可以跳过几个Conenction Event,如果在设定的Latency数目内,Slave不回复Master的包,Slave设备就有更多的时间Sleep,Master不会认为连接异常。从而达到省电的目的。

      3. Supervision Timeout:链接超时时间,即如果在此时间内没有通信发生,Master和Slave就会自动断开连接。

 下面是Connection Parameters的范围:

     1.Connection Interval :单位是1.25ms,最小是7.5ms,最大是4s。

    

     2.Slave Latency :0-499,但是不能超过((supervisionTimeout / connInterval) – 1)

     

      3.Supervision Timeout:100ms到32s之间,但是必须大于(1 + slaveLatency) * (ConnInterval).

 客户可以更加自己的实际需求在文件中配置相应的参数来达到降低BLE连接功耗的目的。

1)L版本:alps\mediatek\external\bluetooth\bt_cust\bt_cust_table.h

2)M版本:/system/bt/conf/bt_stack.conf

3)N版本:/system/bt/device/include/interop_database.h

再谈谈蓝牙连接和搜索机制

连接和搜索都属于基带行为,是否了解其底层机制决定了是否可以实现一些关键应用。

 

蓝牙连接的过程为:

首先,主设备(master,即发起连接的设备)会寻呼(page)从设备(slave,接收连接的设备),master会已跳频的方式去寻呼slave,slave会固定间隔地去扫描(scan)外部寻呼,即page scan,当scan 到外部page时便会响应response该page,这样两个设备之间便会建立link的连接,即ACL链路的连接。当ACL 链路连接建立后,主设备会发起channel的连接请求,即L2CAP的连接,建立L2CAP的连接之后,主设备采用SDP去查询从设备的免提服务,从中得到rfcomm的通道号,然后主设备会发起rfcomm的连接请求建立rfcomm的连接。然后就建立了应用的连接。
即link establish->channel establish->rfcomm establish->connection

 

蓝牙搜索一般为周期性的搜索,但在一些特殊应用时,需要实现在周期性搜索外部设备时,也可以被外部设备搜索或者迅速连接,例如手机,在搜索连接蓝牙键盘时,同时也可以与其他手机连接并传输文件。这种应用不常见,而且容易被蓝牙工程师认为是不可实现的,因为蓝牙基带传输采用的是时分双工,即交替发送和接收,由于不是全双工,所以在搜索时经常无法被外部设备搜索到或连接上,这种现象一方面是由于时分双工的局限所致,另一方面是由于没有合适地设置查询扫描周期及其时间窗和寻呼扫描周期及其时间窗所致。
在蓝牙核心协议的GAP协议中,当设备处于可被发现和可被连接的模式下时,需要周期进行inquiry scan和page scan,这个周期由inquiry scan interval和page scan interval决定,在进行扫描时有个参数即时间窗-window,即在这个时间窗口设定的时间内进行扫描,其他时间内将基带带宽让给其他应用。那么被搜索和连接的速度其实是由其interval和window决定的,这个速度是与功耗和基带带宽之间的折衷。
举个例子:
如果要被迅速连接上,可以减少page scan interval和增大page scan window,最大的window=interval,这时所有的基带带宽便被用于寻呼扫描,这样便可以迅速被外部设备连接上,但这样的结果显而易见,基带便没有带宽用于其他应用,如无法被发现,无法去主动建立连接,而且其功耗也很高。
默认的page scan interval和inquiry scan interval均为1.28s,page scan window和inquiry scan window为11.25ms,我们可以调整这四个参数以实现搜索时也可以被外部迅速搜索及连接上。如将page scan interval和inquiry scan interval缩短为0.64s,将page scan window和inquiry scan window增大为80ms,这样便可以实现上面所说的同时搜索及被搜索被连接的应用。

最后再说说实际应用中遇到的一些问题

有个客户,用我们的pda去连接一个电子称的蓝牙,发现配对时,经常配对不成功,10次有五六次之多,后来分析log发现,是配对超时引起的。具体来说,就是在客户用我们pda点击电子称的蓝牙名称,开始本对,到对方响应,两边都弹出输入pin码,确认配对,然后输入完pin码,点击确认配对时,就提示失败了。

        原因是蓝牙的配对超时时间,应该是25秒,也就是从发出请求,到双方验证通过的这个过程,最长只有25秒的时间,超过这个时间,就认为是对方无响应,而导制超时报错。不过这个25秒在哪里设置的,我没有找到,应该是在蓝牙底层协议里设置好了封装到了so库里。

        针对这个问题,目前我们的解决办法如下:

        1:在vendor\mediatek\proprietary\external\bluetooth\bt_cust\bt_cust_table.h里,将LEConnIntervalMin和LEConnIntervalMax都设置为最小值0x0006,它的单位是1.25ms,它的值最小是7.5ms,最大是4s。它的意思是连接间隔,BLE的Connection Event是周期性发生的,两次Connection Event之间的间隔(Connection Event开始时刻算起,到下一次Connection Event开始),此值越小,那么BLE通信就越频繁,数据吞吐率就越高,功耗也相应升高。此值越大,BLE设备就会有更多时间Sleep,数据通信频繁度降低,数据吞吐率变低,功耗下降。

        2:在bt_cust_table.h里,将LESupervisionTO这个值设为最大0x0C80,它的意思是链接超时时间,即如果在此时间内没有通信发生,Master和Slave就会自动断开连接。它的范围是100(msec) ~ 32(seconds) 。

还有一些其他的值,比如pinPairingReqTimeoutActive、pinPairingReqTimeoutPassive、SSPPairingReqTimeoutActive、SSPPairingReqTimeoutPassive、connectionTimeout、pageScanWindow、pageScanInterval等等,都可以试着去调试下。

按上面修改后,配对成功率会有显著的提升。上面是以mtk平台为例来说的,当然其他平台,也是一个道理。

猜你喜欢

转载自blog.csdn.net/xuhui_7810/article/details/87344279
今日推荐