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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章