蓝牙笔记

蓝牙笔记


一、    Bluetooth简介

蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。

 

二、    关于EDR

EDR 即Enhanced datarate,是蓝牙技术中增强速率的缩写,其特色是大大提高了蓝牙技术的数据传输速率,达到了2.1Mbps ,是目前蓝牙技术的三倍。因此除了可获得更稳定的音频流传送的更低的耗电量之外,还可充分利用带宽优势同时连接多个蓝牙设备。Bluetooth2.0的规范中,EDR作为补充出现的,它正确定义了调变技术的改变,和额外的封包类型,这使它能够以3MBPS的速率传输。所以,我们通常看到的是"蓝牙核心规范2.0版本+EDR"的说法。

 

三、    蓝牙协议

A.  协议分类

蓝牙协议体系中的协议按系统软件的功能分四层:

1.  核心协议:baseBand、LMP、L2CAP、SDP

2.  电缆替代协议:RFCOMM

3.  电话传输控制协议:TCSBinary、AT命令集

4.  可选协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrDA、WAE

绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。

蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 ObjectExchange (OBEX ), 在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。

B.  协议定义

1.核心协议

基带协议(baseBand)

基带和链路控制层确保微微网内各蓝牙设备单元之间由射频构成的物理连接。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。它使用查询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL),而且,在同一射频上可实现多路数据传送。ACL适用于数据分组,SCO适用于话音以及话音与数据的组合,所有的话音和数据分组都附有不同级别的前向纠错(FEC)或循环冗余校验(CRC),而且可进行加密。此外,对于不同数据类型(包括连接管理信息和控制信息)都分配一个特殊通道。

可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达L2CAP。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。

连接管理协议(LMP)

该协议负责各蓝牙设备间连接的建立。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。

逻辑链路控制和适配协议(L2CAP)

该协议是基带的上层协议,可以认为它与LMP并行工作,它们的区别在于,当业务数据不经过LMP时,L2CAP为上层提供服务。L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP允许高层协议以64k字节长度收发数据分组。虽然基带协议提供了SCO和ACL两种连接类型,但L2CAP只支持ACL。

服务发现协议(SDP)

Service Discovery Application Profile。使用SDP可以查询到设备信息和服务类型,从而在蓝牙设备间建立相应的连接。

2.电缆替代协议(RFCOMM)

在L2CAP层和SDP层实现的基础上,完成串口仿真协议RFCOMM。串口仿真协议RFCOMM是基于ETSI07.10的,它支持模拟串口和远端串口控制,并且允许在两个设备间的一条物理链上提供多个“口”进行传输,为实现SPP打下基础。(模拟串行接口环境)。

PS: SPP是基于RFCOMM的,spp 协议处于rfcomm的上层,spp的应用需走rfcomm层。如果你使用RFCOMM能够实现,那么也就不需要使用SPP,而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等。不过,还是推荐采用SPP来做,兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFP,HSP,SPP,OPP等诸多具体应用profile的原因。

3.电话控制协议

二元电话控制协议(TCS-Binary或TCSBIN)

该协议是面向比特的协议,它定义了蓝牙设备间建立语音和数据呼叫的控制信令,定义了处理蓝牙TCS设备群的移动管理进程。基于ITU TQ.931建议的TCSBinary被指定为蓝牙的二元电话控制协议规范。

AT命令集电话控制协议

SIG定义了控制多用户模式下移动电话和调制解调器的AT命令集,该AT命令集基于ITUTV.250建议和GSM07.07,它还可以用于传真业务。

4.选用协议

点对点协议(PPP)

在蓝牙技术中,PPP位于RFCOMM上层,完成点对点的连接。

TCP/UDP/IP

该协议是由互联网工程任务组制定,广泛应用于互联网通信的协议。在蓝牙设备中,使用这些协议是为了与互联网相连接的设备进行通信。

对象交换协议(OBEX)

IrOBEX(简写为OBEX)是由红外数据协会(IrDA)制定的会话层协议,它采用简单的和自发的方式交换目标。OBEX是一种类似于HTTP的协议,它假设传输层是可靠的,采用客户机/服务器模式,独立于传输机制和传输应用程序接口(API)。

电子名片交换格式(vCard)、电子日历及日程交换格式(vCal)都是开放性规范,它们都没有定义传输机制,而只是定义了数据传输格式。SIG采用vCard/vCal规范,是为了进一步促进个人信息交换。

无线应用协议(WAP)

该协议是由无线应用协议论坛制定的,它融合了各种广域无线网络技术,其目的是将互联网内容和电话传送的业务传送到数字蜂窝电话和其他无线终端上。

C.  术语定义

1、     GAP:Generic Access Profile,通用访问配置。该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接。

2、     SPP:Serial Port Profile,串口应用框架,是很多应用框架的基础。SPP规定了建立这些应用框架所需要的仿真串行链路的实现步骤(可以选择使用授权、鉴权、加密)。在嵌入式端,添加了虚拟串口的仿真实体,基本实现了SPP的要求。可以用超级终端打开标准蓝牙设备的虚拟串口(PC端)来和嵌入式端虚拟串口进行通讯。

