BlueTooth 藍牙基礎知識進階——Packet解析
六包的格式解析
在分析其它問題之前,我們需要了解在空氣中傳播的數據包的格式,這樣才能深刻理解我們能通過格式中的各個部分做些什麽。
Q1:PACKET的基本格式是什麽樣子的
之前我們提到藍牙傳輸有兩種rate,不同的rate其格式是不同的,我們分別來看一下。
Basic Rate:
Basic Rate的包格式如下圖6-1所示:
圖6-1 Basic Rate的packet通用格式
從圖中可以看到基本可以分為三個部分:
ACCESS CODE:長度是68或者72bit,當HEADER域沒有的話就是68,否則就是正常的72bit。他是用來同步和DC偏移補償的。更通俗地來講他是同一個
HEADER:包含用於鏈路控制的信息。
PAYLOAD:就是信息內容,他的大小最大是2745bit。
總得來說,一個Basic Rate的packet可以由上面三者的以下組合組成:
1)ACCESS CODE;2)ACCESS COED + HEADER; 3)ACCESS CODE + HEADER + PAYLOAD;
Enhanced Data Rate
Enhanced Data Rate的包格式如下圖6-2所示:
圖6-2 EnhancedData Rate
這裏的ACCESS CODE和HEADER是和Basic Rate一樣的。事實上,我們可以理解為後面的都是payload的部分,只不過在payload部分,我們強制使用了一些頭和尾的內容。
Guard:保護間隔,它要來表示HEADER的結尾到SYNC開始之間的時間。範圍是4.75μs到5.25μs。
Sync:同步序列,DPSK使用的同步序列。
Enhanced data rate payload:對應的負載。
Trailer:payload的尾,其實他們都是0,對π/4 DQPSK調制而言是0000,對8DPSK的調制而言是000,000.
其實對於同步的數據而言,在payload
Q2:Header域都有哪些link控制的信息啊
Header域是很重要的,它包含了很多鏈路控制的信息,不過總得來說,可以總結為6個部分,如下圖6-3:
圖6-3 Header域的結構示意圖
各個部分的含義如下:
LT_ADDR:3bit的邏輯傳輸地址,他是用來表示master是把這個包發給哪一個slave的。或者這個包是從哪個slave發送過來的。
TYPE:表示packet的類型。。
FLOW:是流控位,只有在ACL邏輯傳輸的時候才會使用,當RX buffer滿的時候,就會把這個位置0,表示stop。當buffer又空了之後,就會把這個位置為1告訴TX可以繼續發送了。需要註意的是ACL-C以及SCO,ESCO是不能使用這個位的。
ARQN:是用來告知tx放,payload是成功傳輸的,就是通過了CRC校驗。
SEQN:就是數據流的sequence number。
HEC:就是前向糾錯。
Q3:上文提到的packet類型能否簡單介紹一下
我們會把這些packet分為幾個部分來簡單介紹,首先是5個common packet type:
ID Packet:這個packet就是上文提到的只有ACCESSCODE那一種packet。我們之後提到的inquiry msg就是一個ID Packet。
NULL Packet:這個packet只有ACCESS CODE和HEADER。一般來說他是用來返回鏈路信息的,比如什麽rx buffer狀態,或者ARQN之類的。他不需要對端的確認。
POLL Packet:和NULL Packet是類似的,比較大的差別就在於它需要對端回確認信息。需要註意的是不能會POLL Packet,否則就沒玩沒了。
FHS Packet:這個包的特別之處在於他包含了發送的clk信息和address信息,在page等開始的同步過程中起到了很大的作用。
DM1 Packet:這個packet的特別之處在於所有邏輯鏈路的控制信息都需要允許這種包,不過他也能傳輸data,不過僅限於ACL鏈路中,從一定程度上來說,可以認為他是一種ACL的packet。
接著我們來看4種類型的SCOPacket。這四種類型總得來說分為兩大類,分別是DV和HV的packet。他們的差別在於:HV是沒有CRC並且不重傳,DV在data域有CRC,但是在同步數據域沒有,data域的數據應當重傳
HV Packet有可以分為HV1,HV2,HV3三種類型,HV1,HV2,HV3就是1/3,2/3/,以及沒有FEC糾錯,他們均沒有crc,長度是固定的30byte,所以HV1就是10byte的有效數據,HV2就是20byte的有效數據,HV3就全部都是有效數據
DV packet是由10byte的data和150bit的voice域組成,voice域沒有FEC糾錯,data域是1~10byte長度加上16bit的crc,他們都是2/3的FEC。所以就是96/3*2,就是144bit,Voice域不能重傳,data域是有校驗的,所以可以重傳。所示沒有ack,也是需要重傳的
下面我們來看一下7種eSCO的packet類型。這七種根據BasicRate和Enhanced Data Rate有可以分為兩個部分,對Basic Rate而言,有以下三種packet的類型:EV3,EV4,EV5。
EV3:1~30byte,加上16bit的crc,無FEC
EV4:是1~120byte,加上16bit crc,然後是2/3FEC。
EV5:是1~180byte加上16bit的crc,無FEC
對Enhanced Data Rate而言就是還有四種packet會被使用:
2-EV3,2-EV5:和上面EV3,EV5的差別在於,使用π/4DQPSK進行調制。
3-EV3,3-EV5:和上面EV3,EV5的差別在於,使用8DPSK進行調制。
最後我們看一下ACL上傳輸的packet類型,同樣可以分為BasicRate和Enhanced Data Rate兩個部分。
Basic Rate有以下幾種類型的packet:
DM1:就是1~18byte,加16bit的crc,然後又2/3的FEC
DH1:DH1相比DM1而言,沒有FEC,所以長度也可以長一點
DM3:2byte到123byte的長度,加16bit的crc,然後有2/3的FEC
DH3:和DM3類似,就是沒有FEC糾錯
DM5:2~226byte,16bit的crc校驗,信息價crc校驗有一個2/3的FEC糾錯
DH5:和DM5類似,但是沒有FEC的糾錯
AUX1:就是沒有CRC校驗的DH1
對Enhanced Data Rate而言,又增加了幾個類型,分別是2-DH1,2-DH3,2-DH5以及3-DH1,3-DH3和3-DH5,這個也是調制的差別,能理解吧,哈哈~~
Q4:這麽多的packet類型,4bit的TYPE位是如何來全部表示的啊
其實很簡單啦,就是和邏輯傳輸的類型一起就可以判斷了,具體的值見下圖6-4,大家一看就了解了哦。
圖6-4 packet的類型和type域值的對應關系表
若您覺得該文章對您有幫助,請直接按頂,哈哈~~
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
BlueTooth 藍牙基礎知識進階——Packet解析