标签:air val 数据流 32bit 完整 3.2 字段 host sage
版本 | 撰写日期 | 内容 | 作者 |
V1.0.0 | 2018.07.02 | 初次整理11 | 黄俊嘉 |
本章介绍低功耗蓝牙再空中发送的数据包格式。基于蓝牙规范core_v4.2.pdf。
低功耗蓝牙规范中,有两类报文:广播报文和数据报文。
(1)设备利用广播报文发现、连接其它设备。一旦连接建立之后,则开始使用数据报文。
(2)低功耗蓝牙规定了3个广播信道(37,38,39)和37个数据信道(0~36)。
无论是广播报文还是数据报文,链路层只使用一种数据包格式:
注:报文是一比特一比特传输的,且从最低位开始。
1字节的前导,4字节的接入地址,2~257自己的的协议数据单元PDU,3自己的CRC检验。
报文前导是最开始的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。
(1)什么是接入地址?
(2)广播信道报文的接入地址
所有广播信道报文的接入地址为:10001110100010011011111011010110b (0x8E89BED6)
(3)数据信道报文接入地址
每个两个设备的链路层连接之间数据信道报文接入地址是不相同的。处于初始化状态的设备,并按照定连接请求定义。
数据信道报文接入地址为:32bits随机数,有如下限制:
符合规则的大概有231个。
PDU有广播的报文和数据信道的报文两种。后边有详细介绍。
CRC为3字节,计算PDU的校验值。后边有详细介绍。
仅发生在广播信道上的数据交互协议报文。报文总体格式如下:
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字节
广播报文有以下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。
可连接非定向广播。Payload包含广播地址和广播数据。主要表明自己是可以被连接的,其他设备可以通过扫描获取。
广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。
广播数据字段:根据应用不同具体设计(0~31字节)。
可连接定向广播事件。Payload包含广播地址和接收地址。用于向特定设备建立连接的数据包。
广播地址字段:TxAdd = 0,AdvA地址公共地址;TxAdd = 1,AdvA地址随机地址。
发起者地址字段:RxAdd = 0,AdvA地址公共地址,RxAdd = 1,AdvA地址随机地址。
Note: This packet does not contain any Host data
不可连接非定向广播事件,仅用于广播信息,其他设备扫描接收。
广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。
广播数据字段:广播信息。
可扫描的非定向广播事件。
注: ADV_DISCOVER_IND was renamed to ADV_SCAN_IND
广播地址字段:TxAdd = 0,AdvA地址公共地址。TxAdd = 1,AdvA地址随机地址。
广播数据字段:广播信息。
扫描报文有两种报文:
(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。
SCAN_REQ报文包含请求方的地址和指定回应方的地址。用于建立连接是请求获取被连接方的设备信息。
扫描地址字段:TxAdd = 0,ScanA地址公共地址。TxAdd = 1,ScanA地址随机地址。
广播地址字段:RxAdd = 0,AdvA地址公共地址。RxAdd = 1,AdvA地址随机地址。
Note: This packet does not contain any Host Data.
该报包含发送地址和接收地址+回应数据。即ScanRspData包含回应数据。
广播者字段:TxAdd = 0,ScanA地址公共地址。TxAdd = 1,ScanA地址随机地址。
RxAdd = 0,AdvA地址公共地址。RxAdd = 1,AdvA地址随机地址。
回应数据字段:?????,数据是怎么样的,ScanA怎么接收判断是自己想要的数据。
发起者发起连接的报文有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.
该报文由(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设置。 |
数据信道的PUD有一个16bit的头部,一个长度可变的payload,还可能包含一个32bit的数据完整性检查MIC。格式如下:
头部格式如下:
Header | |||||
LLID (2bits) | NESN (1bits) | SN (1bits) | MD (1bits) | 保留 (3bits) | Length (8bits) |
字段如下:
Field | Description |
LLID | 标志该报文类型:LL Data PDU or an 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的数据格式。
头部LLID字段为01b or 10b时,使用来发送L2CAP数据。
当LLID=01b,lenght=00000000b时,是一个空报文。主链路层可以发送空报文给从机,从机响应任意数据信道报文(包含空报文)。
当LLID=11b时,lenght不能为00000000b,发送有数据的L2CAP数据。
头部LLID字段为11b时,表示这个数据包是用于控制、管理LL连接的LL control PDU。报文格式如下:
控制报文数据lenght不能为0,所有控制报文都有数据域。
其中Opcode指示控制&管理packet的类型,包括:
Opcode | Control PDU Name |
0x00 | LL_CONNECTION_UPDATE_REQ |
0x0D | LL_REJECT_IND |
Opcode | Control PDU Name |
如果未使用LL Data PDU报文或者不支持,接收到LL Data PDU报文将会回应LL_UNKNOWN_RSP PDU。
如果接收到无效的Opcode,将会回应LL_UNKNOWN_RSP PDU。
控制数据域格式如下:
......(未完待续)
标签:air val 数据流 32bit 完整 3.2 字段 host sage
原文地址:https://www.cnblogs.com/it-jya/p/9256651.html