BLE設備的狀態遷移圖:
Standby State:不會發送和接收數據包
Advertising State:轉發廣播數據包並且能夠監聽廣播通道的數據,在這個狀態下,設備被認爲是廣播者
Scanning State:監聽廣播通道的數據,這個狀態下被當做掃描者。
Initiating State:監聽廣播廣播通道數據從一個特定的設備,然後發起連接。
Connection State:設備連接起來
Link Layer pack格式:
主要有兩種 pack:
Advertising pack、Data pack
Preamble(這個值取決於Accesss Address的最低位):
如果是0就是 10101010
如果是1就是 01010101
Accesss Address:
對於廣播信道的是個固定的值: 0x8E89BED6
如果是數據通道的話,Accesss Address這個值由在Initiating設備所產生的隨機值
產生的隨機值有六大要求:
(1)不能是6個連續的0或者1
(2)不能和廣播信道的值一樣
(3)最少要和廣播信道的值保持兩位不一樣
(4)四個字節的值不能一樣
(5)不能出現24個翻轉
(6)每六個相同的bit要翻轉一次
PDU:具體決定這個數據包是什麼類型
Advertising PDU:
Header:
PDU Type:決定廣播pack是哪一種類型
RFU:保存用在以後使用
TxAdd: 發送數據發送設備Device Address是公開的(Txadd = 0)或者隨機的(Txadd = 1)
RxAdd: 接收數據是接收設備Device Address是公開的(Txadd = 0)或者隨機的(Txadd = 1)
Length:表明Payload的長度
PDU Type有以下具體的廣播事件:
Advertising State:
ADV_IND:沒有確定連接方向的可連接廣播事件
ADV_DIRECT_IND:確定連接設備的廣播事件
ADV_NONCONN_IND:不可連接的廣播事件
ADV_SCAN_IND:掃描沒有連接的廣播事件
ADV_IND:當PDU_TYPE = ADV_IND TxAdd 反應廣播地址是公開的(Txadd = 0)或者隨機的(Txadd = 1)
AdvData:包含廣播數據來自於廣播的主機(I2CAP)
ADV_DIRECT_IND:
AdvA:廣播設備的地址
InitA:發起連接的設備地址
這個包不包含任何主機數據
RxAdd : (RxAdd = 0) (RxAdd = 1)
表明發起的廣播地址是公開還是隨機的
ADV_NONCONN_IND:
ADV_SCAN_IND
掃描PDU:
SCAN_REQ:數據的發送在Scaning State接收在Advertising State
SCAN_RESP:數據發送在Advertising State接收在Scaning State
發起狀態的PDU:
CONNECT_REQ:數據發送在Initiating State接收在Advertising State
AA:Access Address
CRC:
WinSize:表示傳輸的大小
WinOffset:
Interval:傳輸間隔
Latency:
Timeout:
ChM:表示數據通道是否使用,總共有37個數據通道(0~36)
bit 0 對應的是數據通道 0
bit 36 對應的是通道 36
37 38 39 保存
SCA:
LL Data PDU:
Header:
LL DATA Control PDU:
Length: 不能設置0
Opcode表示不同的控制類型
LL_CONNECTION_UPDATE_REQ:
LL_CHANNEL_MAP_REQ:
LL_TERMINATE_IND:
LL_ENC_REQ:
LL_ENC_RSP:
LL_START_ENC_REQ:
沒有CtrData
LL_START_ENC_RSP:
沒有CtrData
LL_UNKNOWN_RSP:
LL_FEATURE_REQ:
LL_FEATURE_RSP:
LL_PAUSE_ENC_REQ:
沒有CtrData filed.
LL_PAUSE_ENC_RSP:
沒有CtrData filed.
LL_VERSION_IND:
LL_REJECT_IND:
LL_SLAVE_FEATURE_REQ:
LL_CONNECTION_PARAM_REQ:
LL_CONNECTION_PARAM_RSP:
LL_REJECT_IND_EXT:
LL_PING_REQ:
沒有CtrData
LL_PING_RSP:
沒有數據