從藍芽BLE 廣播封包看微軟的快速配對

關鍵字 :BLE 廣播微軟

Microsoft從去年訂出藍芽快速配對(Swift Pairing)連接方式,雖然起初windows 10 更新版本1809有不少災情,不過微軟也出了相關補丁;Swift Pairing讓用戶更容易連接周邊裝置,省去了之前連接連牙設備的多步驟,對於大部分的用戶,還是便利許多。

不過再談Swift Pairing之前,必須先從BLE的廣播封包規格談起,BLE頻率是2.4GHz ISM band,範圍由2.402GHz~2.480GHz,共分成40個頻道,其中用來廣播使用37、38、39這3個頻道,用來新裝置配對,斷線回聯…等等功能。如下圖:

 

廣播封包的格式則如下:


其中Preamble就是一連串的0跟1交叉組成. Ex: 10101010b or 01010101b。而Access Address則固定為0x8E89BED6,共 4個bytes。

因此廣播的封包,所要夾帶的訊息必須在39個Byte內完成,其中這39個byte又必須包括2個byte的PDU Header 及配對裝置自己的6個byte藍芽位址,因此就只剩下31個byte可以使用。如下Figure2.2,而PDU Header 2byte定義如下Figure 2.3,至於各個說明,請参考藍芽規格書Core_V4.2.pdf中的Vol6_Part B_1.4,在此就不細說。


為了說明廣播封包的結構,底下是用TI Sniffer擷取的一台滑鼠廣播封包:



圖中上半部有色彩是Sniffer解讀,圖下半部則是實際資料封包,2者是對應一樣的.

再Packet data的第2個開始的4個字節(藍色mark處)就是Access Address,其中低字節在前(先送出),所以剛好反過來,0x0x8E89BED6,你可能會問我,那第一個0x2E是甚麼,它代表後面的資料長度是多少?(不包括自己),(PS:所有資料開頭都是長度)。

接著0x40 & 0x23就是PDU Header,而接下來跟著的就是裝置的藍芽位址6個字節,一樣是低字節在前。

接下來就是我們要談的資料封包,也是一般韌體RD會去修改的部分,當然Swift Pairing也是包括在這裡面。如下圖藍色mark處:

從FW源代碼的內容角度來看,說明會比較容易,在PixArt BLE PAR2801 reference內¸ 宣告相關的字節如下:

uint8_t ADV_DATA[] = {

                                        0x02,

                                        0x01, // AD Type:

                                        0x05,

 

                                        0x03,

                                        0x19, //AD type

                                        0xC2, //Appearance: HID Mouse (0x03C2)

                                        0x03,

                                       

                                        0x03,

                                        0x03, // UUIDs  0x1812

                                        0x12,

                                        0x18,

                                                       

                                        0x11, // length

                                        0x09, // AD Type: 09:device full name

                                        0x50, // "P"

                                        0x69, // "i"

                                        0x78, // "x"

                                        0x41, // "A"

                                        0x72, // "r"

                                        0x74, // "t"

                                        0x20, // " "

                                        0x42, // "B"

                                        0x4C, // "L"

                                        0x45, // "E"

                                        0x20, // " "

                                        0x4D, // "M"

                                        0x6F, // "o"

                                        0x75, // "u"

                                        0x73, // "s"

                                        0x65  // "e"

                                        };

                                       

若是使用者知道如何去新增裝置,在PC藍芽新增裝置的視窗內,若是PC收到這樣的廣播封包,就會直接出現滑鼠的裝置,且名稱為”PixArt BLE Mouse”,如下畫面:




雖然這樣的操作讓電腦連接配對到新裝置並不難,不就是開啟電腦的”設定”選項,然後再點選”裝置”,然後再找到藍芽與其他裝置”的選項,最後再點選”新增藍芽或其他裝置”,最後….真的是最後了,必須再點”藍芽”,才會看到上面的畫面,天阿,看到這邊好像再繞口令,有鑑於此微軟設計了一個方式,讓使用者再連接配對新裝置變得容易很多,只要符合微軟的規範,當電腦發現有新裝置會再視窗桌面右下角談出一個小視窗(如下),使用者若確定是自己的連接的新裝置,直接按”Connect”即可,省去不少步驟。


要達到這樣的功能,只要在廣播封包內加入6個字節的宣告即可(如下表微軟說明):


但是受限於廣播封包31字節長度的限制,因此只好修改裝置名稱為”PixArt BLE1”,因此FW源代碼內容修改如下:

uint8_t ADV_DATA[] = {

                                        0x06, // length

                                        0xff,

                                        0x06,

                                        0x00,

                                        0x03,

                                        0x00,

                                        0x80,

                                       

                                        0x02,

                                        0x01, // AD Type:

                                        0x05,

 

                                        0x03,

                                        0x19, //AD type

                                        0xC2, //Appearance: HID Mouse (0x03C2)

                                        0x03,

                                       

                                        0x03,

                                        0x03, // UUIDs  0x1812

                                        0x12,

                                        0x18,

                                                       

                                        0x0C, // length

                                        0x09, // AD Type: 09:device full name

                                        0x50, // "P"

                                        0x69, // "i"

                                        0x78, // "x"

                                        0x41, // "A"

                                        0x72, // "r"

                                        0x74, // "t"

                                        0x20, // " "

                                        0x42, // "B"

                                        0x4C, // "L"

                                        0x45, // "E"

                                        0x31, // "1"

                                        };

當電腦收到上面的廣播封包,即在視窗右下角談出如下畫面, 使用者只要點選”連線”即可,省去不少步驟。



至此你可能會問,若裝置名稱太長怎麼辦?廣播封包是否一定要有裝置名稱?以及其他字節代表意義是甚麼? 甚至MAC有支援快速配對嗎? 這就留在下一篇再分享相關AD type定義及長字串名稱如何操作。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論

BenB

BenB

2021年2月3日
你好,请问若裝置名稱太長,解决方法是什么呢?