標籤:blog http io ar color os 使用 sp for
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 Packet2.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
Bluetooth Low Energy鏈路層