Core_v4.2_低功耗藍牙_鏈路層規範_空中接口報文

 

Core_v4.2_低功耗藍牙_鏈路層規範_空中接口報文

 

 

文件版本說明

版本算法

撰寫日期加密

內容spa

做者設計

V1.0.03d

2018.07.02code

初次整理11orm

黃俊嘉blog

       
       
       

 

 

第二章 空中接口報文(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位數據。接收機能夠用它來:

1perform frequency synchronization -- 肯定"0"、"1"比特所使用的頻率

2symbol timing estimation -- 時序估計

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

廣播信道報文前導:10101010b。數據信道報文前導依賴Access Address 的最低bit,1-- 01010101b0 -- 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

    hopIncrementChM來決定數據傳輸過程當中的跳頻算法。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=01blenght=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。

     

     

     

     

     

    ......(未完待續)

相關文章
相關標籤/搜索