BLE协议 01

简介

本文将按照如下层次分析

  • PHY(物理层)
  • LL(链路控制层)
  • HCI(主机和控制接口)
  • L2CAP层(逻辑链路控制和适配层)
  • GATT(通用属性规范)
  • ATT(属性传输协议)
  • SMP(安全管理)

协议的组成图:

PHY(物理层)

频段

BLE使用2.4GHz工业、科学及医疗(ISM)频段。

这个频段有两个特别之处:

  • 它是一个无需授权的频段
  • 它是唯一一个在任何国家都通用的频段,即对于2.4GHz的频段,从2400MHz~2483.5MHz约83.5MHz的频谱资源在任何地方都可以使用。

调制

BLE采用的GFSK调制方式(髙斯频移键控),物理层的比特率为1Mbit/s(1Mbps)。

射频信道

LL(链路控制层)

描述

链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的详细定义,也规定了发现其他设备的流程、广播的数据、连接建立、连接管理以及连接中的数据传输。

链路层状态机

  • 就绪态(Standby)
  • 广播态(Advertising)
  • 扫描态(Scanning)
  • 发起态(Initiating)
  • 连接态(Connection)

空中数据包结构

  • 前导码:1字节
  • 访问地址:4字节
  • 数据包单元:29字节
  • CRC校验:3字节


基本概念

  • Bit流

在4.0协议中规定数据都是以小端模式存放

在内存中,并且发送到空中的数据都是以低字节的最低bit位进行发送。当然也有例外,CRC是先发送的高字节的最低bit位。例

  • 数据白化

数据白化的目的是避免长0长1。

三种“地址”区分

  • 前导码Preamble:1字节
    前导码的作用是:频率同步和增益控制。只有两个值: 0xAA和0x55

  • 接入地址Access Address:4字节
    广播包固定---- 0x8e89bed6
    数据包变化----每一次连接都不同

  • 芯片物理地址:6字节
    它分为:公共地址和随机地址。随机地址分为:静态地址和私有地址。私有地址分为:不可解析和可解析地址。


报文结构详细组成

广播通道PDU结构

同一广播事件中3个信道之间的时间间隔----以ADV-IND为例

连接请求CONNECT_REQ包

Sniffer采集到的连接请求包

image

数据通道PDU结构

image
image

连接事件

和广播事件一样,每隔一定的时间连接事件由主机从数据信道发送一个数据包,从机接到数据如果有数据发送需要在150±2 µs做成应答。也就是说每一个连接事件中至少包含主机发送的一个包,从机可以不发送包。

  • 连接事件的时间由两个参数决定:connection event interval (connInterval), and slave latency (connSlaveLatency).即连接间隔和从机潜伏期。
  • lanchor point
    连接事件开始的点叫做锚点(The start of aconnection event is called an anchor point)。主机在锚点开始连接事件,从机需要在锚点前进入侦听状态。
  • connEventCounter
    主机和从机都有一个16位的连接事件计数器,这个值是为了这两个设备之间的同步。这个值只要是连接事件参数就会加1,当然第一个连接事件时这个值为0而不是1。无论从机潜伏期的值是多少,只有从机接收到主机的连接事件这个值在从机里面就要加1。当这个值到了0xFFFF时,会翻转到0x0000,重新开始计算。

连接事件传输窗口

在上面讲到了CONNECT_REQ包,这个包中包含了传输窗口,并且窗口偏移(WinOffset)只有是从广播态进入连接态时使用,或者在参数更新时使用,而WinSize时间是每个连接事件都必须使用的。

Ø连接间隔时间的起点有两个位置:•当从机接收报文成功,连接间隔时间起点,就是接收到报文的那个时刻,当然对于nrf51822来说,就是Radio的END事件产生的时候了。

  • 当从机接收报文失败,连接间隔时间起点,就是扫描窗口的开始时刻。

从机在传输窗口中没有接收到第一个连接事件

这种情况,从机不得不等待连接间隔时间后再次进入传输窗口,等待接收下一个报文。虽然接收失败,但是还是有几点要注意的:

  • 连接事件计数值connEventCount这个值还是得加1的。
  • 数据通道的频率还得接着跳到下一个频率。

HCI(主机和控制接口)

HCI Commands and Events

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

L2CAP逻辑链路控制和适配层

这个层的目的是将上层的数据进行简单包装,使得对于LL层来说,非常方便地进行再次包装后进行发送。

L2CAP包结构以及信道标识


属性

什么是属性

