Core_v4.2_低功耗蓝牙_链路层规范_空中接口报文

Core_v4.2_低功耗蓝牙_链路层规范_空中接口报文

文件版本说明


版本


撰写日期


内容


作者


V1.0.0


2018.07.02


初次整理11


黄俊嘉

       
       
       

第二章 空中接口报文(Air Interface Packetcs)

本章介绍低功耗蓝牙再空中发送的数据包格式。基于蓝牙规范core_v4.2.pdf。

2.1 报文格式

低功耗蓝牙规范中,有两类报文:广播报文和数据报文。

(1)设备利用广播报文发现、连接其它设备。一旦连接建立之后,则开始使用数据报文。

(2)低功耗蓝牙规定了3个广播信道(37,38,39)和37个数据信道(0~36)

无论是广播报文还是数据报文,链路层只使用一种数据包格式:

注:报文是一比特一比特传输的,且从最低位开始。

1字节的前导,4字节的接入地址,2~257自己的的协议数据单元PDU,3自己的CRC检验。

2.1.1 Preamble前导

报文前导是最开始的8位数据。接收机可以用它来:

(1)perform frequency synchronization -- 确定"0"、"1"比特所使用的频率

(2)symbol timing estimation -- 时序估计

(3)Automatic Gain Control (AGC) training -- 配置自动增益控制

广播信道报文前导:10101010b。数据信道报文前导依赖Access Address 的最低bit,1-- 01010101b,0 -- 10101010b。

2.1.2 Access Address接入地址

(1)什么是接入地址?

(2)广播信道报文的接入地址

所有广播信道报文的接入地址为:10001110100010011011111011010110b (0x8E89BED6)

(3)数据信道报文接入地址

每个两个设备的链路层连接之间数据信道报文接入地址是不相同的。处于初始化状态的设备,并按照定连接请求定义。

