Bluetooth Low Energy链路层

1. 介绍

1.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进入)

链路状态机只允许处于五种状态之一

链路层可以有多个链路状态机,但至少有一个支持Advertising/Scanning State

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

处于Slave Role的设备只能和处于Master Role的设备通信

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

1.2 比特序(Bit Ordering)

在链路层规范中规定Packet/PDU比特序为Little Endian format

LSB最先发送

1.3 设备地址(Device Address)

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

- 公共地址: 采用IEEE 802-2001 standard的48-bit universal LAN MAC addresses

- 随机地址: 详细要求可参考规范

1.4 物理信道(Physical Channel)

BLE RF信道被定义为两种: advertising and data

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

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

2. BLE Packet

2.1 数据包格式

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

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

- Preamble: 前导码,用于接收方同步频率等

    advertising channel packet - 10101010b

    data channel packet        - 10101010b(Access Address的LSB为0)或01010101b(Access Address的LSB为1)

- Access Address: 接入地址

    advertising channel packet - 0x8E89BED6

    data channel packet        - 每个链路层连接都有其唯一值,由initiator随机生成,相关限制可参看规范

- PDU: 协议数据单元,对于advertising和data channel packet,有各自的格式要求

- CRC: 由PDU计算得到

2.2 RFU

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

2.3 Advertising Channel PDU

PDU格式如下

 
Header部分格式如下

- PDU Type: 定义PDU类型

- TxAdd/RxAdd: 由PDU类型决定,若未定义,则认为是RFU

- Length: 定义Payload的字节数(octets),有效范围是6~37Bytes

- Payload: 由PDU类型决定

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

2.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

2.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表示随机地址)

2.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字段如下,详细信息请参看规范

          

2.4 Data Channel PDU

Data Channel PDU格式如下

 

2.4.1 Header

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

2.4.2 Payload

Payload格式由LLID字段决定,有下面两种类型

- LL Data PDU: 用来发送L2CAP数据, LLID为01b/10b

- LL Control PDU: 用来控制链路层连接, 详细信息请参考规范

    Payload - Opcode(1 octet) + CtrData(0~22 octets)

     

2.4.3 MIC

MIC(Message Integrity Check)

- 不存在的情况

   ~ 在非加密连接中

   ~ 加密连接, Payload为空

- 存在的情况

   ~ 加密连接, Payload不为空

3. Air Interface Protocol

参考BLE规范下面章节

Low Engrgy Controller volume

- Link Layer Specification 
    - AIR INTERFACE PROTOCOL

时间: 2024-12-17 01:39:58

Bluetooth Low Energy链路层的相关文章

Bluetooth Low Energy 介绍

1.简介 BLE(Bluetooth Low Energy,低功耗蓝牙)是对传统蓝牙BR/EDR技术的补充.尽管BLE和传统蓝牙都称之为蓝牙标准,且共享射频,但是,BLE是一个完全不一样的技术.BLE不具备和传统蓝牙BR/EDR的兼容性.它是专为小数据率.离散传输的应用而设计的.通信距离上也有改变,传统蓝牙的传输距离几十米到几百米不等,BLE则规定为100米. 2.低功耗蓝牙(BLE) 低功耗蓝牙分为单模(Bluetooth Smart)和双模(Bluetooth Smart Ready)两种设

Bluetooth low energy介绍

1. 介绍 Bluetooth low energy,也称BLE(低功耗蓝牙),在4.0规范中提出 BLE分为两种设备 - 单模(single-mode): Logo为「Bluetooth?Smart」 - 双模(dual-mode): Logo为「Bluetooth?Smart Ready」 .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New&quo

Bluetooth Low Energy 嗅探

0x00 前言 如果你打开这篇文章时期望看到一些新的东西,那么很抱歉这篇文章不是你在找的那篇文章.因为严格的来说这只是一篇整理文.里面没有任何我的发现,也没有我的实际案例.因为我手头上暂时还没有一个有趣的蓝牙低功耗设备.整篇文章的基础都建立在mike ryan这几年公布的演讲内容之上. 0x01 BLE BLE是什么?BLE全称bluetooth low energy中文又称蓝牙低功耗.最早被人们所知道是在2010年的时候出现在了bluetooth4的spec当中.由于它比传统的蓝牙更能控制功耗

Android Bluetooth Low Energy官方文档翻译

Android Bluetooth Low Energy官方文档翻译 Android4.3(API18)为Bluetooth Low Energy(简称BLE)的核心功能提供了平台支撑,App能够通过它用来发现设备,查询服务,以及读写特性.与传统的蓝牙相比,BLE设计的最大特征就是低功耗.这使得Android的APP能够与具备低功耗的BLE设备进行通信,比如距离传感器,心跳检测,健身设备等等. 关键术语和概念 下面是一些关于BLE的核心术语和概念 Generic Attribute Profil

Android as Bluetooth Low Energy Peripherial (GATT server).

I demonstrate how to write a simple BLE peripheral application in Android here. I am bad in Android development, The UI would be very ugly, but the code work: Currently(5/25/2015), the code could be running in Nexus 6 or Nexus 9 only based on my test

Bluetooth Low Energy(低功耗蓝牙)-For蓝牙4.x

此文翻译至Android API里的Bluetooth Low Energy,希望对大家有所帮助.谢谢. Android4.3(API版本18)介绍了内置平台支持BLE的中心角色,并且提供了相关API,高大尚的程序员们可以使用这些API来扫描设备.查询服务(指服务端进程).读写特性值(指特定的字符).与经典蓝牙不同的是,BLE的设计是为了提供显著的低功耗支持.这使得Android应用可以仅需很低的功耗与BLE设备进行通信,心跳频率(不是人的心跳,是指发送心跳包检测设备是否还在),监听适配设备等等

Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology

转自:http://www.mdpi.com/1424-8220/12/9/11734/htm Sensors 2012, 12(9), 11734-11753; doi:10.3390/s120911734 Article Carles Gomez 1,*, Joaquim Oller 2 and Josep Paradells 2 1 Universitat Politècnica de Catalunya/Fundació i2Cat, C/Esteve Terradas, 7, Cast

基于蓝牙4.0(Bluetooth Low Energy)胎压监测方案设计

基于一种新的蓝牙技术——蓝牙4.0(Bluetooth Low Energy)新型的胎压监测系统(TPMS)的设计方案.鉴于蓝牙4.0(Bluetooth Low Energy)的低成本.低功耗.高稳定性等特点,适用于胎压监测系统,目前业界还没有出现类似的设计方案.本设计为直接式胎压监测系统,即在车辆轮胎上安装压力和温度传感器,通过蓝牙传输方式将胎压的信息传送给搭载蓝牙4.0的iPod.iPhone以及iPad,并在所安装的APP软件上显示实时数据.由此可实时监测车辆的胎压情况,并在胎压异常情况

Android bluetooth low energy (ble) writeCharacteristic delay callback

I am implementing a application on Android using BLE Api (SDK 18), and I have a issue that the transfer data process is delay very slow. This is my log. 03-12 16:20:05.121: D/BluetoothGatt(13578): writeCharacteristic() - uuid: ... 03-12 16:20:06.272: