精华内容
下载资源
问答
  • 蓝牙:蓝牙协议

    万次阅读 多人点赞 2019-03-14 09:46:25
    蓝牙协议学习整理(一)蓝牙的概述 转自: https://blog.csdn.net/guoxiaolongonly/article/details/78414870 传送门:(一)蓝牙的概述(二)蓝牙协议规范(射频、基带链路控制、链路管理)(三)蓝牙协议规范...

    蓝牙协议学习整理(一)蓝牙的概述

     

    转自: https://blog.csdn.net/guoxiaolongonly/article/details/78414870

    传送门: 
    (一)蓝牙的概述 
    (二)蓝牙协议规范(射频、基带链路控制、链路管理) 
    (三)蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM) 
    (四)蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)

    引用自xubin的博客

     

    第一章 蓝牙的概述

    一、蓝牙版本信息

    蓝牙共有六个版本1.1/1.2/2.0/2.1/3.0/4.0

    1、1.1版本

    传输率约在748~810kb/s,因是早期设计,容易受到同频率之产品所干扰下影响通讯质量。

    2、1.2版本

    同样是只有748~810kb/s 的传输率,但在加上了(改善 Software)抗干扰跳频功能。

    3、2.0+EDR版本

    是1.2的改良提升版,传输率约在1.8M/s~2.1M/s,开始支持双工模式——即一面作语音通讯,同时亦可以传输档案/高质素图片,2.0 版本当然也支持 Stereo 运作。

    应用最为广泛的是Bluetooth2.0+EDR标准,该标准在2004年已经推出,支持Bluetooth 2.0+EDR标准的产品也于2006年大量出现。虽然Bluetooth 2.0+EDR标准在技术上作了大量的改进,但从1.X标准延续下来的配置流程复杂和设备功耗较大的问题依然存在。

    4、2.1版本

    更佳的省电效果:蓝牙2.1版加入了SniffSubrating的功能,透过设定在2个装置之间互相确认讯号的发送间隔来达到节省功耗的目的。

    5、3.0+HS版本

    2009年4月21日,蓝牙技术联盟(Bluetooth SIG)正式颁布了新一代标准规范”Bluetooth Core Specification Version 3.0 High Speed”(蓝牙核心规范3.0版 ),蓝牙3.0的核心是”GenericAlternate MAC/PHY”(AMP),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。最初被期望用于新规范的技术包括802.11以及UMB,但是新规范中取消了UMB的应用。

    6、4.0 版本

    蓝牙4.0包括三个子规范,即传统蓝牙技术、高速蓝牙和新的蓝牙低功耗技术。蓝牙 4.0的改进之处主要体现在三个方面,电池续航时间、节能和设备种类上。拥有低成本,跨厂商互操作性,3毫秒低延迟、100米以上超长距离、AES-128加密等诸多特色此外,蓝牙4.0的有效传输距离也有所提升。3.0版本的蓝牙的有效传输距离为10米(约 32英尺),而蓝牙4.0的有效传输距离最高可达到100米(约328英尺)。

    7、典型蓝牙与BLE蓝牙对比

    蓝牙与BLE对比

    二、蓝牙的技术特点

    简单地说,蓝牙是一种短程宽带无线电技术,是实现语音和数据无线传输的全球开放性标准。它使用跳频扩谱(FHSS)、时分多址(TDMA)、码分多址(CDMA)等先进技术,在小范围内建立多种通信与信息系统之间的信息传输。

    1、Bluetooth的主要技术特点:

    (1)、工作频段 :2.4GHz的工科医(ISM)频段,无需申请许可证。大多数国家使用79个频点,载频为(2402+k)MHz(k=0,1, 2…78),载频间隔1MHz。采用TDD时分双工方式。 
    (2)、传输速率:1Mb/s(V2.0以上版本) 
    (3)、调试方式:BT=0.5的GFSK调制,调制指数为0.28-0.35。 
    (4)、采用跳频技术:跳频速率为1600跳/秒,在建链时(包括寻呼和查询)提高为3200跳/秒。蓝牙通过快跳频和短分组技术减少同频干扰,保证传输的可靠性。 
    (5)、语音调制方式:连续可变斜率增量调制(CVSD,ContinuousVariable Slope Delta Modulation),抗衰落性强,即使误码率达到4%,话音质量也可接受。 
    (6)、支持电路交换和分组交换业务:蓝牙支持实时的同步定向联接(SCO链路)和非实时的异步不定向联接(ACL链路),前者主要传送语音等实时性强的信息,后者以数据包为主。语音和数据可以单独或同时传输。蓝牙支持一个异步数据通道,或三个并发的同步话音通道,或同时传送异步数据和同步话音的通道。每个话音通道支持64kbps的同步话音;异步通道支持723.2/57.6kbps的非对称双工通信或433.9kbps的对称全双工通信。 
    (7)、支持点对点及点对多点通信:蓝牙设备按特定方式可组成两种网络:微微网(Piconet)和分布式网络(Scatternet),其中微微网的建立由两台设备的连接开始,最多可由八台设备组成。在一个微微网中,只有一台为主设备(Master),其它均为从设备(Slave),不同的主从设备对可以采用不同的链接方式,在一次通信中,链接方式也可以任意改变。几个相互独立的微微网以特定方式链接在一起便构成了分布式网络。所有的蓝牙设备都是对等的,所以在蓝牙中没有基站的概念。 
    (8)、工作距离:蓝牙设备分为三个功率等级,分别是:100mW(20dBm)、2.5mW(4dBm)和1mW(0dBm),相应的有效工作范围为:100米、10米和1米。

    三、Bluetooth的系统构成

    构成

    1、无线射频单元(Radio):

    负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线。

    2、基带或链路控制单元(LinkController):

    进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。

    3、链路管理单元(LinkManager):

    负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作。

    4、蓝牙软件协议实现:

    如上图紫色部分,这个后面我们做详细说明。 
    这里写图片描述

    四、蓝牙协议规范

    传输协议、中介协议、应用协议;

    1、传输协议

    负责蓝牙设备间,互相确认对方的位置,以及建立和管理蓝牙设备间的物理链路;

    • 底层传输协议:蓝牙射频(Radio)部分、基带链路管理控制器(Baseband&Link Controller)、链路管理协议(Link ManagerProtocol LMP)。负责语言、数据无线传输的物理实现以及蓝牙设备间的联网组网。

    • 高层传输协议:逻辑链路控制与适配器(LogicalLink Control and Adaptation Protocol)L2CAP 、主机控制接口(HostControl Interface,HCI)。为高层应用屏蔽了跳频序列选择等底层传输操作,为高层程序提供有效、有利于实现数据分组格式。

    2、中介协议

    为高层应用协议或者程序,在蓝牙逻辑链路上工作提供必要的支持,为应用提供不同标准接口。

    • 串口仿真协议:RFCOMM、服务发现协议:SDP、互操作协议IrDA、网络访问协议:PPP、IP、TCP、UDP、电话控制协议:TCS、AT指令集。

    这里写图片描述

    3、应用协议

    蓝牙协议栈之上的应用软件和所涉及到的协议,如:拨号上网、语言功能的应用程序。

    蓝牙的应用框架如下:

    1. 通用应用类框架:查询、建立连接服务等;
    2. 蓝牙电话应用类框架:电话控制、语言;
    3. 蓝牙连网应用类框架:网络应用相关;
    4. 对象交互服务类框架:IrDA、OBEX;
    5. 蓝牙音视频控制类框架。

    五、硬件接口

    一般蓝牙芯片通过UART、USB、SDIO、I2S、PcCard和主控芯片通信。如下图所示,通过UART和主控芯片通信。 
    这里写图片描述

     

    第二章 蓝牙协议规范(射频、基带链路控制、链路管理)


    蓝牙协议是蓝牙设备间交换信息所应该遵守的规则。与开放系统互联(OSI)模型一样,蓝牙技术的协议体系也采用了分层结构,从底层到高层形成了蓝牙协议栈,各层协议定义了所完成的功能和使用数据分组格式,以保证蓝牙产品间的互操作性。

    一、射频协议
    射频位置如上图红色部分。

    1、工作频率
    蓝牙工作在2.4GHz ISM频段上,蓝牙采用跳频扩谱技术主动的避免工作频段受干扰(微波炉的工作频率也是2.4GHz)。 


    地理位置    ISM频段范围    射频信道频率
    中国、美国、欧洲    2400.0~2483.5MHz    F=(2402+k)MHz,k在0、1、……78中随机取值
    法国    2446.5~2483.5MHz    F=(2454+k)MHz,k在0、1、……22中随机取值
    日本    2471.0~2497.0MHz    F=(2473+k)MHz,k在0、1、……22中随机取值
    西班牙    2445.0~2475.0MHz    F=(2449+k)MHz,k在0、1、……22中随机取值
    我国的蓝牙频率在2.402GHz~2.483GHz,蓝牙每个频道的宽度为1MHz,为了减少带外辐射的干扰,保留上、下保护为3.5MHz和2MHz,79个跳频点中至少75个伪随机码跳动,30S内任何一个频点使用时长不能超过0.4S。

    2、跳频技术、发射功率、时隙
    (1)、发射功率:蓝牙发射功率分三级:一级功率100mW(20dBm);二级功率2.5mW(4dBm);三级功率1mW(0dBm); 
    (2)、物理信道:蓝牙物理信道有伪随机序列控制的79个跳频点构成,不同跳频序列代表不同的信道。 


    (3)、时隙:蓝牙跳频速率为1600次/s,每个时间为625uS(1S/1600)称为一个时隙; 


    二、基带与链路控制协议


    蓝牙发送数据时,基带部分将来自高层的数据进行信道编码,向下发给射频进行发送;接收数据时,将解调恢复空中数据并上传给基带,基带进行信道编码传送给上层。

    作用:跳频选择、蓝牙编址、链路类型、信道编码、收发规则、信道控制、音频规范、安全设置。

    1、蓝牙分组编码为小端模式;
    2、蓝牙地址
    **BD_ADDR:**BluetoothDevice Address;
    **LAP:**LowerAddress Part 低地址部分;
    UAP: UpperAddress Part 高地址部分;
    NAP: Non-significantAddress Part 无效地址部分。


    3、蓝牙时钟

    每个蓝牙设备都有一个独立运行的内部系统时钟,称为本地时钟(Local Clock),决定定时器的收发跳频。为了与其他设备同步,本地时钟要加一个偏移量(offset),提供给其他设备同步。

    蓝牙基带四个关键周期:312.5uS、625uS、1.25mS、1.28S。

    CLKN:本地时钟:
    CLKE:预计时钟,扫描寻呼过程中用到;
    CLK:设备实际运行的时钟频率。

    CLKE、CLK由CLKN加上一个偏移量得到的。

    4、蓝牙物理链路:
    通信设备间物理层的数据连接通道就是物理链路。

    ACL(Asynchronous Connectionless)异步无连接链路;对时间要求不敏感的数据通信,如文件数据、控制信令等。

    SCO(Synochronous Connection Oriented)同步面向连接链路;对时间比较敏感的通信,如:语音;最多只支持3条SCO链路,不支持重传。

    ACL用于数据传输;

    5、蓝牙基带分组:
    基带分组至少包括:接入码、分组头、有效载荷;
    1


    (1)、接入码用于同步、直流、载频泄漏偏置补偿标识; 
    (2)、分组头包含链路信息,确保纠正较多的错误。 
    分组类型如下:

    分组类别    Type(b3b2b1b0)    时隙    SCO    ACL
    链路控制分组    0000    1    NULL    NULL
    0001    POLL    POLL
    0010    FHS    FHS
    0011    DM1    DM1
    单时隙分组    0100    1    未定义    NULL
    0101    HV1
    0110    HV2
    0111    HV3
    1000    DV
    1001    NULL    AUX1
    3时隙分组    1010    3    未定义    DM3
    1011    DH3
    1100    未定义
    1101
    5时隙分组    1010    5    未定义    DM5
    1111
    ACL分组形式为:D(M|H)(1|3|5),D代表数据分组,M代表用2/3比例的FEC的中等速率分组;H代表不使用纠错码的高速率分组;1、3、5分别代表分组所占用的时隙数目; 
    DM1、DM3、DM5、DH1、DH3、DH5

    SCO分组形式为:HV(1|2|3)。HV代表高质量语言分组,1、2、3有效载荷所采用的纠错码方法。1为1/3比例FEC,设备2个时隙发送一个单时隙分组;2为2/3比例FEC,设备4个时隙发送一个单时隙分组;3为不使用纠错码,设备6个时隙发送一个单时隙分组

    HV1、HV2、HV3

    ALC 分组:

    类型    有效载荷头/字节    用户有效载荷/字节    FEC    CRC    对称最大速率/kbps    非对称速率/kbps
    前向    后向
    DM1    1    0~17    2/3    有    108.8    108.8    108.8
    DH1    1    0~27    无    有    172.8    172.8    172.8
    DM3    2    0~121    2/3    有    258.1    387.2    54.4
    DH3    2    0~183    无    有    390.4    585.6    86.4
    DM5    2    0~224    2/3    有    286.7    477.8    36.3
    MH5    2    0~339    无    有    433.9    723.2    57.6
    AUX1    1    0~29    无    无    185.6    185.6    185.6
    SCO分组:

    类型    有效载荷头/字节    用户有效载荷/字节    FEC    CRC    有效载荷长度    同步速率/kbps    占用Tsco数目/语言长度
    HV1    无    10    1/3        240位    64    2/1.25ms
    HV2    20    2/3    4/2.5ms
    HV3    30    无    6/3.75ms
    DV    1D    10+(0-9)D    2/3D    有D    64+57.6D    
    注释:D 只对数据段有用,DV分组包含数据段,也包含语言段。
    1
    (3)、有效载荷 分语言有效载荷、数据有效载荷。

    6、蓝牙的逻辑信道
    链路控制信道:LinkControl LC
    链路管理信道:Link Manage LM
    用户异步数据信道:User AsynchronizationUA
    用户同步数据信道:UserSynchronization US
    用户等时数据信道:UserIsochronous UI UI
    7、蓝牙的收发规则
     
    上图为RX缓存。 
     
    上图为TX缓存。 
    新分组到达时,ACL链路的RX缓存器要流量控制,SCO数据不需要流量控制;

    8、蓝牙基带信道和网络控制
    (1)、链路控制器状态: 
    待机、连接 
    寻呼page、寻呼扫描pagescan、查询inquiry、查询扫描inquiry scan、主设备相应Master Response、从设备相应Slave Response、查询相应inquiry response 
    (2) 、连接状态 
    激活模式active、呼吸模式sniff、保持模式hold、休眠模式park。 
    (3)、待机状态 
    待机状态是蓝牙设备缺省低功耗状态,此状态下本地时钟以低精度运行。蓝牙从待机转入寻呼扫描状态,对其他寻呼进行响应成为从设备;也可以从待机状态进入查询扫描状态,完成一个完整的寻呼,成为主设备。

    9、接入过程
    注释: 
    IAC Inquiry AccessCode 查询接入码; 
    GIAC:通用查询接入码 DIAC:专用查询接入码; 
    DAC:DeviceAccess Code 设备接入码; 
    LAP: 
    建立连接,必须使用查询、寻呼;查询过程使用IAC,发现覆盖区域内的设备、设备的地址及其时钟;连接过程使用DAC,建立连接的设备处理寻呼过程,成为主设备。

    (1)、查询过程 
    蓝牙设备通过查询来发现通信范围内的其他蓝牙设备。查询信息分为GIAC、DIAC两种。查询发起设备收集所有相应设备的地址、时钟信息。 
    一设备进入查询状态去发现其他设备,查询状态下连续不断的在不同频点发送查询消息。查询的跳频序列有GIAC的LAP导出。 
    一设备想被其他设备发现,就要周期性进入 查询扫描状态,以便相应查询消息。如:我们选择设备多长时间可见,其实就是 进入查询扫描状态。 
    A、查询扫描 
    查询扫描状态下,接收设备扫描接入码的时间长度,足以完成对16个频率的扫描。扫描区间长度Twindow inquiry scan。扫描在同一个频率上进行,查询过程用32跳专用查询跳频序列,此序列有通用查询的地址决定,相位有本地时钟决定,每隔1.28S变化一次。 
    B、查询 
    与寻呼类似,TX用查询跳频序列、RX用查询相应跳频序列。 
    C、查询相应 
    从设备响应查询操作。每个设备都有自己的时钟,使用查询序列相位相同的几率比较小。为了避免多个设备在同一查询跳频信道同时激活,从设备查询响应规定:从设备收到查询消息,产生0-1023只觉得额一个随机数,锁定当时相位输入值进行跳频选择,从设备此后的RAND时隙中返回到连接或者待机状态。

    (2)、寻呼扫描 
    DAC:DeviceAccess Code 设备接入码 
    寻呼扫描状态下的设备扫描窗口Twindowpage scan内监听自己的DAC。监听只在一个跳频点进行。Twindow page scan足够覆盖16个寻呼扫描频点。 
    寻呼扫描状态,扫描在同一个频率上进行,持续1.28S,在选择另一个不同频率。

    SR模式    Tpage scan    寻呼次数Npage
    R0    连续    >=1
    R1    <=1.28S    >=128
    R2    <=2.56S    >=256
    预留    –    –
    (3)、寻呼 
    主设备使用寻呼发起一个主—从设备连接,通过在不同的跳频点上重复发送从设备DAC来扑捉从设备,从设备在寻呼扫描状态被唤醒,接收寻呼。 
    (4)、寻呼相应过程

    三、链路管理器
     
    如上图红色部分,负责完成设备:功率管理、链路质量管理、链路控制管理、数据分组管理、链路安全管理。

    1、链路管理协议数据单元
    蓝牙链路管理器接收到高层的控制信息后,不是向自身的基带部分分发控制信息,就是与另一台设备的链路管理器进行协商管理。这些控制信息封装在链路管理协议数据单元LMP_PDU中,由ACL分组的有效载荷携带。

    2、链路管理器协议规范
    (1)、设备功率管理 
    RSSI保持模式、呼吸模式、休眠模式。 
    (2)、链路质量管理 QoSQuality of Service 
    A、ACL链路。 
    B、SCO链路。 
    (3)、链路控制管理 
    设备寻呼模式、设备角色转换、时钟计时设置、信息交换:版本信息、支持特性、设备名称;建立连接、链路释放。 
    (4)、数据分组管理

    第二章 蓝牙协议规范(射频、基带链路控制、链路管理)


    蓝牙协议是蓝牙设备间交换信息所应该遵守的规则。与开放系统互联(OSI)模型一样,蓝牙技术的协议体系也采用了分层结构,从底层到高层形成了蓝牙协议栈,各层协议定义了所完成的功能和使用数据分组格式,以保证蓝牙产品间的互操作性。

    一、射频协议
    射频位置如上图红色部分。

    1、工作频率
    蓝牙工作在2.4GHz ISM频段上,蓝牙采用跳频扩谱技术主动的避免工作频段受干扰(微波炉的工作频率也是2.4GHz)。 


    地理位置    ISM频段范围    射频信道频率
    中国、美国、欧洲    2400.0~2483.5MHz    F=(2402+k)MHz,k在0、1、……78中随机取值
    法国    2446.5~2483.5MHz    F=(2454+k)MHz,k在0、1、……22中随机取值
    日本    2471.0~2497.0MHz    F=(2473+k)MHz,k在0、1、……22中随机取值
    西班牙    2445.0~2475.0MHz    F=(2449+k)MHz,k在0、1、……22中随机取值
    我国的蓝牙频率在2.402GHz~2.483GHz,蓝牙每个频道的宽度为1MHz,为了减少带外辐射的干扰,保留上、下保护为3.5MHz和2MHz,79个跳频点中至少75个伪随机码跳动,30S内任何一个频点使用时长不能超过0.4S。

    2、跳频技术、发射功率、时隙
    (1)、发射功率:蓝牙发射功率分三级:一级功率100mW(20dBm);二级功率2.5mW(4dBm);三级功率1mW(0dBm); 
    (2)、物理信道:蓝牙物理信道有伪随机序列控制的79个跳频点构成,不同跳频序列代表不同的信道。 


    (3)、时隙:蓝牙跳频速率为1600次/s,每个时间为625uS(1S/1600)称为一个时隙; 


    二、基带与链路控制协议


    蓝牙发送数据时,基带部分将来自高层的数据进行信道编码,向下发给射频进行发送;接收数据时,将解调恢复空中数据并上传给基带,基带进行信道编码传送给上层。

    作用:跳频选择、蓝牙编址、链路类型、信道编码、收发规则、信道控制、音频规范、安全设置。

    1、蓝牙分组编码为小端模式;
    2、蓝牙地址
    **BD_ADDR:**BluetoothDevice Address;
    **LAP:**LowerAddress Part 低地址部分;
    UAP: UpperAddress Part 高地址部分;
    NAP: Non-significantAddress Part 无效地址部分。


    3、蓝牙时钟

    每个蓝牙设备都有一个独立运行的内部系统时钟,称为本地时钟(Local Clock),决定定时器的收发跳频。为了与其他设备同步,本地时钟要加一个偏移量(offset),提供给其他设备同步。

    蓝牙基带四个关键周期:312.5uS、625uS、1.25mS、1.28S。

    CLKN:本地时钟:
    CLKE:预计时钟,扫描寻呼过程中用到;
    CLK:设备实际运行的时钟频率。

    CLKE、CLK由CLKN加上一个偏移量得到的。

    4、蓝牙物理链路:
    通信设备间物理层的数据连接通道就是物理链路。

    ACL(Asynchronous Connectionless)异步无连接链路;对时间要求不敏感的数据通信,如文件数据、控制信令等。

    SCO(Synochronous Connection Oriented)同步面向连接链路;对时间比较敏感的通信,如:语音;最多只支持3条SCO链路,不支持重传。

    ACL用于数据传输;

    5、蓝牙基带分组:
    基带分组至少包括:接入码、分组头、有效载荷;
    1


    (1)、接入码用于同步、直流、载频泄漏偏置补偿标识; 
    (2)、分组头包含链路信息,确保纠正较多的错误。 
    分组类型如下:

    分组类别    Type(b3b2b1b0)    时隙    SCO    ACL
    链路控制分组    0000    1    NULL    NULL
    0001    POLL    POLL
    0010    FHS    FHS
    0011    DM1    DM1
    单时隙分组    0100    1    未定义    NULL
    0101    HV1
    0110    HV2
    0111    HV3
    1000    DV
    1001    NULL    AUX1
    3时隙分组    1010    3    未定义    DM3
    1011    DH3
    1100    未定义
    1101
    5时隙分组    1010    5    未定义    DM5
    1111
    ACL分组形式为:D(M|H)(1|3|5),D代表数据分组,M代表用2/3比例的FEC的中等速率分组;H代表不使用纠错码的高速率分组;1、3、5分别代表分组所占用的时隙数目; 
    DM1、DM3、DM5、DH1、DH3、DH5

    SCO分组形式为:HV(1|2|3)。HV代表高质量语言分组,1、2、3有效载荷所采用的纠错码方法。1为1/3比例FEC,设备2个时隙发送一个单时隙分组;2为2/3比例FEC,设备4个时隙发送一个单时隙分组;3为不使用纠错码,设备6个时隙发送一个单时隙分组

    HV1、HV2、HV3

    ALC 分组:

    类型    有效载荷头/字节    用户有效载荷/字节    FEC    CRC    对称最大速率/kbps    非对称速率/kbps
    前向    后向
    DM1    1    0~17    2/3    有    108.8    108.8    108.8
    DH1    1    0~27    无    有    172.8    172.8    172.8
    DM3    2    0~121    2/3    有    258.1    387.2    54.4
    DH3    2    0~183    无    有    390.4    585.6    86.4
    DM5    2    0~224    2/3    有    286.7    477.8    36.3
    MH5    2    0~339    无    有    433.9    723.2    57.6
    AUX1    1    0~29    无    无    185.6    185.6    185.6
    SCO分组:

    类型    有效载荷头/字节    用户有效载荷/字节    FEC    CRC    有效载荷长度    同步速率/kbps    占用Tsco数目/语言长度
    HV1    无    10    1/3        240位    64    2/1.25ms
    HV2    20    2/3    4/2.5ms
    HV3    30    无    6/3.75ms
    DV    1D    10+(0-9)D    2/3D    有D    64+57.6D    
    注释:D 只对数据段有用,DV分组包含数据段,也包含语言段。
    1
    (3)、有效载荷 分语言有效载荷、数据有效载荷。

    6、蓝牙的逻辑信道
    链路控制信道:LinkControl LC
    链路管理信道:Link Manage LM
    用户异步数据信道:User AsynchronizationUA
    用户同步数据信道:UserSynchronization US
    用户等时数据信道:UserIsochronous UI UI
    7、蓝牙的收发规则
     
    上图为RX缓存。 
     
    上图为TX缓存。 
    新分组到达时,ACL链路的RX缓存器要流量控制,SCO数据不需要流量控制;

    8、蓝牙基带信道和网络控制
    (1)、链路控制器状态: 
    待机、连接 
    寻呼page、寻呼扫描pagescan、查询inquiry、查询扫描inquiry scan、主设备相应Master Response、从设备相应Slave Response、查询相应inquiry response 
    (2) 、连接状态 
    激活模式active、呼吸模式sniff、保持模式hold、休眠模式park。 
    (3)、待机状态 
    待机状态是蓝牙设备缺省低功耗状态,此状态下本地时钟以低精度运行。蓝牙从待机转入寻呼扫描状态,对其他寻呼进行响应成为从设备;也可以从待机状态进入查询扫描状态,完成一个完整的寻呼,成为主设备。

    9、接入过程
    注释: 
    IAC Inquiry AccessCode 查询接入码; 
    GIAC:通用查询接入码 DIAC:专用查询接入码; 
    DAC:DeviceAccess Code 设备接入码; 
    LAP: 
    建立连接,必须使用查询、寻呼;查询过程使用IAC,发现覆盖区域内的设备、设备的地址及其时钟;连接过程使用DAC,建立连接的设备处理寻呼过程,成为主设备。

    (1)、查询过程 
    蓝牙设备通过查询来发现通信范围内的其他蓝牙设备。查询信息分为GIAC、DIAC两种。查询发起设备收集所有相应设备的地址、时钟信息。 
    一设备进入查询状态去发现其他设备,查询状态下连续不断的在不同频点发送查询消息。查询的跳频序列有GIAC的LAP导出。 
    一设备想被其他设备发现,就要周期性进入 查询扫描状态,以便相应查询消息。如:我们选择设备多长时间可见,其实就是 进入查询扫描状态。 
    A、查询扫描 
    查询扫描状态下,接收设备扫描接入码的时间长度,足以完成对16个频率的扫描。扫描区间长度Twindow inquiry scan。扫描在同一个频率上进行,查询过程用32跳专用查询跳频序列,此序列有通用查询的地址决定,相位有本地时钟决定,每隔1.28S变化一次。 
    B、查询 
    与寻呼类似,TX用查询跳频序列、RX用查询相应跳频序列。 
    C、查询相应 
    从设备响应查询操作。每个设备都有自己的时钟,使用查询序列相位相同的几率比较小。为了避免多个设备在同一查询跳频信道同时激活,从设备查询响应规定:从设备收到查询消息,产生0-1023只觉得额一个随机数,锁定当时相位输入值进行跳频选择,从设备此后的RAND时隙中返回到连接或者待机状态。

    (2)、寻呼扫描 
    DAC:DeviceAccess Code 设备接入码 
    寻呼扫描状态下的设备扫描窗口Twindowpage scan内监听自己的DAC。监听只在一个跳频点进行。Twindow page scan足够覆盖16个寻呼扫描频点。 
    寻呼扫描状态,扫描在同一个频率上进行,持续1.28S,在选择另一个不同频率。

    SR模式    Tpage scan    寻呼次数Npage
    R0    连续    >=1
    R1    <=1.28S    >=128
    R2    <=2.56S    >=256
    预留    –    –
    (3)、寻呼 
    主设备使用寻呼发起一个主—从设备连接,通过在不同的跳频点上重复发送从设备DAC来扑捉从设备,从设备在寻呼扫描状态被唤醒,接收寻呼。 
    (4)、寻呼相应过程

    三、链路管理器
     
    如上图红色部分,负责完成设备:功率管理、链路质量管理、链路控制管理、数据分组管理、链路安全管理。

    1、链路管理协议数据单元
    蓝牙链路管理器接收到高层的控制信息后,不是向自身的基带部分分发控制信息,就是与另一台设备的链路管理器进行协商管理。这些控制信息封装在链路管理协议数据单元LMP_PDU中,由ACL分组的有效载荷携带。

    2、链路管理器协议规范
    (1)、设备功率管理 
    RSSI保持模式、呼吸模式、休眠模式。 
    (2)、链路质量管理 QoSQuality of Service 
    A、ACL链路。 
    B、SCO链路。 
    (3)、链路控制管理 
    设备寻呼模式、设备角色转换、时钟计时设置、信息交换:版本信息、支持特性、设备名称;建立连接、链路释放。 
    (4)、数据分组管理
    --------------------- 

    第三章 蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)
    一、主机控制接口协议 HCI
    蓝牙主机-主机控模型 


    蓝牙软件协议栈堆的数据传输过程: 


    1、蓝牙控制器接口数据分组:
    指令分组、事件分组、数据分组

    (1)、指令分组 


    如:Accpet Connection Request

    Opcode为:0x0409
    参数长度为: 07
    参数中蓝牙地址为:00:0d:fd:5f:16:9f
    角色为:从设备 0x01
    大端数据模式

    指令为:09 04 07 9f 16 5f fd 0d 00 01
    (2)、事件分组 


     
    如上图:

    Opcode :0x0409
    状态: 0x00
    总长度: 4字节
    命令状态:0x0f
    (3)、数据分组 
    ACL 数据分组

    连接句柄(12bit)    PB(2bit)    BC(2bit)    数据长度(16bit)
    数据…………
    注:PB  Packet_Boundary  BC Broadcast Flag
    1
    SCO 数据分组

    连接句柄(12bit)    PB(2bit)    BC(2bit)    数据长度(16bit)
    数据…………
    (4)、RS232分组指示器:

    HCI 分组类型    RS232分组指示器
    HCI指令分组    0x01
    HCI ACL数据分组    0x02
    HCI SCO数据分组    0x03
    HCI事件分组    0x04
    HCI错误消息分组    0x05
    HCI协商分组    0x06
    2、HCI控制命令
    (1)、链路控制指令

    命令    OCF    概述
    Inquiry    0x0001    蓝牙设备进入查询模式,搜索临近设备
    Inquiry Cancel    0x0002    退出查询模式
    Periodic Inquiry Mode    0x0003    蓝牙设备在指定周期内自动查询
    Exit Periodic Inquiry Mode    0x0004    退出自动查询模式
    Create Connection    0x0005    按指定蓝牙设备的BD_ADDR创建ACL链路
    Disconnect    0x0006    终止现有连接
    Add SCO Connection    0x0007    利用连接句柄参数指定的ACL连接创建SCO
    Cancel Create Connection    0x0008    
    Accept Connection Request    0x0009    接收新的呼入连接请求
    Reject Connection Request    0x000A    拒绝新的呼入连接请求
    Link Key Request Reply    0x000B    应答从主机控制器发出的链路密钥请求事件,并指定存储在主机上的链路密钥做为与BD_ADDR指定的蓝牙设备进行连接使用的链路密钥请求事件
    Link Key Request Negative Reply    0x000C    如果主机上没有存储链路密钥,作为与BD_ADDR指定的蓝牙设备进行连接使用的链路密钥,就应答从主机控制器发出的链路密钥请求事件
    PIN Code Request Reply    0x000D    应答从主机控制器发出的PIN请求事件,并指定用于连接的PIN
    PIN Code Request Negative Reply    0x000E    当主机不能指定连接的PIN时,应回答从机控制器发出的PIN请求事件
    Change Connection Packet Type    0x000F    改变正在建立连接的分组类型
    Authentication Request    0x0011    指定连接句柄关联的两个蓝牙设备之间建立身份鉴权
    Set Connection Encryption    0x0013    建立取消连接加密
    Change Connection Link Key    0x0015    强制关联了连接句柄的两个设备建立连接,并生成一个新的链路密钥
    Master Link Key    0x0017    强制关联了连接句柄的两个设备利用主设备时链路密钥或常规密钥
    Remote Name Request    0x0019    获取远端设备的名称
    Cancel Remote Name Request        
    Read Remote Supported Features    0x001B    请求远端设备所支持的特性列表
    Read Remote Extended Features        
    Read Remote Version Information    0x001D    从远端设备读取版本信息
    Read Clock Offset    0x001F    读取远端的时钟信息
    (2)、链路策略指令

    命令    OCF    简介
    Hold Mode    0x0001    改变LM状态和本地及远程设备为主模式的LM位置
    Sniff Mode    0x0003    改变LM状态和本地及远程设备为呼吸模式的LM位置
    Exit Sniff Mode    0x0004    结束连接句柄在当前呼吸模式里的呼吸模式
    Park State    0x0005    改变LM状态和本地及远程设备为休眠模式的LM位置
    Exit Park State    0x0006    切换从休眠模式返回到激活模式的蓝牙设备
    QoS Setup    0x0007    指出连接句柄的服务质量参数
    Role Discovery    0x0009    蓝牙设备连接后确定自己的主从角色
    Switch Role    0x000B    角色互换
    Read Link Policy Settings    0x000C    为指定连接句柄读链路策略设置。链路策略设置允许主机控制器指定用于连接句柄的LM连接模式
    Write Link Policy Settings    0x000D    为指定连接句柄写链路策略设置。链路策略设置允许主机控制器指定用于连接句柄的LM连接模式
    Read Default Link Policy Settings    0x000E    
    Write Default Link Policy Settings    0x000F    
    Flow Specification    0X0010    
    (3)、主机控制器与基带指令

    Set Event Mark    0x0001    使能主机过滤HCI产生的事件
    Reset    0x0003    复位蓝牙控制器、链路管理器、基带链路管理器
    Set Event Filter    0x0005    使能主机指定不同事件过滤
    Flush    0x0008    针对指定的蓝牙句柄,放弃所有作为当前待传输数据,甚至当前是属于多个在主机控制器里的L2CAP指令的数据块
    Read PIN Type    0x0009    主机读取指定主机的PIN类型是可变的还是固定的
    Write PIN Type    0x000A    主机写入指定主机的PIN类型是可变的还是固定的
    Create New Unit Key    0x000B    创建新的单一密钥
    Read Stored Link Key    0x000D    读取存放在蓝牙控制器中的单个或者多个密钥
    Write Stored Link Key    0x0011    写入存放在蓝牙控制器中的单个或者多个密钥
    Delete Stored Link Key    0x0012    删除存放在蓝牙控制器中的单个或者多个密钥
    Write Local Name    0x0013    修改蓝牙设备名称
    Read Local Name    0x0014    读取蓝牙设备名称
    Read Connection Accept Timeout    0x0015    读连接识别超时参数值,定时器终止后蓝牙硬件自动拒绝连接
    Write Connection Accept Timeout    0x0016    写连接识别超时参数值,定时器终止后蓝牙硬件自动拒绝连接
    Read Page Timeout    0x0017    读寻呼超时参数值,本地设备返回连接失败前,该值是允许蓝牙硬件定义等待远程设备连接申请时间
    Write Page Timeout    0x0018    写寻呼超时参数值,本地设备返回连接失败前,该值是允许蓝牙硬件定义等待远程设备连接申请时间
    Read Scan Enable    0x0019    写出扫描允许参数值—用来控制蓝牙设备周期性查询
    Write Scan Enable    0x001A    读出扫描允许参数值—用来控制蓝牙设备周期性查询
    Read Page Scan Activity    0x001B    读寻呼扫描间隔、寻呼扫描区间参数
    Write Page Scan Activity    0x001C    写寻呼扫描间隔、寻呼扫描区间参数
    Read Inquiry Scan Activity    0x001D    读查询扫描间隔、查询扫描区间参数
    Write Inquiry Scan Activity    0x001E    写查询扫描间隔、查询扫描区间参数
    Read Authentication Enable    0x001F    读取鉴权允许参数—控制蓝牙设备是否对每个连接进行鉴权
    Write Authentication Enable    0x0020    写取鉴权允许参数—控制蓝牙设备是否对每个连接进行鉴权
    Read Encryption Mode    0x0021    读加密模式数值—控制蓝牙设备是否对每个连接进行加密
    Write Encryption Mode    0x0022    写加密模式数值—控制蓝牙设备是否对每个连接进行加密
    Read Class Of Device    0x0023    读取设备类型参数值,用于区别设备能力
    Write Class Of Device    0x0024    写设备类型参数值,用于区别设备能力
    Read Voice Setting    0x0025    读取语音设置参数值,控制语音连接的各种设置
    Write Voice Setting    0x0026    写语音设置参数值,控制语音连接的各种设置
    Read Automatic Flush Timeout    0x0027    对指定句柄,读取刷新超时值
    Write Automatic Flush Timeout    0x0028    对指定句柄,写入刷新超时值
    Read Num Broadcast Retransmissions    0x0029    读取设备的广播重复发送次数,重复发送提高广播消息的可靠性
    Write Num Broadcast Retransmissions    0x002A    写入设备的广播重复发送次数,重复发送提高广播消息的可靠性
    Read Hold Mode Activity    0x002B    读取Hold Mode Activity的参数值,用来确定Hold挂起的时间
    Write Hold Mode Activity    0x002C    写入Hold Mode Activity的参数值,用来确定Hold挂起的时间
    Read Transmit Power Level    0x002D    对指定句柄,读取传输功率的参数值
    Read Synchronous Flow Control Enable    0x002E    读取SCO流量控制设置。通过使用该设置,主机控制器决定是否主机控制器发送与SCO连接句柄相关的完成分组事件的数量
    Write Synchronous Flow Control Enable    0x002F    读写入SCO流量控制设置。通过使用该设置,主机控制器决定是否主机控制器发送与SCO连接句柄相关的完成分组事件的数量
    Set Host Controller To Host Flow Control    0x0031    主机控制器的打开、关闭,主机控制器到主机的流量控制
    Host Buffer Size    0x0033    主机通知主机控制器自己的ACL、SCO数据缓冲区大小。主机控制器分段传输数据,而数据不会超出这个范围
    Host Number Of Completed Packets    0x0035    当主机对于任何连接的句柄准备接受较多的HCI指令时,该指令用于通过主机指出主机控制器
    Read Link Supervision Timeout    0x0036    读取连接管理超时参数。主从蓝牙设备用该参数监视链路丢失情况
    Write Link Supervision Timeout    0x0037    写入连接管理超时参数。主从蓝牙设备用该参数监视链路丢失情况
    Read Number of Supported IAC    0x0038    读取查询扫描期间本地蓝牙扫描的查询识别码(ICA)的数值
    Read Current IAC LAP    0x0039    读取创建在查询扫描期间本地蓝牙设备正同时扫描的蓝牙识别码的LAP
    Write Current IAC LAP    0x003A    写入创建在查询扫描期间本地蓝牙设备正同时扫描的蓝牙识别码的LAP
    Read Page Scan Period Mode    0x003B    读取本地蓝牙设备的强制寻呼扫描区间模式
    Write Page Scan Period Mode    0x003C    写入本地蓝牙设备的强制寻呼扫描区间模式
    Read Page Scan Mode    0x003D    读取本地蓝牙设备的默认寻呼扫描区间模式
    Write Page Scan Mode    0x003E    写入本地蓝牙设备的默认寻呼扫描区间模式
    (4)、信息指令参数

    Read Local Version Information    0x0001    读取本地蓝牙版本信息
    Read Local Supported Features    0x0003    读取本地蓝牙设备特征表
    Read Local Extended Features    0x0004    
    Read Buffer Size    0x0005    返回HCI缓冲容量。缓冲容量用于传输缓冲数据
    Read Country Code [Deprecated]    0x0007    读取国家代码状态参数值
    Read BD ADDR    0x0009    读取BD_ADDR的参数值
    (5)、状态指令参数

    Read Failed Contact Count    0x0001    读取对于其他设备特殊连接的Failed Contact Count参数值。Failed Contact Count记录在刷新时终止及当前正在传输的L2CAP数据指令被自动刷新后,主单元或从单元不能连续响应事件次数
    Reset Failed Contact Count    0x0002    复位时对于其他设备的连接的Failed Contact Count的参数值。Failed Contact Count记录在刷新时终止及当前正在传输的L2CAP数据指令被自动刷新后,主单元或从单元不能连续响应事件次数
    Get Link Quality    0x0003    读取指定连接句柄的Link Quality的值
    Read RSSI    0x0005    读取对于其他蓝牙设备连接句柄的接收信号强度指示
    Read AFH Channel Map    0x0007    
    Read BD Clock    0x0009    
    (6)、测试指令

    Read Loopback Mode    0x0001    读取主机端控制器会送模式的设置值。回送模式设置可以确定信息发送路径
    Write Loopback Mode    0x0002    写入主机控制器会送模式的设置值。回送模式设置可以确定信息发送路径
    Enable Device Under Test Mode    0x0003    允许本地蓝牙设备模块通过LMP测试指令接入测试模式。当主机要求本地设备作为待测试设备,实现蓝牙测试模式文件中规定测试场景,则发送该指令
    (7)、错误代码

    错误代码    错误含义    错误代码    错误含义
    0x01    位置HCI指令    0x14    由于另一端引起连接中断:资源限制
    0x02    不能连接    0x15    由于另一端引起连接中断:关机
    0x03    硬件故障    0x16    本机中断连接
    0x04    寻呼超时    0x17    重复尝试
    0x05    身份验证失败    0x18    不允许匹配
    0x06    键丢失    0x19    未知LMP PDU
    0x07    存储器已满    0x1A    不支持远端特性
    0x08    连接超时    0x1B    拒绝SCO补偿
    0x09    最大连接数    0x1C    拒绝SCO间歇模式
    0x0A    连接到设备A的最大SCO连接数    0x1D    拒绝SCO无线模式
    0x0B    ACL连接已存在    0x1E    非法链路管理参数
    0x0C    指令非法    0x1F    未特别指明错误
    0x0D    由于资源有限,主机被拒绝    0x20    不支持链路管理器协议参数
    0x0E    由于安全原因,主机被拒绝    0x21    不允许角色改变
    0x0F    由于远端设备单连接设备,主机拒绝    0x22    链路管理响应超时
    0x10    主机超时    0x23    链路管理错误处理事务冲突
    0x11    不支持特性或参数值    0x24    不允许LMP PDU
    0x12    非法主机控制接口指令    0x25~0xFF    保留
    0x13    由于另一端引起连接中断:用户中断连接        
    二、逻辑链路控制与适配协议 L2CAP
    L2CAP位于基带之上,将基带的数据分组转换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。L2CAP只支持ACL数据传输,不支持SCO数据。

    L2CAP本身不提供加强信道可靠性和保证数据完整性的机制,其信道的可靠性依靠基带提供。

    1、协议复用:
    底层传输协议没有提供对高层协议的复用机制,因而L2CAP支持高层协议复用,L2CAP层可以区分其上的SDP、RFCOMM、TCS等。

    2、分段重组:
    L2CAP层帮助实现基带的短PDU和高层的长PDU相互传输,L2CAP本身不完成任何PDU的分段重组,具体的分段重组有低层和高层来完成。

    3、服务质量
    Qualityof Serivce 信息的交换:蓝牙建立连接的过程中,L2CAP允许交互蓝牙所期望的服务质量,建立完成后,通过监视资源的使用情况,来保证服务质量。

    4、组抽象:
    L2CAP忽略地址组概念,他只关心数据。 
    L2CAP信道有三种类型: 
    **A、面向连接信道:**Connection-OrientedCO,用于两个设备之间的数据通信。 
    **B、无连接信道:**Connection-LessCL,用来向一组设备广播方式传输数据。CID为固定值:0x0002。 
    **C、信令信道:**Signaling,用于创建CO通道,可以通过协商改变CO信道的特性。 
    CL信道的L2CAP_PDU

    长度(2bytes)    信道ID(0x0002)    PSM(最小为2bytes)    有效载荷
    PSM为 协议/服务复用器Protocol/Service Multiplexer,一般为SDP、RFCOMM、TCS等中介协议复用。小于0x1000的值,0x0001对应SDP,0x0003对应RFCOMM、0x0005对应TCS。

    (1)、蓝牙逻辑链路控制与适配协议信令: 
    L2CAP的信令通道的CID为0x0001 
    信令指令分组:

    长度(2byte)    CID(0x0001)    指令1    指令2    ……………    指令n
    L2CAP 分组头部分    
    信令指令格式:

    代码(1byte)    标识符(1byte)    长度(2byte)    数据
    信令指令头


    如上图所示,一条L2CAP信令,1为L2CAP分组头,2为信令指令头,3为数据部分。 
    L2CAP: 
    Role:Master 
    Address:11 
    PDULength: 6 //指令的长度,值为06 00 
    ChannelID: 0x0001 (Signaling)//L2CAP的信令通道,值为01 00 
    Code:Information request//信息请求,值为0a 
    Identifier:1//标识符,值为01 
    CommandLength: 2//命令长度,值为02 00 
    InfoType:Extended features supported//02 00 
    所以这条指令完整的为: 
    06 00 01 00 0a 01 02 00 02 00

    信令的其他操作如下: 


    L2CAP信令指令码:

    Code    Description    
    0x00    RESERVED    保留
    0x01    Command reject    拒绝命令
    0x02    Connection request    连接请求
    0x03    Connection response    连接响应
    0x04    Configure request    配置请求
    0x05    Configure response    配置响应
    0x06    Disconnection request    断开请求
    0x07    Disconnection response    断开响应
    0x08    Echo request    
    0x09    Echo response    
    0x0A    Information request    信息请求
    0x0B    Information response    信息响应
    1)、连接请求Connection_Request Code=0x02

    代码(0x02)    标识符(1字节)    长度(2字节)    PSM(2字节)    源CID(2字节)
    例如:SDP 连接请求

    如上红框所示:

    代码(0x02)    标识符(1字节)    长度(2字节)    PSM(2字节)    源CID(2字节)
    0x02    3    4    SDP    0x0040
    2)、连接相应Connection_Response Code=0x03

    代码(0x03)    标识符    长度    目标CID    源CID    结果    状态
    例如:SDP请求响应 
     
    如上面红框所示:

    代码(0x03)    标识符    长度    目标CID    源CID    结果    状态
    0x03    3    8    0x0040    0x0040    0x0000    
    (2)、MTU MAXIMUMTRANSMISSION UNIT最大传输单元

     
    MTU最大传输单元,L2CAP应用必须支持最小为48字节的MTU,默认值为672 
    (3)、QoS 服务质量

    三、服务发现协议SDP
    SDP两种服务发现模式: 
    1)、服务搜索:查询具有特定服务属性的服务; 
    2)、服务浏览:简单的浏览全部可用服务。

    1 、PDU 格式:(协议数据单元)
    PDU ID(1byte)    Transaction ID(2byte)    参数长度(2byte)    参数1    ……    参数N
    Header    
    不同PDU ID实现SDP的不同功能,概述如下表格:

    Value    Parameter Descirption    
    0x00    Reserved    保留
    0x01    SDP_ErrorResponse    错误响应
    0x02    SDP_ServiceSearchRequest    服务搜索请求
    0x03    SDP_ServiceSearchResponse    服务搜索响应
    0x04    SDP_ServiceAttributeRequest    服务属性请求
    0x05    SDP_ServiceAttributeResponse    服务属性响应
    0x06    SDP_ServiceSearchAttributeRequest    服务搜索属性请求
    0x07    SDP_ServiceSearchAttributeResponse    服务搜索属性响应
    0x08-0xff    Reserved    保留
    2、服务记录表
    SDP的服务记录表对每一个服务进行描述,每条记录包含服务句柄、一组服务属性: 


    Service Record Attributes:服务记录;
    Service Record Handle 服务句柄;


    四、串口仿真协议 RFCOMM

    为建立在串口之上的传统应用提供环境接口,使他们可以做比较少协议改动就可以在蓝牙无线通信无线链路上工作。多路串口仿真是RFCOMM的重要功能,通过多路复用器(multiplexer),一条L2CAP链路可以同时 多个串行应用。 
    两台设备间的串口仿真: 


    RFCOMM 两个蓝牙设备之间可以支持多达60多路仿真串口。

    RFCOMM帧类型如下:

    SABM    异步平衡模式设置指令
    UA    未加编号的确认响应
    DM    断开连接模式响应
    DISC    断开连接指令
    UIH    带头校验的未编号信息命令和响应

     

    展开全文
  • 蓝牙技术介绍,包括技术特点技术规范,协议
  • 蓝牙协议学习笔记

    2020-12-25 10:49:42
    蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的! 厂商要么实现这两种技术中的一种,这时就只能...

    蓝牙协议学习笔记(1)_基本概念

    前言

    初步学习蓝牙,本文基本为查阅的资料内容,写下来是为了加深自己对蓝牙技术的理解,更好的服务于工作。
    

    一、蓝牙技术的概述

    1.两种蓝牙技术:Basic Rate(BR)和Low Energy(LE)

    蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索(discovery)管理、连接(connection)管理等机制,但它们是不能互通的!
    厂商要么实现这两种技术中的一种,这时就只能和同样实现了这个技术的设备互通,而不能和实现另外一种技术的设备互通。如果厂商要确保能和所有的蓝牙设备互通,那么就只能同时实现两种技术。
    

    1.1 Basic Rate(BR)

    Basic Rate是最初的蓝牙技术,包括**可选(optional)**的EDR(Enhanced Data Rate)技术,以及**交替使用的(Alternate)**的MAC(Media Access Control)层和PHY层扩展(简称AMP)。
    蓝牙BR技术的理论传输速率可以达到721.2Kbps。这个速率在后期不够用了,就有了EDR(Enhanced Data Rate),理论速率可以达到2.1Mbps。EDR落伍之后,借用了WiFi的物理层和MAC层,这就是AMP(Alternate MAC and PHY layer extension),此时理论速率到了54Mbps。
    由于蓝牙自身的物理层和AMP技术差异太明显,这次扩展只能是**交替使用(Alternate**)的,也就是说,有我(BR/EDR)没你(AMP)。
    注意,BR和EDR是可以同时存在的,但BR/EDR和AMP只能二选一。
    

    1.2 Low Energy(LE)

    上面所讲的BR技术的进化路线,就是传输速率的加快、加快、再加快。但能量是守恒的,你想传的更快就要消耗更多的能量。而有很多的应用场景,并不关心传输速率,反而非常关心功耗。这就是Bluetooth LE(蓝牙低功耗)产生的背景。
    LE相比BR差异非常大,或者说就是两种不同的技术,凑巧都加一个“蓝牙”的前缀而已。后面我们会详细的解释这种差异,以及LE的行为特征。
    

    2. 蓝牙系统的组成

    蓝牙系统的组成,涉及到Bluetooth Application、Bluetooth Core、Bluetooth Host、Bluetooth Controller等词汇,这些名词理解和翻译很难很拗口。下面对相关概念及其背后的意义进行说明。
    

    在这里插入图片描述

    1)图中所描述的蓝牙系统的组成部分,如Bluetooth Core和Bluetooth Application,如Host和Controller,都是指“逻辑实体”。需要注意的是蓝牙协议所描述的这些“逻辑实体”,不一定会和物理实体一一对应,如在实际应用中,Host和Bluetooth Application可能会位于同一个物理实体中(主控CPU),而Controller单独位于另一个物理实体中(蓝牙芯片)。
    2)蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议(Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)。蓝牙核心协议关注对蓝牙核心技术的描述和规范,它只提供基础的机制,并不关心如何使用这些机制;蓝牙应用层协议,是在蓝牙核心协议的基础上,根据具体的应用需求,定义不同的策略,如HFP、A2DP、HSP等。
    3)Bluetooth Core由两部分组成,Host和Controller。这两部分在BR/EDR、AMP、LE承担角色略有不同,但大致功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。
    4)在一个系统中,Host只有一个,但Controller可以有多个。如:单独的LE Controller;单独的BR/EDR Controller;单独的LE+BR/EDR Controller;在单独的BR/EDR Controller或LE+BR/EDR Controller基础上,增加一个或多个额外的AMP Controller。
    

    3. BR/EDR vs LE vs AMP

    在这里插入图片描述

    由上图可以看出,BR/EDR、AMP、BLE等技术有如下的特点:
    1)BR/EDR技术,过于侧重“点对点”通信,以至于虽然在协议的底层(如Logical Link)有提及多播(Unidirectional)和广播(Broadcast)的概念,但在上层的应用场景中,几乎不存在(也不可能存在)相应的应用。
    2)随着物联网的发展,业界对简单的、不需要连接的多播或广播通信的需求越来越迫切,因此BLE在RF和Baseband的协议中做出了修改,以适应这种需求,即:修改原有的79个channel的跳频方式,将channel的个数减少为40个,并保留了不少于3个的固定channel,用于广播通信。仅在剩下的37个data channel上跳频。
    3)因为这种改变,原有的搜索/连接/配对等概念,在BLE上就不再存在了,取而代之的是Advertisor、Initiator等概念。但在之后的数据通信的层次上,尽量保持了一致。
    4)对于AMP来说,是基于BR/EDR的controller,在完成通常的点对点连接之后,两个蓝牙设备商议,是否需要将后续的数据通信,转移至AMP controller上。这就是Bluetooth 3.0引入的AMP技术。 
    

    转自wowo,链接http://www.wowotech.net/bluetooth/bt_overview.html

    展开全文
  • 蓝牙协议分析_协议架构

    千次阅读 2018-05-01 17:47:01
    2. 协议层次蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护;在通信实体内部,下层向上...

    1. 前言

    本文是蓝牙协议分析的第二篇文章,在“蓝牙协议分析_基本概念”的基础上,从整体架构的角度,了解蓝牙协议的组成,以便加深对蓝牙的理解。

    2. 协议层次

    蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下:

    从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护;

    在通信实体内部,下层向上层提供服务,上层是下层的用户;

    在通信实体之间,协议仅针对每一层,实体之间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。

    蓝牙协议也不例外,其协议层次如下:

    bluetooth_stack_layer

    从OSI(Open System Interconnection)模型的角度看,蓝牙是一个比较简单的协议,它仅仅提供了物理层(Physical Layer)和数据链路层(Data Link Layer )两个OSI层次。但由于蓝牙协议的特殊性、历史演化因素等原因,其协议层次又显的不简单,甚至晦涩难懂(如上面图片所示的Physical Link、Logical Transport等)。

    蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)。

    物理层,负责提供数据传输的物理通道(通常称为信道)。通常情况下,一个通信系统中存在几种不同类型的信道,如控制信道、数据信道、语音信道等等。

    逻辑层,在物理层的基础上,提供两个或多个设备之间、和物理无关的逻辑传输通道(也称作逻辑链路)。

    L2CAP层,L2CAP是逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)的缩写,负责管理逻辑层提供的逻辑链路。基于该协议,不同Application可共享同一个逻辑链路。类似TCP/IP中端口(port)的概念。

    APP层,理解蓝牙协议中的应用层,基于L2CAP提供的channel,实现各种各样的应用功能。Profile是蓝牙协议的特有概念,为了实现不同平台下的不同设备的互联互通,蓝牙协议不止规定了核心规范(称作Bluetooth core),也为各种不同的应用场景,定义了各种Application规范,这些应用层规范称作蓝牙profile。

    在以上四个层次的基础上,蓝牙协议又将物理层和逻辑层划分了子层,分别是Physical Channel/Physical Links和Logical Transports/Logical Links,这一划分,相当使人崩溃,要多花费大量的脑细胞去理解它们,具体请参考下面的分析。

    2.1 物理层

    物理层负责提供数据传输的物理信道,蓝牙的物理层分为Physical Channel和Physical Links两个子层。我们先介绍Physical Channel。

    2.1.1 Physical Channel(物理信道)

    一个通信系统中通常存在多种类型的物理信道,蓝牙也不例外。另外,由“蓝牙协议分析(1)_基本概念”的介绍可知,蓝牙存在BR/EDR、LE和AMP三种技术,这三种技术在物理层的实现就有很大的差异,下面让我们一一介绍。

    首先是相同点,BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 频段,频率范围是2.400-2.4835 GHz。

    注1:不同国家和地区蓝牙的频率和信道分配情况是不同,本文所有的描述都以中国采用的“欧洲和美国”标准为准。

    除了相同点,剩下的都是不同点了。

    BR/EDR是传统的蓝牙技术,它这样定义物理信道:

    1)ISM频率范围内被分成79个channel,每一个channel占用1M的带宽,在0 channel和78 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。

    2)采用跳频技术(hopping),也就是说,某一个物理信道,并不是固定的占用79个channel中的某一个,而是以一定的规律在跳动(该规律在技术上叫做"伪随机码",就是"假"的随机码)。因此蓝牙的物理信道,也可以称作跳频信道(hopping channel)。

    3)BR/EDR技术定义了5种物理信道(跳频信道),BR/EDR Basic Piconet Physical Channel、BR/EDR Adapted Piconet Physical Channel、BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel和BR/EDR Synchronization Scan Channel。

    4)BR/EDR Inquiry Scan Physical Channel用于蓝牙设备的发现操作(discovery),即我们常用的搜索其它蓝牙设备(discover)以及被其它蓝牙设备搜索(discoverable)。

    5)BR/EDR Page Scan Physical Channel用于蓝牙设备的连接操作(connect),即我们常用的连接其它蓝牙设备(connect)以及被其它蓝牙设备连接(connectable)。

    6)BR/EDR  Basic Piconet Physical Channel和BR/EDR  Adapted Piconet Physical Channel主要用在处于连接状态的蓝牙设备之间的通信。它们的区别是,BR/EDR  Adapted Piconet Physical Channel使用较少的RF跳频点。BR/EDR Basic Piconet Physical Channel使用全部79个跳频点,而BR/EDR Adapted Piconet Physical Channel是根据当前的信道情况使用79个跳频点中的子集,但是跳频数目也不能少于20个。这个主要是因为蓝牙使用ISM频段,当蓝牙和WIFI共存的时候,部分跳频点被WIFI设备占用而使得蓝牙设备在这些跳频点上的通信总是失败,因此,需要避过那些WIFI设备占用的频点。

    7)BR/EDR Synchronization Scan Channel可用于无连接的广播通信,后续文章会详细介绍。

    8)同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。

    LE是为蓝牙低功耗而生的技术,为了实现低功耗的目标,其物理信道的定义与BR/EDR有些差异:

    1)ISM频率范围内被分成40个channel,每一个channel占用2M的带宽,在0 channel和39 channel之外设立guard band(保护带宽,Lower Guard Band为2MHz,Upper Guard Band为3.5MHz)。

    2)LE技术定义了2种物理信道,LE Piconet channel和LE Advertisement Broadcast Channel。

    3)LE Piconet Channel用在处于连接状态的蓝牙设备之间的通信,和BR/EDR一样,采用调频技术。和BR/EDR不一样的地方是,只会在40个频率channel中的37个上面跳频。

    4)LE Advertisement Broadcast Channel用于在设备间进行无连接的广播通信,这些广播通信可用于蓝牙的设备的发现、连接(和BR/EDR类似)操作,也可用于无连接的数据传输。

    8)和BR/EDR一样,同一时刻,BT 设备只能在其中一个物理信道上通信,为了支持多个并行的操作,蓝牙系统采用时分方式,即不同的时间点采用不同的信道。

    AMP是为高速数据传输设计的技术,其物理层规范直接采用802.11(WIFI)的PHY规范,主要有如下特点:

    AMP物理信道只有一种,即AMP Physical Channel,主要用于已连接设备之间的数据通信,和BR/EDR技术中的BR/EDR Adapted Piconet Physical Channel位于一个级别,可以互相切换使用。

    2.1.2 Physical Links(物理链路)

    由2.1.1的描述可知,蓝牙协议为BR/EDR、LE和AMP三种技术定义了8种类型的物理信道,包括:

    AMP physical channel

    BR/EDR Basic Piconet Physical Channel 
    BR/EDR Adapted Piconet Physical Channel 
    BR/EDR Page Scan Physical Channel 
    BR/EDR Inquiry Scan Physical Channel 
    BR/EDR Synchronization Scan Channel

    LE Piconet Channel 
    LE Advertisement Broadcast Channel

    而物理链路,则是对这些物理信道(主要是BR/EDR技术中的Basic Piconet Physical Channel和Adapted Piconet Physical Channel)的进一步封装,其主要特征是(可参考2.5中的图片以辅助理解):

    1)Physical Link是一个虚拟概念,不对应协议中任何的实体,数据包封包/解包的过程中不被体现。

    2)AMP Physical Channel、LE Piconet Channel、LE Advertisement Broadcast Channel均有一个一一对应的Physical Link,分别是AMP Physical Link、LE Active Physical Link、LE Advertising Physical Channel。

    3)BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel、BR/EDR Synchronization Scan Channel只在特定时间段使用,且无法控制任何属性,因此不需要再Physical Link中体现。

    4)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel是BR/EDR技术中已连接设备之间进行数据通信的通道,且同一时刻只能根据应用场景选择一种channel进行数据传输。因此这两个channel被map到BR/EDR Active Physical Link、BR/EDR Parked Physical Link和BR/EDR Connectionless Slave Broadcast Physical Link三个物理链路上。

    5)BR/EDR Active Physical Link和BR/EDR Parked Physical Link的抽象主要有两个方面的意义: 
            5-1)屏蔽底层的Basic/Adapted Piconet Physical Channel之间的差异,统一使用Physical Link取代。在需要的时候,可以通过上层的链路管理协议,指定使用哪一种physical channel(Basic or Adapted)。 
            5-2)可以通过Physical Link的抽象,控制Physical Channel的一些属性(如发射功率、收发周期等),以达到节省功耗的目的。而上面的层次(如逻辑层)不需要对这些动作知情。

    6)BR/EDR Active Physical Link定义了连接状态的蓝牙设备在链路处于active状态时的物理链路,该物理链路对应的设备的发射功率是可修改的。

    7)BR/EDR Parked Physical Link定义了连接状态的蓝牙设备在链路处于parked状态时的物理链路。parked状态是一种特殊的连接状态,连接双方没有正在进行的数据传输,所有的链路消耗,都是为保持连接所做的事情。此时可以通过降低在物理信道上的收发频率而降低功耗。该物理链路和BR/EDR Active Physical Link使用相同的物理信道。

    8)BR/EDR Connectionless Slave Broadcast Physical Link使用BR/EDR Adapted Piconet Physical Channel,用于一点到多点的广播通信。

    9)由上面的描述可知,物理链路这一层抽象,实在是可有可无,希望大家不要纠结,知道怎么回事即可。

    2.2 逻辑层

    逻辑层的主要功能,是在已连接(LE Advertisement Broadcast可以看做一类特殊的连接)的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:

    一条城市道路可以看做一个物理链路(可能有两个方向,我们只考虑其中一个即可),该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、掉头车道、快速车道、慢速车道等等。

    这里的车道(逻辑信道),从物理角度看,并没有什么分别,只是为了方便交通(数据传输),人为的抽象出来的。和车道类似,蓝牙逻辑信道的划分依据是传输类型,主要包括下面3类(即Logical Link):

    1)用于管理底层物理链路的控制类传输,包括AMP-C、ACL-C、PSB-C、LE-C、ADVB-C。

    2)传输用户数据的用户类传输,包括AMP-U、ACL-U、PSB-U、LE-U、ADVB-U。

    3)其它比较特殊的传输类型,包括流式传输(stream)、PBD(Profile Broadcast Data)。

    以上每种Logic Link都会在下层对应一个Logical Transport,这些Logical Transport具有一些属性值,如流控、应答/重传机制等。如下:

    AMP ACL(Asynchronous Connection-Oriented Link),基于AMP技术的、面前连接的、异步传输链路,为AMP-U提供服务。

    BR/EDR ACL,基于BR/EDR技术的ACL链路,为ACL-C、ACL-U提供服务。

    SCO/eSCO(Synchronous Connection-Oriented/Extended SCO),基于BR/EDR技术的、面向连接的、同步传输链路,为stream类型的Logical Link提供服务。

    ASB(Active Slave Broadcast)、PSB(Parked Slave Broadcast),基于BR/EDR技术的、面向连接的广播传输链路,为ACL-U、PSB-U、PSB-C提供服务。

    CSB(Connectionless Slave Broadcast),基于BR/EDR技术的、无连接的广播链路,为PBD提供服务。

    LE ACL,基于LE技术的、面前连接的、异步传输链路,为LE-U、LE-C提供服务。

    ADVB(Advertising Broadcast),基于LE技术的、广告/广播链路,为ADVB-U、ADVB-C提供服务。

    注2:AMP-C没有对应的Logical Transport,而是直接控制AMP Physical Link完成所需功能。

    注3:蓝牙逻辑层的抽象也是让人醉了!还是那句话,不要逼自己去理解一个疯子的行为,不然自己也会疯的。

    2.3 L2CAP Channels

    L2CAP是Logical Link Control and Adaptation Protocol(逻辑链路控制和适配协议)的缩写,蓝牙协议到这个层次的时候,就清爽多了:

    对下,它在用户类XXX-U Logical Link的基础上,抽象出和具体技术无关的数据传输通道(包括单播和广播两类),至此用户就不再需要关心繁杂的蓝牙技术细节。

    对上,它以L2CAP channel endpoints的概念(类似TCP/IP中的端口),为具体的应用程序(profile)提供独立的数据传输通道(当然,也是一个逻辑通道)。

    2.4 Profiles

    profile是蓝牙Application的代指,也可以翻译为服务,为了实现不同平台下的不同设备的互联互通,蓝牙协议为各种可能的、有通用意义的应用场景,都制定的了规范,如SPP、HSP、HFP、FTP、IPv6/6LoWPAN等等。

    Profiles基于L2CAP提供的L2CAP channel endpoints实现,在它们对应的层次上进行数据通信,以完成所需功能。有关蓝牙profile的介绍,会在后续文章中陆续给出,这里就不再详细说明了。

    2.5 总结

    下面图片包含上面各个层次(除了APP layer)中涉及到的一些实体、概念以及相互关系,供大家参考。

    Overview of transport architecture entities and hierarchy

    摘录自:Core_v4.2.pdf---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->3 DATA TRANSPORT ARCHITECTURE---->3.2 TRANSPORT ARCHITECTURE ENTITIES

    3. 蓝牙核心框架

    蓝牙规范有两类:一类是蓝牙核心规范,由Bluetooth Core Specification定义,囊括到L2CAP层,以及相关的核心profile;另一类是蓝牙Application规范,包含了各种各样的profile规范(具体可参考“https://www.bluetooth.com/specifications/adopted-specifications”中的列表)。

    蓝牙核心规范所定义的框架如下:

    Bluetooth core system architecture摘录自:Core_v4.2.pdf ---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->2 CORE SYSTEM ARCHITECTURE

    经过第2章协议层次的介绍,蓝牙核心框架已经比较容易理解了,这里对层次中各个模块做一个简单的说明,更为详细的分析,请参考后续的文章。

    1)BR/EDR Radio & LE Radio & AMP PHY

    蓝牙RF层(物理层),包括BR/EDR、LE以及AMP三种。负责在物理channel上收发蓝牙packet。

    对BR/EDR和LE RF来说,还会接收来自Baseband的控制命令来控制RF频率的选择和timing。

    AMP PHY使用802.11(WIFI)的规范,本文不再详细介绍,后续有关AMP的内容,也不过多涉及。

    2)Link Controller & Baseband resource management

    Link Controller和Baseband resource management组成了蓝牙的基带(baseband)。

    Link Controller负责链路控制,主要是根据当前物理channel的参数、逻辑channel的参数、逻辑transport的参数将数据payload组装成bluetooth packet。另外,通过Link Control Protocol(对LE来说是LL Layer Protocol),可以实现流控、ack、重传等机制。

    Baseband resource management,主要用于管理RF资源。

    3)Link Manager

    Link Manager主要负责创建、修改、释放蓝牙逻辑连接(Logical Link),同时也负责维护蓝牙设备之间物理连接(Physical Link)的参数。它的功能主要是通过Link Management Protocol(LMP,for BR/EDR)和Link Layer Protocol(LL,for LE)完成。

    4)Device Manager

    Device Manager主要负责控制蓝牙设备的通用行为(蓝牙数据传输除外的行为),主要是:

    搜索附近的蓝牙设备

    连接到其他的蓝牙设备

    使得本地的蓝牙设备connectable和discoverable

    控制本地蓝牙设备的属性(例如本地蓝牙设备的名字、link key等)

    5)HCI(Host Controller Interface)

    我们在“蓝牙协议分析(1)_基本概念”介绍过,蓝牙系统分为Bluetooth Controller和Bluetooth Host两个大的block。它们之间通过HCI接口以HCI协议进行通信。

    6)L2CAP

    L2CAP位于Bluetooth Host中,包括两个子模块:

    Channel Manager主要负责创建、管理、释放L2CAP channel。

    L2CAP Resource Manager负责统一管理、调度L2CAP channel上传递的PDU(Packet Data Unit),以确保那些高QoS的packet可以获得对物理信道的控制权。

    7)SMP(Security Manager Protocol)

    SMP是一个点对点的协议,基于专用的L2CAP channel,用于生成加密(encryption)和识别(identity)用的密匙(keys)。

    8)SDP(Service Discover Protocol)

    SDP也是一个点对点的协议,基于专用的L2CAP channel,用于发现其它蓝牙设备能提供哪些profile以及这些profile有何特性。在了解清楚了其他蓝牙设备的profile以及特性之后,本蓝牙设备可以发起对自己感兴趣的蓝牙profile的连接动作。

    9)AMP Manager

    基于L2CAP channel,和对端的AMP manager交互,用于发现对方是否具备AMP功能,以及收集用于建立AMP物理链路的信息。

    10)GAP(Generic Access Profile)

    GAP是一个基础的蓝牙profile,用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。

    GAP 是所有其它应用模型的基础,它定义了在 Bluetooth 设备间建立基带链路的通用方法。还定义了一些通用的操作,这些操作可供引用 GAP 的应用模型以及实施多个应用模型的设备使用。GAP 确保了两个 蓝牙设备(不管制造商和应用程序)可以通过 Bluetooth 技术交换信息,以发现彼此支持的应用程序。

    4. 参考文档

    [1]: Core_v4.2.pdf

    [2]: https://www.bluetooth.org/en-us/Documents/Bluetooth4-2FAQ.pdf

    [3]: https://www.bluetooth.com/specifications/adopted-specifications

    展开全文
  • 蓝牙协议结构分为底层硬件模块、中间协议层和高端应用层等3个部分。蓝牙协议允许遵循该规范的所有 应用能够进行互连互通。为了实现互连互通,远程设备上对应的应用程序必须以同一类协议栈运行。每一 协议栈都使用...
  • 声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。...蓝牙核心技术概述(三): 蓝牙协议规范...

    声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于xubin341719的蓝牙系列文章,同时还有其他网上作者的资料。由于有些文章只做参考或统计不足,如涉及版权请在下面留言~。同时我也在博客分类中新建一个蓝牙通信分类,用来研究分享蓝牙相关技术

    蓝牙核心技术概述(一):蓝牙概述
    蓝牙核心技术概述(二):蓝牙使用场景
    蓝牙核心技术概述(三): 蓝牙协议规范(射频、基带链路控制、链路管理)
    蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)
    蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)

    有道笔记分享链接:http://note.youdao.com/share/?id=950d00cefa9b7fd3c559eec349805b24&type=note

    下面是摘抄笔记内容:

    蓝牙核心技术概述(一):蓝牙概述
    蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。
         Bluetooth的系统构成
    在这里插入图片描述
    1、无线射频单元(Radio):负责数据和语音的发送和接收,特点是短距离、低功耗。蓝牙天线一般体积小、重量轻,属于微带天线。
    2、基带或链路控制单元(LinkController):进行射频信号与数字或语音信号的相互转化,实现基带协议和其它的底层连接规程。
    3、链路管理单元(LinkManager):负责管理蓝牙设备之间的通信,实现链路的建立、验证、链路配置等操作。
    4、蓝牙软件协议实现:如上图紫色部分,这个后面我们做详细说明。

    在这里插入图片描述低耗电蓝牙相关规范

    (二)蓝牙协议组成

    2.1 蓝牙协议架构
    在这里插入图片描述
    蓝牙协议体系中的协议按SIG的关注程度分为四层:

    1.核心协议:BaseBand、LMP、L2CAP、SDP;
    2.电缆替代协议:RFCOMM;
    3.电话传送控制协议:TCS-Binary、AT命令集;
    4.选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。
    除上述协议层外,规范还定义了主机控制器接口(HCI),它为基带控制器、连接管理器、硬件状态和控制寄存器提供命令接口。在图1中,HCI位于L2CAP的下层,但HCI也可位于L2CAP上层。

    蓝牙核心协议由SIG制定的蓝牙专用协议组成。绝大部分蓝牙设备都需要核心协议(加上无线部分),而其他协议则根据应用的需要而定。总之,电缆替代协议、电话控制协议和被采用的协议在核心协议基础上构成了面向应用的协议。
    在这里插入图片描述
    蓝牙协议栈允许采用多种方法,包括 RFCOMM 和 Object Exchange (OBEX ), 在设备之间发送和接收文件。如果想发送和接收流数据(而且想采用传统的串口应用程序,并给它加上蓝牙支持),那么 RFCOMM 更好。反过来,如果想发送对象数据以及关于负载的上下文和元数据,则 OBEX 最好。
    蓝牙应用程序活动图,如下:
    在这里插入图片描述

    2.1.1 串口仿真RFCOMM介绍

    蓝牙—RFCOMM协议

    找到服务,RFCOMM是通过不同的频道(channel)来提供不同的Profile的,所以需要找到要用的服务在设备上的哪个频道上,这是通过同一个软件包里的sdptool来完成的,就是SDP,服务发现协议

    2.2 蓝牙profile

    2.2.1 蓝牙profile概述
    参考 对蓝牙profile的理解

    从3.0版本开始(据说2.1也是支持的?TBD),蓝牙才开始支持BluetoothProfile。BluetoothProfile是蓝牙设备间数据通信的无线接口规范。想要使用蓝牙无线技术,设备必须能够翻译特定蓝牙配置文件,配置文件定义了可能的应用.

    蓝牙配置文件表达了一般行为,蓝牙设备可以通过这些行为与其他设备进行通信.
    蓝牙技术定义了广泛的配置文件,描述了许多不同类型的使用安全.按蓝牙规格中提供的指导,开发商可创建应用程序以用来与其他符合蓝牙规格的设备协同工作.在最低限度下,各配置文件规格应包含下列主题的相关信息.
    ① 与其他配置文件的相关性
    ② 建议的用户界面格式
    ③ 配置文件使用的蓝牙协议堆栈的特定部分.
    为执行其任务,每个配置文件都使用堆栈各层上的特定选项和参数.若需要,也可包括必需的服务记录概要。ProfilesAPI层则分别对Audio、Data、Control等提供了不同的模块。目前已规范有四大类、十三种协议规格。
    

    Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Profile理解为连接层或者应用层协议。

    ❤ 常用的profile介绍请参考“蓝牙Profile的概念和常见种类”,几种种最基本的配置文件为:

    1.通用访问配置文件(Generic Access Profile, GAP)

    GAP是所有其他配置文件的基础,它定义了在蓝牙设备间建立基带链路的通用方法.除此之外,GAP还定义了下列内容:

    ① 必须在所有蓝牙设备中实施的功能
      ② 发现和链接设备的通用步骤
      ③ 基本用户界面术语.

    GAP确保了应用程序和设备间的高度互操作性,还允许开发人员利用现有的定义更加容易地定义新的配置文件.GAP处理未连接的两个设备间的发现和建立连接过程.此配置文件定义了一些通用的操作,这些操作可供引用GAP的配置文件,以及实施多个配置文件的设备使用.GAP确保了两个蓝牙设备可通过蓝牙技术交换信息,以发现彼此支持的应用程序.不符合任何其他蓝牙配置文件的蓝牙设备必须与GAP符合以确保基本的互操作性和共存.

    2.服务发现应用配置文件(Service Discovery Application Profile, SDAP)

    SDAP描述了应用程序如何使用SDP发现远程设备上的服务.由于GAP的要求,任何蓝牙设备都应能够连接至其他蓝牙设备.基于此,SDAP要求任何应用程序都应当能够发现它要连接的其他蓝牙设备上的可用服务.此配置文件可承担搜索已知和特定服务及一般的任务.SDAP涉及了称为“服务发现用户应用程序”的一个应用程序,这是蓝牙设备查找服务所必需的.此应用程序可与向/从其他蓝牙设备发送/接收服务查询的SDP相接.SDAP依赖于GAP,并可以重新使用部分GAP.

    3.串行端口配置文件(Serial Port Profile, SPP)

    SPP定义了如何设置虚拟串行端口及如何连接两个蓝牙设备.SPP基于ETSI TS 07.10规格,使用RFCOMM协议提供串行商品仿真.SPP提供了以无线方式替代现有的RS-232串行通信应用程序和控制信号的方法.SPP为DUN,FAX,HSP和LAN配置文件提供了基础.此配置文件可以支持最高128kb/s的数据率.SPP依赖于GAP.

    4.通用对象交换配置文件(Generic Object Exchange Profile, GOEP)

    GOEP可用于将对象从一个设备传输到另一个设备.对象可以是任意的.如:图片,文档,名片等.此配置文件定义了两个角色:提供拉提或推送对象位置的服务器及启动操作的客户端.使用GOEP的应用程序假定链路和信道已按GAP的定义建立.GOEP依赖于串行端口配置文件.
    GOEP为使用OBEX协议的其他配置文件提供了通用蓝图,并为设备定义了客户端和服务器角色.对于所有的OBEX事务.GOEP规定应由客户端启动所有事务.但是此配置文件并没有描述应用程序就如何定义要交换的对象或如何实施交换.这些细节留给属于GOEP的配置文件.即OPP,FTP和SYNC去完成.通常使用此配置文件的蓝牙设备为笔记本电脑,PDA,手机及智能电话.

    注意:蓝牙1.1版本规范所有蓝牙设备的最小实现必须支持通用访问配置文件,服务发现应用配置文件和串行端口配置文件.

    在两台电脑或者Labtop之间就可以建立这种连接,如下图所示:
    在这里插入图片描述
    SPP是基于RFCOMM的,spp 协议处于rfcomm的上层,spp的应用需走rfcomm层。如果你使用RFCOMM能够实现,那么也就不需要使用SPP,而却速度还会比SPP来做快,因为省略了采用profile的一些数据包头等。不过,还是推荐采用SPP来做,兼容性有保证,这也是为什么蓝牙本质上数据和语音的传送却出现HFP,HSP,SPP,OPP等诸多具体应用profile的原因。

    Bluez SPP实现代码分析

    2.2.2 蓝牙profile框架

    每个attribute属性被UUID(通用唯一标识符)唯一标识 ,UUID是标准128-bit格式的ID用来唯一标识信息。attributes 被 ATT 格式化characteristics和services形式进行传送。

    特征(Characteristics)— 一个characteristics包含一个单独的value值和0 –n个用来描述characteristic 值(value)的descriptors。一个characteristics可以被认为是一种类型的,类似于一个类。

    描述符(descriptor)—descriptor是被定义的attributes,用来描述一个characteristic的值。例如,一个descriptor可以指定一个人类可读的描述中,在可接受的范围里characteristic值,或者是测量单位,用来明确characteristic的值。

    服务(service)—service是characteristic的集合。例如,你可以有一个所谓的“Heart RateMonitor”service,其中包括characteristic,如“heart rate measurement ”。你可以在 bluetooth.org找到关于一系列基于GATT的profile和service。
    在这里插入图片描述
    如上图所示:蓝牙设备可以包括多个Profile,一个Profile中有多个Service,一个Service中有多个Characteristic,一个Characteristic中包括一个value和多个Descriptor。

    profile框架和android低功耗蓝牙管理和使用简介

    2.3 蓝牙4.0和4.1

    它们有什么差别?全面解析蓝牙技术4.0和4.1标准

    ♪ 蓝牙4.0实际是个三位一体的蓝牙技术,它将传统蓝牙、低功耗蓝牙和高速蓝牙技术融合在一起,这三个规格可以组合或者单独使用。也就是说 BLE是蓝牙4.0增加的,之前没有?(TBD)
    蓝牙4.0专门面向对成本和功耗都有较高要求的无线方案,其主打特性就是省电、省电、省电。极低的运行和待机功耗使得一粒纽扣电池甚至可连续工作一年之久。它有低功耗、经典、高速三种协议模式。其中:高速蓝牙主攻数据交换与传输;经典蓝牙则以信息沟通、设备连接为重点;低功耗蓝牙以不需占用太多带宽的设备连接为主。这三种协议规范能够互相组合搭配,从而适应更广泛的应用模式。正因为有了三种可以互相组合搭配的协议,蓝牙4.0因此成为唯一一个综合协议规范。它有着极低的运行和待机功耗。此外,低成本和跨厂商互操作性,3毫秒低延迟、AES-128加密等诸多特色,可以用于计步器、心律监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。

    ♪ 蓝牙4.1主打IOT(Internet Of Things全联网),最新的蓝牙4.1标准是个很有前途的技术,其智能、低功耗、高传输速度、连接简单的特性将适合用在许多新兴设备上。
    蓝牙4.1设备可以同时作为发射方和接受方,并且可以连接到多个设备上。举个例子,智能手表可以作为发射方向手机发射身体健康指数,同时作为接受方连接到蓝牙耳机、手环或其他设备上。蓝牙4.1使得批量数据可以以更高的速率传输,当然这并不意味着可以用蓝牙高速传输流媒体视频,这一改进的主要针对的还是刚刚兴起的可穿戴设备。例如已经比较常见的健康手环,其发送出的数据流并不大,通过蓝牙4.1能够更快速地将跑步、游泳、骑车过程中收集到。因为新标准加入了对IPv6专用通道联机的支持,通过IPv6连接到网络,实现与Wi-Fi相同的功能,解决可穿戴设备上网不易的问题。

    蓝牙4.0和蓝牙4.1的比较
    在这里插入图片描述

    2.3.1 蓝牙4.0低功耗(BLE)

    TI低功耗蓝牙(BLE)介绍

    ① 低功耗蓝牙Bluetooth Low Energy(BLE)是蓝牙4.0增加的。(?TBD) ,苹果系列都支持4.0.
    ② Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics。与传统蓝牙(ClassicBluetooth)不同,蓝牙低功耗(BLE)的目的是提供更显著的低功耗。这使得Android应用程序可以和具有低功耗的要求BLE设备,如接近传感器,心脏速率监视器,健身设备等进行通信。
    ③ BLE低功耗蓝牙软件有2个主要组成: OSAL操作系统抽象层和 HAL硬件抽象层,多个Task任务和事件在OSAL管理下工作,而每个任务和事件又包括3个组成:BLE 协议栈,profiles和应用程序。

    BLE蓝牙协议栈结构
    在这里插入图片描述
             附图1 BLE蓝牙协议栈结构图

    分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有profile(姑且称为剧本吧,用来定义设备或组件的角色)和应用都建构在GAP或GATT之上。下面由结构图的底层组件开始介绍。
    在这里插入图片描述

    附图 2 BLE低功耗蓝牙系统架构图,图中的Task用附图1BLE蓝牙协议栈结构图来描述

    通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被称为“属性(attributes)”的数据片。目前所有的低功耗应用 profile都是基于GATT。

    蓝牙SIG定义了许多profile用于低功耗设备。Profile(配置文件)是一个规范,规范了设备如何工作在一个特定的应用场景。注意:一个设备可以实现多个profile。例如,一个设备可以包含一个心脏监测仪和电池电平检测器。

    主从机连接建立过程:
    在这里插入图片描述

    2.3.2 蓝牙4.0(BLE)主从通信透传模块

    低功耗蓝牙模块主透传协议是针对低功耗蓝牙模块从透传协议设计的,通过本协议模块可替代手机设备与从透传协议模块连接,实现透传功能或直驱控制功能。此协议模块可用作从透传协议模块开发过程中的辅助工具。
    
    BLE主透传协议模块(以下简称MTTM)可以工作在透传模式(TTM)或指令模式(CM)。
    
    MTTM上电启动后,处于待机模式(SBM),此时处于空闲状态,无睡眠,需要用户通过AT指令控制模块连接从设备。在成功与从设备建立链接后,MTTM会自动查找从设备的透传通道,如果从设备属于BLE从透传协议模块(以下简称STTM),MTTM默认进入透传模式,否则默认进入指令模式。
    

    透传模式下,用户CPU可以通过模块的通用串口与STTM进行双向通讯。从MTTM串口输入的数据将转发到STTM,并从STTM的串口输出;从STTM输入的数据将转发到MTTM,并从MTTM的串口输出,从而实现透明传输功能,用户数据的具体含义由上层应用程序自行定义。

    在这里插入图片描述

    透传中数据的格式也是profile,或蓝牙标准profile或自定义simple profile。基本结构依然是:

    1、profile
      profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。
    2、service
      service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据
    3、characteristic
      characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以 理解为一个标签,通过这个标签可以获取或者写入想要的内容。
    4、UUID
      UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识

    每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。
    实际产品中,每个蓝牙4.0的设备都是通过服务和特征来展示自己的,服务和特征都是用UUID来唯一标识的。一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征。特征是与外界交互的最小单位。蓝牙设备硬件厂商通常都会提供他们的设备里面各个服务(service)和特征(characteristics)的功能,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等。比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来与收发数据等。

    ?4.0中profile的存在是干嘛用的呢,只是一种组织形式存在?
    服务和特征都是用UUID来唯一标识的,UUID的概念如果不清楚请自行google,国际蓝牙组织为一些很典型的设备(比如测量心跳和血压的设备)规定了标准的service UUID(特征的UUID比较多,这里就不列举了)

    4.0 BLE数据传输可参考下述系列:
    蓝牙4.0 BLE 数据传输 (一)

    (三)Android Bluetooth 架构
    1、面向库的架构视图

    在这里插入图片描述

    2、面向进程的架构视图

    在这里插入图片描述

    参考 蓝牙4.0 For IOS

    iOS 有两个框架支持蓝牙与外设连接。

    一个是 ExternalAccessory。从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Accessory需要拿到苹果公司的MFI认证。

    另一个框架则是本文要介绍的CoreBluetooth,在蓝牙4.0出来之后(注意,硬件上要4s以上,系统要ios6以上才能支持4.0),苹果开放了BLE通道,专门用于与BLE设备通讯(因为它的API都是基于BLE的)。这个不需要MFI,并且现在很多蓝牙设备都支持4.0,所以也是在IOS比较推荐的一种开发方法。现CoreBluetooth在的开发几乎全部基于该框架,本节只介绍CoreBluetooth。

    1,CoreBluetooth介绍

    CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心。对应他们分别有一组相关的API和类,如下图所示:
    在这里插入图片描述

    如果你要编程的设备是手机的central,那么你大部分用到peripheral API。反之亦然,设备是peripheral,iphone手机是central,所以将大部分使用central API。使用peripheral编程的例子也有很多,比如像用一个ipad和一个iphone通讯,ipad可以认为是central,iphone端是peripheral,这种情况下在iphone端就要使用上图右边部分的类来开发了。

    作为一个中心(central)要实现完整的通讯,一般要经过这样几个步骤:

    (1)建立中心角色—
    (2)扫描外设(discover)(通过接收从设备广播来扫描、发现设备,获得peripheral ID)—
      a, 如果数据中已经和某些蓝牙设备绑定,可以使用BluetoothAdapter.getBondedDevices();方法获得已经绑定的蓝牙设备列表。通过指定特定的peripheral的UUID,central只会discover这个特定的设备。
      b, 搜索周围的蓝牙设备受用BluetoothAdapter.startDiscovery()方法
      c, 搜索到的蓝牙设备都是通过广播返回,so…。需要注册广播接收器来获得已经搜索到的蓝牙设备
    (3)连接外设(connect)(根据peripheral ID连接指定的外设)—
    (4)扫描外设中的服务和特征(discover)(一个设备里的服务和特征往往比较多,一般会在发现服务和特征的回调里通过service、characteristic UUID去匹配我们关心那些)—
    (5)与外设做数据交互(explore and interact)—
    (6)断开连接(disconnect)。

    2, 设备ID描述DID

    每个与苹果设备兼容的蓝牙接入都必须:支持蓝牙设备ID描述,1.3版本或者更高;使用蓝牙SIG分配的Assigned Numbers文档中的公司标识作为他的Vendor ID值,也就是VID,如果生产商没有蓝牙SIG公司标识,那么蓝牙HID描述接入可能会使用USB Implementers Forum分配的VID;使用他的VID值来标识最终的产品生产商;使用版本值来唯一标识软件的版本;使用ProductID值唯一标识产品。Device ID描述使得苹果产品能够识别远程的蓝牙接入,该信息可以用来在与远程接入交互的时候连接蓝牙描述间的交替互操作。因此Device ID中的信息记录非常重要。
    
    理想情况下,这两个设备应该有不同的产品ID。但是,当他们拥有完全相同的硬件、软件和特性的时候拥有相同的ProductID也是可以允许的。如果他们有任何的不同,就都应该有不同的Product ID。
    

    3,IOS的蓝牙低功耗

    蓝牙4.0标准引入了蓝牙低功耗,一种针对有限电池资源的蓝牙接入的无线技术。如果支持蓝牙低功耗的话,接入点需要支持下面的这些特性。(这里更多的是蓝牙芯片商要做的事情)
    

    角色
    蓝牙接入需要实现蓝牙4.0标准中定义的外围角色

    广告通道
    蓝牙接入需要在所有三个广告通道中针对每个广告事件进行广告

    广告PDU
    蓝牙接入需要使用如下广告PDU中的一个:ADV_IND;ADV_NOCONN_IND;ADV_SCAN_IND。其中ADV_DIRECT_IND不推荐使用。

    广告数据
    由蓝牙接入发送的广告信息应该至少包含蓝牙4.0标准中包含的如下信息:Flags;TX Power Level;Local Name;Services。如果需要降低电量消耗或者并不是所有的广告数据都适合放入到广告PDU中的时候,接入点可能将Local Name和TX Power Level数据方知道SCAN_RSP PDU中。需要注意的是根据它的状态,苹果产品可能不会总是执行激活扫描。主要的服务应该总是放在广告PDU中进行广告。次要的服务不应该进行广告。对于接入点不重要的服务信息可能会因为广告PDU中的空间不足而被忽略。广告数据和SCAN_RSP PDU中的扫描响应数据应该遵循蓝牙4.0标准中的格式。

    广告间隔
    蓝牙接入的广告间隔应该慎重考虑,因为他会影响到发现和连接的性能。对于低功耗的接入,电池资源也应该被考虑在内。为了能够被苹果产品发现,蓝牙接入应该首先使用推荐的广告间隔20ms,并持续至少30秒。如果在这30秒内没有被发现,那么接入点可能会选择节省电池电量然后增加广告间隔,苹果推荐使用如下依次延长的事件间隔来发现蓝牙接入点:645 ms;768 ms;961 ms;1065 ms;1294 ms

    连接参数
    蓝牙接入负责用来LE连接的连接参数。接入点需要请求合适的连接参数来在合适的时候发送一个L2CAP连接参数跟新请求。如果他没有符合如下规则,那么连接参数请求可能会被拒绝:Interval Max * (Slave Latency + 1) ≤ 2 seconds;Interval Min ≥ 20 ms;Interval Min + 20 ms ≤ Interval Max;Slave Latency ≤ 4;connSupervisionTimeout ≤ 6 seconds以及Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout。苹果设备不会读取或者使用Peripheral Preferred Connection Parameters特性中的参数。

    隐私
    蓝牙接入应该在任何情况下都能够满足Resovable Private Address。因为私隐方面的考虑,苹果设备将会使用蓝牙4.0标准中定义的随机设备地址。

    授权
    蓝牙接入不需要请求特殊的授权,如配对、认证或加密等来发现服务和特性。只有在获取特性值或者描述值的时候可能会需要特殊的授权。9

    配对
    蓝牙接入不应该请求配对。如果处于安全考虑,接入点需要与Central建立绑定关系,外围可以使用Insufficient Authentication错误码在必要的时候拒绝ATT请求。因此苹果设备可能会需要按照既定的安流程程来执行过程。配对可能会需要基于苹果产品的用户认证。

    服务
    通用接入描述服务:蓝牙接入应该实现按照蓝牙标准4.0中的Device Name特性

    通用属性描述服务:只有当接入有能力在生命周期内更改他的服务的时候,该接入点才需要实现Service Changed特性。苹果产品可以使用Service Changed服务特性来决定它是否可以使用之前读取的或者缓存的来自设备的信息。

    设备信息服务:蓝牙接入应该实现设备信息服务。服务的UUID不应该包含在广告数据当中。如下的特性需要被支持:Manufacturer Name String;Model Number String;Firmware Revision String;Software Revision String

    4,IOS APP开发 的蓝牙操纵API

    手机APP要想获得蓝牙设备的一些额外的信息如电量或者操作蓝牙设备,必须通过IOS API。那么IOS底层必然有某种方式来与蓝牙设备交互。 那么电量通过什么来读写呢?自定义 service characteristic?
    

    任何免提的蓝牙耳机都可以在iOS设备的状态栏中显示一个用来标识他电池电量的图标。这个特性被所有的iOS设备所支持,包括iPhone、iPod和iPad。耳机的蓝牙知识通过两个iOS蓝牙HFP AT命令:HFP Command AT+XAPL

    HFP命令AT+XAPL
    描述:允许通过耳机自定义AT命令
    发起者:耳机
    格式:AT+XAPL=[vendorID]-[productID]-[version],[features]
    参数:
    vendorID: 标识生产商的vendor ID的十六进制表示,但是没有0x前缀
    productID: 标识生产生的product ID的十六进制表示,但是没有0x前缀
    version: 软件的版本
    features: 用10进制标识的位标识:
    1 = 耳机支持电池电量报告
    2 = 耳机暂停或者正在充电
    其他值保留
    例子: AT+XAPL=ABCD-1234-0100,3
    响应: +XAPL=iPhone,[features]
    HFP命令AT+IPHONEACCEV
    描述:报告耳机的状态变更
    发起者:耳机
    格式:AT+IPHONEACCEV=[Number of key/value pairs ],[key1 ],[val1 ],[key2 ],[val2 ],…
    参数:
    Number of key/value pairs : 接下来参数的数量
    key: 被报告状态变化的类型
    1 = 电量等级
    2 = 暂停状态
    val: 更改的值
    Battery events:0-9之间数字的字符串 A string value between ‘0’ and ‘9’.
    Dock state: 0 = undocked, 1 = docked.
    Example: AT+IPHONEACCEV=1,1,3

    (五)硬件接口

    一般蓝牙芯片通过UART、USB、SDIO、I2S、PcCard和主控芯片通信。如下图所示,通过UART和主控芯片通信。
    在这里插入图片描述

    在这里插入图片描述

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 原文地址:http://www.cnblogs.com/zjutlitao/p/4742428.html 声明:这篇文章是楼主beautifulzzzz学习网上关于蓝牙的相关知识的笔记,其中比较多的受益于...
  • 蓝牙协议

    2014-01-07 10:02:12
    什么是蓝牙  一、蓝牙名字的由来  蓝牙的名字来源于10世纪丹麦国王Harald Blatand-英译为Harold Bluetooth。在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,在经过一夜关于...
  • 蓝牙协议(1)-- 基本协议

    万次阅读 多人点赞 2018-11-30 11:56:36
    蓝牙协议分析(1)基本概念  蓝牙4.1,是一个大杂烩:BR/EDR沿用旧的蓝牙规范;LE抄袭802.15.4;... 蓝牙协议包括两种技术:经典蓝牙(简称BT)和低功耗蓝牙(简称BLE)。这两种技术,都包括搜...
  • 主要参考资料的来源:xubin341719[下面是该前辈的BT系列文章]下载连接:Bluetooth PROFILE SPECIFICATIONS(基本涵盖所有蓝牙协议)、buletooth core 2.1-4.0 SPECIFICATION(三蓝牙版本的核心协议v2.1\v3...
  • 蓝牙协议分析(2)_协议架构 作者:wowo 发布于:2016-1-14 22:20 分类:蓝牙 ...蓝牙协议是通信协议的一种,为了把复杂问题简单化,任何通信协议都具有层次性,特点如下: 从下到上分层,通过
  • 与开放系统互联(OSI)模型一样,蓝牙技术的协议体系也采用了分层结构,从底层到高层形成了蓝牙协议栈,各层协议定义了所完成的功能和使用数据分组格式,以保证蓝牙产品间的互操作性。 一、首先来看一下蓝牙的架构...
  • 蓝牙协议分析1

    2017-03-21 11:25:55
    蓝牙协议分析(1)_基本概念 作者:wowo 发布于:2014-5-23 18:15 分类:蓝牙 1. 前言 自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月。从最初的Bluetooth V1.0,到Bluetooth V4.0(最新的为V4.1,2013年底...
  • 低功耗蓝牙协议栈基础知识

    千次阅读 2017-02-22 18:56:46
    低功耗蓝牙协议栈包含两部分共8层:主机(Host)和控制器(Controller)。 控制器部分包括: 物理层(Physical Layer) 链路层(Link Layer) 主机控制接口层(Host Controller Interface) 主机部分包括: L2CAP ...
  • 蓝牙4.0协议详解

    千次阅读 2018-07-31 14:52:59
    二、蓝牙4.0BLE协议协议栈的关系 三、如何使用蓝牙4.0BLE协议栈 四、深入理解蓝牙4.0BLE协议协议栈概述 协议栈基础 详细介绍如下: 五、GATT定义了若干在GATT服务器和客户端之间的通信的子过程: 六、...
  • 蓝牙协议体系结构

    2020-11-20 13:33:57
    蓝牙技术特点 工作频段:2.4GHz的工科医(ISM)频段,无需申请许可证。大多数国家使用79个频点,载频为(2402+k)MHz(k=0,1, 2…78),载频间隔1MHz。采用TDD时分双工方式。 传输速率:1Mb/s(V2.0以上版本吗) ...
  • 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍 作者:wowo 发布于:2016-3-12 22:32 分类:蓝牙 1. 前言 通过“蓝牙协议分析(2)_协议架构”的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,198
精华内容 2,479
关键字:

蓝牙协议的技术特点