数据信道报文接入地址为:32bits随机数,有如下限制:

  1. 不能出现6个连续的"0"或"1";
  2. 不等于0x8E89BED6;
  3. 与"0x8E89BED6"不能只有一位不同;
  4. 4个字节不能相等;
  5. 不能有超过24次比特翻转;
  6. 最后6比特至少有2次比特翻转。

    符合规则的大概有231个。

    2.1.3 PDU协议数据单元

    PDU有广播的报文和数据信道的报文两种。后边有详细介绍。

    2.1.4 CRC

    CRC为3字节,计算PDU的校验值。后边有详细介绍。

    2.2 RFU(预留)

    2.3 广播信道报文

    仅发生在广播信道上的数据交互协议报文。报文总体格式如下:

    Advertising channel PDU header:

    PDU Type:


    PDUType(b3 b2 b1 b0)


    PackeName


    0000


    ADV_IND


    0001


    ADV_DIRECT_IND


    0010


    ADV_NONCONN_IND


    0011


    SCAN_REQ


    0100


    SCAN_RSP


    0101


    CONNECT_REQ


    0110


    ADV_SACN_IND


    0111-1111


    Reserved

    RFU : 保留

    TxAdd : 发送地址类型

    RxAdd : 接收地址类型

    长度 :6~37字节

    2.3.1 Advertising PDUs(广播报文)

    广播报文有以下4种:

    (1)ADV_IND :可连接的无定向广播事件。

    (2)ADV_DIRECT_IND: connectable directed advertising event

    (3)ADV_NONCONN_IND: non-connectable undirected advertising event

    (4)ADV_SCAN_IND: scannable undirected advertising event。

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

    2.3.1.1 ADV_IND PUD

    可连接非定向广播。Payload包含广播地址和广播数据。主要表明自己是可以被连接的,其他设备可以通过扫描获取。

    广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。

    广播数据字段:根据应用不同具体设计(0~31字节)。

    2.3.1.2 ADV_DIRECT_IND PDU

    可连接定向广播事件。Payload包含广播地址和接收地址。用于向特定设备建立连接的数据包。

    广播地址字段:TxAdd = 0,AdvA地址公共地址;TxAdd = 1,AdvA地址随机地址。

    发起者地址字段:RxAdd = 0,AdvA地址公共地址,RxAdd = 1,AdvA地址随机地址。

    Note: This packet does not contain any Host data

    2.3.1.3 ADV_NONCONN_IND

    不可连接非定向广播事件,仅用于广播信息,其他设备扫描接收。


    广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。

    广播数据字段:广播信息。

    2.3.1.4 ADV_SCAN_IND

    可扫描的非定向广播事件。

    注: ADV_DISCOVER_IND was renamed to ADV_SCAN_IND

    广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。

    广播数据字段:广播信息。

    2.3.2 Scanning PDUs(扫描报文)

    扫描报文有两种报文:

    (1)SCAN_REQ: sent by the Link Layer in the Scanning State, received by a Link Layer in the Advertising State

    (2)SCAN_RSP: sent by the Link Layer in the Advertising State, received by a Link Layer in the Scanning State

    这两个报文都是用在连接过程中请求广播者获取信息的。有发起连接发出SCAN_REQ,广播者SCAN_RSP。

    2.3.2.1 SCAN_REQ 扫描请求

    SCAN_REQ报文包含请求方的地址和指定回应方的地址。用于建立连接是请求获取被连接方的设备信息。

    扫描地址字段:TxAdd = 0,ScanA地址公共地址。TxAdd = 1,ScanA地址随机地址。

    广播地址字段:RxAdd = 0,AdvA地址公共地址。RxAdd = 1,AdvA地址随机地址。

    Note: This packet does not contain any Host Data.

    2.3.2.1 SCAN_RSP扫描回应

    该报包含发送地址和接收地址+回应数据。即ScanRspData包含回应数据。

    广播者字段:TxAdd = 0,ScanA地址公共地址。TxAdd = 1,ScanA地址随机地址。

    RxAdd = 0,AdvA地址公共地址。RxAdd = 1,AdvA地址随机地址。

    回应数据字段:?????,数据是怎么样的,ScanA怎么接收判断是自己想要的数据。

    2.3.3 Initiating PDUs(发起连接报文)

    发起者发起连接的报文有1个:

    CONNECT_REQ :This PDU is sent by the Link Layer in the Initiating State and received by the Link Layer in the Advertising State.

    2.3.3.1 CONNECT_REQ连接请求报文

    该报文由(Initiating State)发起连接端的发出,Advertising State端接收。格式如下:

    包含有请求端地址InitA、接收端地址AdvA、数据域LLDate。

    地址InitA:TxAdd = 0,InitA地址公共地址。TxAdd = 1,InitA地址随机地址。

    地址AdvA:RxAdd = 0,AdvA地址公共地址。RxAdd = 1,AdvA地址随机地址。

    LLData数据定义如下:

    LLDate的10个字段:


    字段


    描述


    Access Address


    接入地址


    CRC校验


    详细Section 3.1.1


    窗口长度


    transmitWindowSize=WinSize*1.25ms来定义,详细Section 4.5.3。


    窗口偏移


    transmitWindowOffset=WinOffset*1.25ms来定义,详细Section 4.5.3。


    连接间隔


    connInterval = Interval * 1.25 ms,详细Section 4.5.1


    从机延时


    connSlaveLatency = Latency,详细Section 4.5.1。


    连接超时


    connSupervisionTimeout = Timeout * 10 ms,详细Section 4.5.2。


    ChM


    信道地图映射,标记信道是否已经使用,每一个信道由1个位表示一个信道index。

    详细Section 1.4.1。

    LSB在前,数据信道0~36(37~39预留),值0表示没有被使用,值为1表示信道已经使用。


    Hop


    hopIncrement和ChM来决定数据传输过程中的跳频算法。Section 4.5.8.2定义有跳频算法。


    SCA


    睡眠时钟精度,参照表2.2设置。

    2.4 数据信道报文

    数据信道的PUD有一个16bit的头部,一个长度可变的payload,还可能包含一个32bit的数据完整性检查MIC。格式如下:

  7. 头部

    头部格式如下:


    Header


    LLID

    (2bits)


    NESN

    (1bits)


    SN

    (1bits)


    MD

    (1bits)


    保留

    (3bits)


    Length

    (8bits)

    字段如下:


    Field
    name


    Description


    LLID


    标志该报文类型:LL Data PDU or an LL Control PDU.
    00b = Reserved(保留)
    01b = LL Data PDU: Continuation fragment of an L2CAP message, or an Empty PDU.
    10b = LL Data PDU: Start of an L2CAP message or a complete L2CAP message with no fragmentation.
    11b = LL Control PDU


    NESN


    Next Expected Sequence Number,下一个序列号,参考Section 4.5.9


    SN


    Sequence Number序列号,参考Section 4.5.9


    MD


    More Data,参考Section 4.5.6


    Length


    数据长度:Payload + MIC,范围0~255字节。

    注意:MIC字段出现在:(1)加密的链路层连接中;(2)payload为0的数据信道PDU的加密链路层连接中。计算参考 [Vol. 6] Part E, Section 1。

    由头部的LLID决定Payload的数据格式。

    2.4.1 LL Data PDU

    头部LLID字段为01b or 10b时,使用来发送L2CAP数据。

    当LLID=01b,lenght=00000000b时,是一个空报文。主链路层可以发送空报文给从机,从机响应任意数据信道报文(包含空报文)。

    当LLID=11b时,lenght不能为00000000b,发送有数据的L2CAP数据。

    2.4.2 LL Control PDU

    头部LLID字段为11b时,表示这个数据包是用于控制、管理LL连接的LL control PDU。报文格式如下:

    控制报文数据lenght不能为0,所有控制报文都有数据域。

    其中Opcode指示控制&管理packet的类型,包括:


    Opcode


    Control PDU Name


    0x00
    0x01
    0x02
    0x03
    0x04
    0x05
    0x06
    0x07
    0x08
    0x09
    0x0A
    0x0B
    0x0C


    LL_CONNECTION_UPDATE_REQ
    LL_CHANNEL_MAP_REQ
    LL_TERMINATE_IND
    LL_ENC_REQ
    LL_ENC_RSP
    LL_START_ENC_REQ
    LL_START_ENC_RSP
    LL_UNKNOWN_RSP
    LL_FEATURE_REQ
    LL_FEATURE_RSP
    LL_PAUSE_ENC_REQ
    LL_PAUSE_ENC_RSP
    LL_VERSION_IND


    0x0D
    0x0E
    0x0F
    0x10
    0x11
    0x12
    0x13
    0x14
    0x15
    0x16-0xFF


    LL_REJECT_IND
    LL_SLAVE_FEATURE_REQ
    LL_CONNECTION_PARAM_REQ
    LL_CONNECTION_PARAM_RSP
    LL_REJECT_IND_EXT
    LL_PING_REQ
    LL_PING_RSP
    LL_LENGTH_REQ
    LL_LENGTH_RSP
    Reserved for Future Use


    Opcode


    Control PDU Name

    如果未使用LL Data PDU报文或者不支持,接收到LL Data PDU报文将会回应LL_UNKNOWN_RSP PDU。

    如果接收到无效的Opcode,将会回应LL_UNKNOWN_RSP PDU。

    2.4.2.1 LL_CONNECTION_UPDATE_REQ

    控制数据域格式如下:

  8. WinSize 设置transmitWindowSize 值:transmitWindowSize = WinSize * 1.25 ms。

    ......(未完待续)