属性是一条公开的带有标签的,可以被寻址的数据。属性构成就是规定数据怎么组成。在L2CAP中可以知道,HOST通往下层的数据只有3条路,并且如果是应用的话,只有一条CID=0x0004的通道,看来对于BLE所有应用数据都是通过ATT进行传输的。那么到沙子里面淘金子,为什么可以认出沙子里面的金子呢?因为金子发光,黄色的,这两个就是金子的基本属性。对于ATT跑到GATT哪里去找数据,肯定得规定数据怎么放,也就是人为规定数据属性,这样才好找吧!在4.0协议规范中规定的这个格式就是属性,也就是数据按照一定规则存放的规定,这个存放的规定就是组成服务的最小单元。

属性组成最小单元
属性句柄(Attribute Handle)

两个作用

  • 为了方便寻找属性的一种方式
  • 通过属性句柄操作多个同样属性类型
属性类型(Attribute Type)

属性类型其实就是对某个东西取一个别名,让机器可以理解,对于机器理解东西就是数字了,所以属性类型采用了2bytes或者是16bytes的长度的数字表示某个东西。例如心率计,我们人听到心率计都知道是什么,但是机器并不知道,同样对于一个不懂中文的人对他说“心率计”,他也不知道是什么。所以为了全球统一,心率计有一个数字代号:0x180D,这是唯一的识别码叫做通用唯一识别码(Universally Unique IDentifier (UUID))。在服务器的数据库中只要找到服务是 0x180D的值,所有设备都知道这是一个含有心率计服务的蓝牙设备。

书名号

对于机器读到0x180D就知道是心率计服务,但是对于人来说还是喜欢形象的东西,所以又有一种方法,对于2bytes的UUID,通常不直接用它的值,而是用一个名称并加上书名号,例如心率计通常用«Heart Rate service »表示数值为0x180D的UUID

属性值(Attribute Value)

属性值是一个0~512字节的数据,对于属性本身来说,属性值是没有用的,属性值是给应用用的。那么值可以有哪些呢?

  • 服务通用唯一识别码(UUID)
  • 单位
  • 属性类型
  • 特性描述符
  • 特性类型
属性许可(Attribute Permissions)
  • 可读
  • 可写
  • 可读且可写
  • 需要认证
  • 不需要认证
  • 无授权
  • 授权
GATT 服务组成

服务是指一系列由数据和相关行为组成的集合,为了去完成某个特定的功能或者特性。而一个服务可以包含引用服务即《Include》、强制性和可选的特征即 《Characteristic》。

心率计服务

服务声明

服务声明是干什么用的?简单地讲,就是告诉其他蓝牙设备,我可以为你提供什么服务,对于心率计,就是告诉对方我可以提供心率的服务。

特性«Characteristic»声明

  • 属性值—特性性质(CharacteristicProperties)
  • 属性值—特性的属性句柄(Characteristic ValueAttribute Handle)
  • 属性值—特性的属性类型(Characteristic UUID)
  • 属性值—特性性质(CharacteristicProperties)
属性许可(Attribute Permissions)和特性性质(Characteristic Properties)区别
  • Permissions:对设备本身的权限,相当于家里卧室中也需要门锁,防止爸妈偷看日记
  • Properties:对于对方设备而言的权限,相当于大门的门锁是防止外人非法进入的。
特性值声明

特性值的声明是在特性声明后的第一个属性,所有的特性定义中一定包含有一个特性值声明。

特性描述符声明

特性描述是用来包含一些关于特性值的关联信息,特性描述有多种类型,一个特性的定义可以有任意多个的描述符,而所有描述符都是用来为特性值服务的

  • 特性扩展性质 «Characteristic Extended Properties»:0x2900
  • 特性用户描述 «Characteristic User Description» :0x2901
  • 客户端特性配置«Client Characteristic Configuration» :0x2902
  • 服务器特性配置«Server Characteristic Configuration»:0x2903
  • 特性表示格式 «Characteristic Presentation Format»:0x2904
  • 特性聚合格式 «Characteristic Aggregate Format» :0x2905
心率计的特性

GATT(通用属性规范)

ATT(属性传输协议)

ATT干啥用的?

ATT协议存在的目的是规定用什么样的方法去访问GATT服务,并将访问的到的数据传输给L2CAP;或者是规定L2CAP的数据怎么样传到GATT服务的一种规定的传输协议。

通信方法
属性协议PDU
GATT映射到 ATT
ATTPDU 映射到 GATT规程

SMP(安全管理)

安全管理难点

安全管理难点在于:怎么将公共密钥进行安全共享

加密标准

AES-CCM 是计数器密码块链消息认证码模式,融合有3 种技术: AES 加密引擎、计数模式和消息认证
AES(Advanced Encyption Standard)即先进加密标准

安全管理配对绑定数据包交互全过程

参考

https://mp.weixin.qq.com/s/_YvRgwGyVwomDCuMIEkzJQ

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容