PS: GAP(设备尚未发现与建立连接)=SDP(服务发现协议)+SPP(设置虚拟串行端口及连接两个蓝牙设备)

3、     GOEP:Generic Object Exchange Profile,通用对象交换。数据的传输,包括同步,文件传输,或者推送其它的数据。可以把它理解为内容无关的传输层协议,可以被任何应用用来传输自己定义的数据对象。

4、     SSP:Secure Simple Pairing,安全简易配对。这是蓝牙2.1版本要求的,尽管蓝牙2.1版本的设备只能使用旧有配对方式和早前版本的设备互操作。安全简易配对使用一种公钥密码学(public key cryptography),某些类型还能防御中间人(man inthe middle,简称MITM)攻击。

=======================================================================================================

SSP 有以下特点:

1)  即刻运行(Just works):正如其字面含义,这一方法可直接运行,无需用户互动。但是设备也许会提示用户确认配对过程。此方法的典型应用见于输入输出功能受限的耳机,且较固定PIN机制更为安全。此方法不提供中间人(MITM)保护。

2)  数值比较(Numeric comparison):如果两个设备都有显示屏,且至少一个能接受二进制的“是/否”用户输入,他们就能使用数值比较。此方法可在双方设备上显示6位数的数字代码,用户需比较并确认数字的一致性。如果比较成功,用户应在可接受输入的设备上确认配对。此方法可提供中间人(MITM)保护,但需要用户在两个设备上都确认,并正确的完成比较。

3)  万能钥匙进入(Passkey Entry):此方法可用于一个有显示屏的设备和一个有数字键盘输入的设备(如计算机键盘),或两个有数字键盘输入的设备。第一种情况下,显示屏上显示6位数字代码,用户可在另一设备的键盘上输入该代码。第二种情况下,两个设备需同时在键盘上输入相同的6位数字代码。两种方式都能提供中间人(MITM) 保护。

4)  非蓝牙传输方式(OOB):此方法使用外部通信方式,如近场通信(NFC),交换在配对过程中使用的一些信息。配对通过蓝牙射频完成,但是还要求非蓝牙传输机制提供信息。这种方式仅提供OOB机制中所体现的MITM保护水平。

=======================================================================================================

此外,必须使用Android的SSP(协议栈默认)的UUID(通用唯一标识符):

00001101-0000-1000-8000-00805F9B34FB

才能正常和外部的,也是SSP串口的蓝牙设备去连接。

===================================================================================================================================

  

四、    BLE蓝牙4.0

蓝牙核心规格4.0 (称为BluetoothSmart),它包括经典蓝牙、高速蓝牙和蓝牙低功耗协议。高速蓝牙基于Wi-Fi,主攻数据交换与传输;经典蓝牙则包括旧有蓝牙协议,以信息沟通、设备连接为重点;蓝牙低功耗则以不需占用太多带宽的设备连接为主。

蓝牙低功耗,也就是早前的Wibree,是蓝牙4.0版本的一个子集,它有着全新的协议栈,可快速建立简单的链接。作为蓝牙1.0 – 3.0版本中蓝牙标准协议的替代方案,它主要面向对功耗需求极低、用纽扣电池供电的应用。芯片设计可有两种:双模、单模和增强的早期版本。早期的Wibree和蓝牙ULP(超低功耗)的名称被废除,取而代之的是后来用于一时的BLE。

单模情况下,只能执行低功耗的协议栈。

双模情况下,Bluetooth Smart功能整合入既有的经典蓝牙控制器。适用的架构共享所有经典蓝牙既有的射频和功能,相比经典蓝牙的价格上浮也几乎可以忽略不计。

  

五、    Android设备连接流程

蓝手机端APP一般是以客户端的角色主动连接SPP协议设备(蓝牙模块BM77),客户端连接流程是:

1.使用registerReceiver注册BroadcastReceiver通过广播获取蓝牙状态、搜索设备等消息;

2.使用BluetoothAdapter的搜索功能startDiscovery;

3.在BroadcastReceiver的onReceive()里取得搜索所得的蓝牙设备信息(如设备名称,MAC地址,RSSI信号强度);

4.通过设备的MAC地址来建立一个BluetoothDevice对象;

5.由BluetoothDevice衍生出BluetoothSocket,准备SOCKET来读写设备;(这里是作为客户端的角色。如果是作为服务器端则应该是由BluetoothAdapter衍生出BluetoothServerSocket,用来监听其他设备的连接。)

6.通过BluetoothSocket的createRfcommSocketToServiceRecord()方法来选择连接的协议/服务,这里使用的是SPP(UUID: 00001101-0000-1000-8000-00805F9B34FB);

7.Connect之后(如果还没配对则系统自动提示),使用BluetoothSocket的getInputStream()和getOutputStream()来读写蓝牙设备。

 



参考自:

http://baike.baidu.com/link?url=VwwOL8fhB99ZTCTdUdE5aCuYiMwUxUB_HVgOOo-7k-u0Bq-iZuAyPGm1NlbVGFNrXvV88q0WNE1Em1bzew8Kuq

http://blog.csdn.net/changemyself/article/details/8454633#comments

http://blog.csdn.net/mirkerson/article/details/49305553

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值