原文地址:https://www.cnblogs.com/it-jya/p/9256651.html

时间: 2024-10-28 21:48:05

Core_v4.2_低功耗蓝牙_链路层规范_空中接口报文的相关文章

深入浅出低功耗蓝牙(BLE)协议栈

BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提.在深入BLE协议栈各个组成部分之前,我们先看一下BLE协议栈整体架构. 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己

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 chan

Android 低功耗蓝牙BLE 开发注意事项

基本概念和问题 1.蓝牙设计范式? 当手机通过扫描低功耗蓝牙设备并连接上后,手机与蓝牙设备构成了客户端-服务端架构.手机通过连接蓝牙设备,可以读取蓝牙设备上的信息.手机就是客户端,蓝牙设备是服务端. 手机做为客户端可以连接多个蓝牙设备,所以手机又可以叫中心设备(Central),蓝牙设备叫外围设备(Peripheral). 还有另外一个称谓:手机叫主设备(Master),蓝牙设备叫从设备(Slave). Android4.3 开始支持低功耗蓝牙,此版本只支持单模式:同时只能工作在中心设备模式或者

低功耗蓝牙BLE之连接事件、连接参数和更新方法

转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件是指主设备和从设备之间相互发送数据包的过程.连接事件的进行始终位于一个频率,每个数据包会在上个数据包发完之后等待 150μs 再发送. 连接间隔决定了主设备与从设备的交互间隔:它是指两个连续的连接事件开始处的时间距离,可以是7.5ms ~ 4s内的任意值,但必须为 1.25ms 的整数倍.要确定从设

Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便写下这篇博客心得 Google API:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#terms 其实大家要学习Android的技术,Google的API就是最详细的指导书了,而且通俗易懂,就算看不懂

