• BLE蓝牙学习笔记总结


    一、物理层PHY:

    频率:    2400MHz~2483.5MHz

    通道:    一共 40 个通道,37个自适应自动调频数据通道 3个广播通道:37 38 39

    通道带宽:  BLE  2M ,经典蓝牙 1M

    比特率:   1Mbit/s(1Mbps)

    发射功率:  也就是最小发送功率不能低于-20dBm即10uW,最大的发送功率不能高于+10dBm即10mW

    二、链路层LL

    2.1五种状态

    1.  就绪态(Standby)         (上电,都进入就绪态)
    2.  广播态(Advertising)    (一般是从机广播) 
    3.  扫描态(Scanning)   (一般是主机主动扫描,从机被动扫描)
    4.  发起态(Initiating)     (只能是将要作为主机方发起连接请求)
    5.  连接态(Connection) (分为主机和从机)

    注意:发起态发送连接请求后就会进入数据通道,不管和对方有没有真正建立连接,都假设已经建立,在数据通道过程中进行数据包发送,如果能应答说明连接建立,如果发送数据包应答超时,那么连接失败发起态进入就绪态

    2.2状态转换过程

     

     

    2.3通道选择

    跳频技术:主从机连接后在数据通道传输数据,频率通道部固定,随时切换通道

    如图数据包:

    三、GAP介绍:

    3.1角色介绍

    (1)广播者:Broadcaster Role,设备正在发送advertising events。

    (2) 观察者:Observer Role,设备正在接收advertising events。

    (3)外围设备:Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色)。

    (4)中心设备:Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

    3.2模式过程

    1. 广播模式和观察过程
    2. 发现模式和过程
    3. 可连接模式和过程
    4. 可绑定模式和过程
    5. 周期性广播模式和过程

    3.2.1广播模式和观察过程

    该模式和过程允许两个设备通过广播事件(advertising events)以单向无连接的方式进行通信。

    3.2.2发现模式和过程

    一个设备要么处于不可发现模式,要么处于发现模式。发现模式分为限制发现模式和通用发现模式

    1. 不可发现模式是不会被其它设备发现的,这种模式可广播自己的数据
    2. 通用发现模式:一直可发现
    3. 受限发现模式:从可发现模式开始,一定时间后没有建立连接将进入不可发现状态(时间可以设置)

    3.2.3可连接模式和过程

    连接模式和过程,包括3种模式和5种过程。

    (1)3种连接模式

    非定向连接模式是最普遍的连接模式

    (2)5种连接过程

     3.2.4可绑定模式和过程

    绑定模式和过程。绑定,即设备双方通过交换和存储安全和身份信息,从而建立可信任的关系。

    1、Non-Bondable Mode:该模式不接受绑定请求。
    ① 中心设备和外围设备都需要支持该模式。
    ② 若设备不支持配对,则认为该设备不可绑定。
    ③ 若设备支持安全管理配对,但Bonding_Flags设置为No Bonding,则不需要交换和存储绑定信息。

    2、Bondable Mode
    ① 在绑定过程中,Bonding_Flags设置为Bonding。

    3、Bonding Procedure
    ① 外围设备和中心设备可支持该过程,广播者和观察者不支持该过程

    3.2.5周期性广播模式和过程

    周期性广播模式和过程,该模式和过程允许两个和多个设备使用扩展性广播事件或周期性广播事件以非定向无连接的方式进行通信

    Periodic Advertising Synchronizability Mode:         用于发送周期性广播事件相关的同步信息。
    Periodic Advertising Mode:                 利用周期广播同步信息中的跳频序列周期性地发送广播事件。
    Periodic Advertising Synchronization Establishment Procedure:该过程用于接收周期性广播同步信息和周期性广播。

    ① 该设备需要扫描携带同步信息的不可连接、不可扫描广播事件;
    ② 获得周期性广播信息后的设备,可利用跳频序列周期性地监听周期广播事件。

    四、属性GATT:

     4.1角色

    1. 服务器:提供数据的蓝牙设备   (一般是下位机做服务器,为上位机服务上报数据)
    2. 客户端:需求数据的蓝牙设备    (一般是上位机做客户端,向下位机发起读写数据请求)

    4.2属性组成

    4.2.1句柄handle

    1. 意义:就是索引,属性的索引,独特唯一,类似身份证号码,一般应用编程中通过句柄去读写服务器数据
    2. 范围:0x0001-0xFFFF

    4.2.2服务类型type UUID

    UUID分类如下:

    1. 0x1800~0x26FF用于服务类UUID    (包含在首要服务的值里面,通过得到首要服务的值,就知道服务类型,例如心率值服务0X180D)
    2. 0x2700~0x27FF用于标识计量单位  
    3. 0x2800~0x28FF用于区分属性类型    (一般是服务类型声明,例如首要服务0x2800,特征声明0x2803)
    4. 0x2900~0x29FF用于特性描述
    5. 0x2A00~0x7FFF用于区分特性类型

    4.2.3属性值

    1. 意义:这才是我们正在想要的数据
    2. 范围:0-512字节

    4.2.4权限

    可读,可写,可读且可写等等.........

    cc254x TI蓝牙协议栈属性定义如下

    4.3GATT服务

    说明:Profile中有多个Server组成,而Server的由0或多个《Include》和至少一个《Characteristic》组成

    整体框架如下:

     

    例如一个心率计的部分服务如

    图中有展示了心率计的 1、心率服务,2、电池服务;因此可以提供给服务器心率值服务和电池服务,每一个服务都是以UUID 0X2800 (首要服务,即一个服务声明)开始,每一个特征以UUID 0X2803(特征声明)开始

     图中心率服务包含了两个特征,电池服务包含一个特征值

     

     以TI cc254x 为例 具体的属性表如下

    五、命令ATT

    ATT命令就是访问属性的一套操作,

    5.1通信方式

     一般indication方式用的比较多:一般用于下位机定时给上位机通知(上报数据,如,温度,湿度,血压,心率),或者透传数据

    说明:Request和Response是一对,Indication和Confirmation是一对,在没有得到对方的应答或者确认信息之前是不能进行第2包的请求或者指示数据。命令和通知因为没有应答信息,所以可以在任何时候进行包传输。

    5.2按类型值    查找请求应答(Find By Type Value RequestResponse)

    按类型值(就是首要服务里面的UUID值比如0x180D心率服务)查找请求和回复可以根据给定的类型与数值查找相应的属性。该请求包含有两个句柄:起始句柄和结束句柄,规定查找范围。对于这一范围类的所有属性,如果和请求中所指定的类型和数值一样,那么这个属性就要在响应中返回(返回的是对应句柄值)。

    这个命令主要用来查找特定的首要服务。发送请求时,客户端将其中的类型设置为首要服务,并将数值设为该服务的UUID。随后的响应将包含查找到的各个首要服务的实例的句柄范围。某些特殊的服务只会在服务器中实现一次,针对它们的响应只会包含一个句柄范围

    5.2.1包格式

     5.2.2通信示意图

    5.2.3抓包分析

     

     5.3按类型   读请求应答(Read By Type RequestResponse) 

    这个命令能在句柄范围内读取某个属性值。当客户端仅知道属性的类型而非句柄时可以使用该请求。请求包含有起始、结束句柄和需要读取的属性的类型。响应将给出符合的句柄和数值。

    这个请求用于搜索被包含的服务,并通过特性类型来发现服务中的所有的特性。它也被用来读取已知类型的特性值

    5.3.1包格式

     5.3.2通信示意图

    5.3.3空中包分析

     5.4读请求应答(Read RequestResponse)  按句柄handle读

    读取请求是属性协议总最简单的请求。该请求包含一个句柄,响应将返回该句柄对应的属性值。只有在客户端已知属性句柄的情况下,才能使用该请求读取属性值

    5.4.1包格式

    5.4.2通信示意图

     

    5.4.3包数据分析

     

     5.5按组类型  读取请求应答(Read By Group Type RequestResponse)

    它和按类型读取请求类似,也包含有一个句柄范围,读取时将其视为一个属性的类型来处理,只不过属性的类型必须为分组属性。其响应包含所读取的属性句柄、属性分组中最后一个属性以及属性的数值。

    这意味着,如果分组类型是首要服务,它将返回所有首要服务声明的属性句柄、该首要服务中最后一个属性以及首要服务声明的数值。因此,可以仅凭单个请求来发现设备上的所有首要服务、与之关联的属性句柄的范围以及这些服务的类型。

    5.6写请求应答(Write RequestResponse) 按句柄写

     

    5.7写命令

    写入命令类似于写请求,区别是写入命令没有响应。写入命令包含要写入的属性的句柄和要写入的数值。 

    当无需响应时,可以使用写入命令。此外,因为该命令可以在任何时刻发送,即使刚发送了一条请求还未收到相应的响应,对命令的发送时延有较高的要求时,该请求也适合。

     

     

     5.8句柄通知(Handle Value Notification) ( 透传数据常用)

    当服务器想要向客户端发送快速得属性状态更新时,可以发送一条句柄值通知。这个是服务器能够发给客户端的两种消息中的一种,并且是不要求响应的那种。服务器可以在任何时刻发送该通知,同时该通知也是不可靠的。

    句柄值通知包含属性句柄和数值。因此该通知是服务器发往客户端的一条消息,用来告知某属性的当前值。它是属性协议中最重要的消息之一。它不仅让客户端能够有效地从服务器获取当前属性数据库的更新,而且也被用来通知客户端有限状态机的变化。

    5.9句柄指示确认(Handle Value IndicationConfirmation)

    句柄值指示类似于句柄值通知。它有着相同的属性句柄字段和数值,不同的客户端收到指示以后应回复。服务器一次只能发送一条指示,并且只有收到确认响应后才能发起下一条指示。 句柄值确认不含任何数据,主要用于流控。因为具备了确认机制,指示被视为可靠传输。一旦服务器收到确认信息,它便能确定客户端收到了该信息。

     

    六、建立连接过程:

    七、发送消息过程:

     

  • 相关阅读:
    【模拟】Gym
    【二分】【半平面交】Gym
    【凸包】【三分】Gym
    【字符串哈希】【哈希表】Aizu
    【思路】Aizu
    【树状数组】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) C. DNA Evolution
    【构造】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) B. High Load
    【贪心】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) A. String Reconstruction
    【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
    【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
  • 原文地址:https://www.cnblogs.com/shenLong1356/p/11134077.html
Copyright © 2020-2023  润新知