博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bluetooth Low Energy介绍
阅读量:5304 次
发布时间:2019-06-14

本文共 4316 字,大约阅读时间需要 14 分钟。

1. 介绍

Bluetooth low energy,也称BLE(低功耗蓝牙),在4.0规范中提出

BLE分为两种设备

- 单模(single-mode): Logo为「Bluetooth®Smart」 - 双模(dual-mode):   Logo为「Bluetooth®Smart Ready」

TIP: 传统蓝牙的Logo为「Bluetooth®」

BLE与传统蓝牙的兼容性如下图所示

image

可以看出他们之间的通信规则如下(Bluetooth指代传统蓝牙,下同)

- Smart Ready: Smart Ready、Bluetooth、Smart - Bluetooth:   Smart Ready、Bluetooth - Smart:       Smart Ready、Smart

2. 协议栈

BLE协议栈如下图所示

image

BLE协议栈由Controller和Host两部分组成;Profile和Service基于GAP和GATT

协议栈各层次介绍如下

- PHY:   1Mbps自适应跳频GFSK, 运行在2.4GHz频段 - LL:    RF控制器, 控制设备的链路状态  - HCI:   接口层, 向上为主机提供软件应用程序接口, 对外通过通过串口、SPI、USB实现设备控制  - L2CAP: 为上层提供数据封装服务, 允许逻辑上的端到端数据通信  - SM:    提供配对和密钥分发服务, 实现安全连接和数据交换  - GAP:   直接与应用程序或配置文件通信的接口, 处理设备发现和连接相关服务; 另外还处理安全特性的初始化  - ATT:   导出特定的数据(称为属性)到其他设备  - GATT:  定义了使用ATT的服务框架和配置文件(Profiles)的结构; BLE中所有的数据通信都需要经过GATT

3. 链路层

3.1 链路状态机

链路层操作可以描述为链路状态机(The Link Layer State Machine)

链路状态机有如下五种状态

- Standby State:      准备, 不传输或接受数据包- Advertising State:  广播, advertiser, 发送advertising channel packets, 接受来自scanner的响应- Scanning State:     监听/扫描, scanner, 监听来自advertiser的advertising channel packets- Initiating State:   初始化, initiator, 监听来自特殊设备的advertising channel packets,并进行初始化连接- Connection State:   连接, 有两种角色: Master Role(从initiator进入)/Slave Role(从advertiser进入)

image

链路状态机只允许处于五种状态之一;链路层可以有多个链路状态机,但至少有一个支持Advertising/Scanning State

处于Master Role的设备可以和多个Slave Role分时通信;处于Slave Role的设备只能和处于Master Role的设备通信

下图展示了允许和禁止的链路状态机和角色的组合

image

3.2 比特序

在链路层规范中规定Packet/PDU比特序(Bit Ordering)为Little Endian format;LSB最先发送

3.3 设备地址

设备地址(Device Address)可以是公共地址或者随机地址,长度为48 bits

公共地址采用IEEE 802-2001 standard的48-bit universal LAN MAC addresses,格式如下

image

随机地址格式如下

image

3.4 物理信道

BLE RF信道(Physical Channel)被定义为两种: advertising and data

- advertising信道: 使用3个RF信道用来发现设备, 初始化连接和广播数据 - data信道:        则使用多达37个RF信道用于两个连接设备间通信

RF Channel和Advertising/Data channel Index对应关系如下图

image

4. BLE报文

4.1 报文格式

对于BLE链路层,advertising/data channel packet格式如下

image

数据包长度为80~376bits(10~47Byte)

- Preamble: 前导码, 用于接收方同步频率等     advertising channel packet - 10101010b     data channel packet        - 10101010b或01010101b - Access Address: 接入地址     advertising channel packet - 0x8E89BED6     data channel packet        - 每个链路层连接都有其唯一值, 由initiator随机生成, 相关限制可参看规范 - PDU: 协议数据单元, 对于advertising和data channel packet, 有各自的格式要求 - CRC: 由PDU计算得到

4.2 RFU

Reserved For Future Use,留待后用,设置为0,接收后被忽略

4.3 Advertising Channel PDU

PDU格式如下

image
Header部分格式如下
image

Header各字段含义如下

- PDU Type: 定义PDU类型  - TxAdd/RxAdd: 由PDU类型决定,若未定义,则认为是RFU  - Length: 定义Payload的字节数(octets),有效范围是6~37Bytes  - Payload: 由PDU类型决定

其中PDU类型如下

image

在Adv PDUs中,AdvData/ScanRspData指来自Host的数据

4.3.1 Advertising PDUS

Advertising PDUS包含下面几种类型

- ADV_IND: 表明自己是可以被连接的     Payload - AdvA(6 octets) + AdvData(0~31 octets)         AdvA字段为advertiser的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)- ADV_DIRECT_IND: 向特定设备建立连接     Payload - AdvA(6 octets) + InitA(6 octets)         AdvA字段为advertiser的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)         InitA字段为initiator(接收方)的地址(RxAdd=0表示公共地址, Rxadd=1表示随机地址)- ADV_NONCONN_IND: 用于广播信息     Payload - AdvA(6 octets) + AdvData(0~31 octets)         AdvA字段为advertiser的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)- ADV_SCAN_IND: scannable undirected advertising event     Payload - AdvA(6 octets) + AdvData(0~31 octets)         AdvA字段为advertiser的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)

这些PUDs的数据流向为 advertiser->scanner/initiator

4.3.2 Scanning PDUS

Scanning PDUS包含下面几种类型

- SCAN_REQ: 数据流向为 scanner->advertiser     Payload - ScanA(6 octets) + AdvA(6 octets)         ScanA字段为scanner的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)         AdvA字段为advertiser的地址(RxAdd=0表示公共地址, Rxadd=1表示随机地址)- SCAN_RSP: 数据流向为 advertiser->scanner     Payload - AdvA(6 octets) + ScanRspData(0~31 octets)         AdvA字段为advertiser的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)

4.3.3 Initiating PDUS

Initiating PDUS包含下面的类型

- CONNECT_REQ: 数据流向为 initiator -> advertiser     Payload - InitA(6 octets) + AdvA(6 octets) + LLData(22 octets)         InitA字段为scanner的地址(TxAdd=0表示公共地址, Txadd=1表示随机地址)         AdvA字段为advertiser的地址(RxAdd=0表示公共地址, Rxadd=1表示随机地址)         LLData字段如下,详细信息请参看规范

image

4.4 Data Channel PDU

Data Channel PDU格式如下

image

4.4.1 Header

Header部分格式及字段含义如下

DataHeader

4.4.2 Payload

Payload格式(Opcode[1 octet] + CtrData[0~22 octets])由LLID字段决定,有下面两种类型

- LL Data PDU: 用来发送L2CAP数据, LLID为01b/10b  - LL Control PDU: 用来控制链路层连接, 详细信息请参考规范

image

4.4.3 MIC

MIC(Message Integrity Check)

- 不存在的情况    ~ 在非加密连接中    ~ 加密连接, Payload为空 - 存在的情况    ~ 加密连接, Payload不为空

转载于:https://www.cnblogs.com/hzl6255/p/4127138.html

你可能感兴趣的文章
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>