低功耗蓝牙BLE之AES-128加密算法

版权声明: 博主:枫之星雨 声明:本文为博主原创文章,转载请注明原文出处. 博文地址:http://blog.csdn.net/zzfenglin 邮箱:[email protected] QQ号:454086991(申请加好友时请备注"技术交流") 加密 在连接时,可以对净荷中的数据进行加密,确保数据的机密性,从而抵御攻击者.机密性是指第三方"攻击者"由于没有加密链路的共享密钥,因此无法拦截.破译或读取消息的原始内容. 加密数据包含一个消息完整性校验值,表明该数据

BLE控制器之链路层

BLE 协议之链路层介绍 链路层是低功耗蓝牙体系里面最复杂的部分,它负责广播.扫描.建立和维护连接.以及确保数据包按照正确的方式组织.正确的计算校验值以及加密序列等. 链路层包含三个基本概念:信道.报文.过程 首先来说信道,信道包含广播信道和数据信道. 未建立连接的设备使用广播信道发送数据,如外设通过广播信道进行广播,通告自身为可连接或可发现的,并且执行扫描或者发起连接. 连接后的设备则通过数据信道来进行数据传输. 在这两个信道上的数据发送均为小数据包,封装了发送者给接受者的少量数据,无论是广播

低功耗蓝牙(BLE)——概念

1. 种类 单模蓝牙:仅支持传统蓝牙和BLE(低功耗蓝牙)中的一种: 双模蓝牙:同时支持传统蓝牙和BLE(低功耗蓝牙). 2. 部署方案 3. 节点类型 根据蓝牙协议不同的协议层有不同的角色 1. Server和Client(GATT)--属性服务层 Server(服务器)就是数据中心,一般指蓝牙设备,一般是从机: Client(客户端)就是数据访问者,一般指手机,一般是主机. 特别说明:它与主/从设备是独立的概念,一个主设备既可以充当Server,又可以充当Client,从设备亦然.一般来说,

Android低功耗蓝牙(蓝牙4.0)——BLE开发(上)

段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝牙技术联盟在2010年6月30号公布了蓝牙4.0标准,4.0标准在蓝牙3.0+HS标准的基础上增加了对低功耗蓝牙(BLE)的支持.相比原有的普通蓝牙和高速蓝牙,BLE最大的特点就是低功耗,低延时,快速的搜索和连接速度,但数据传输速度相比传统蓝牙低.接下去将从BLE的概念以及代码两个方面介绍Android下的BLE. 先来说说基本概念: 1.BLE相关概念 1.1 GATT.