丁福建,劉倩蕓,王鋼,劉文文,林敏
(上海大學(xué)通信與信息工程學(xué)院特種光纖與光接入網(wǎng)重點實驗室,上海 200444)
藍(lán)牙自提出的23年以來,已成為普適計算以及物聯(lián)網(wǎng)(Internet of Things,IoT)應(yīng)用程序中的一種廣泛使用的技術(shù)。低功耗藍(lán)牙(Bluetooth Low Energy,BLE)信標(biāo)作為其中的重要部分,在IoT 開發(fā)中極具發(fā)展前景,現(xiàn)已部署上億BLE 信標(biāo)設(shè)備[1]。
由于低成本、低功耗等突出優(yōu)勢,低功耗藍(lán)牙信標(biāo)已被廣泛地用于IoT 中,例如商場中通過信標(biāo)發(fā)送優(yōu)惠券、通過信標(biāo)使用指紋識別定位BLE 設(shè)備、博物館指導(dǎo)、室內(nèi)定位與跟蹤、幫助盲人和殘疾人、管理智能家庭等[2]。蘋果公司推出的iBeacon 和谷歌公司推出的Eddystone 使用BLE 的不可連接廣播作為信標(biāo)[3-4]。它們均使用標(biāo)準(zhǔn)的BLE MAC 層協(xié)議作為其BLE 信標(biāo)設(shè)備控制器的MAC 層解決方案。但這種解決方案在BLE 信標(biāo)的使用場景中卻存在一些問題,傳統(tǒng)廣播(Legacy Advertising)的通信范圍較小,無法滿足遠(yuǎn)距離傳輸?shù)囊?,冗余的功能會增大硬件資源的消耗,因此需要提出更符合實際應(yīng)用的定制化MAC 層協(xié)議。
該文針對iBeacon、Eddystone 的應(yīng)用場景,在BLE5.0 標(biāo)準(zhǔn)MAC 層協(xié)議的基礎(chǔ)上提出了一種精簡的低功耗藍(lán)牙MAC 協(xié)議,為BLE 信標(biāo)設(shè)備提供了低成本、低功耗、4 倍廣播距離的MAC 層實現(xiàn)方案。
低功耗藍(lán)牙MAC 層協(xié)議的狀態(tài)機(jī)如圖1(a)所示,有就緒態(tài)、廣播態(tài)、掃描態(tài)、發(fā)起態(tài)和連接態(tài)五個狀態(tài)[5]。在該文協(xié)議的應(yīng)用場景中,信標(biāo)設(shè)備會以固定的時間間隔向周邊的信標(biāo)接收設(shè)備發(fā)送攜帶少量信息的廣播。由于一個只發(fā)廣播的設(shè)備無需切換到標(biāo)準(zhǔn)協(xié)議下的掃描態(tài)、發(fā)起態(tài)和連接態(tài),因此協(xié)議的狀態(tài)機(jī)可以簡化為圖1(b)所示的狀態(tài)機(jī),其中只含就緒態(tài)和廣播態(tài)兩個狀態(tài)。
圖1 狀態(tài)機(jī)對比
隨著狀態(tài)機(jī)的改變,精簡MAC 層協(xié)議的功能在BLE5.0 標(biāo)準(zhǔn)協(xié)議的基礎(chǔ)上也應(yīng)做出相應(yīng)改變。在多狀態(tài)機(jī)的處理上,BLE5.0 標(biāo)準(zhǔn)協(xié)議需要對不同狀態(tài)機(jī)下的事件進(jìn)行調(diào)度和狀態(tài)跳轉(zhuǎn),而該文協(xié)議只需保持在廣播態(tài)下工作,進(jìn)行定時廣播,無需調(diào)度其他事件。
在幀處理方面,BLE5.0 MAC 層需要設(shè)計數(shù)據(jù)發(fā)送和接收子系統(tǒng),對發(fā)送和接收的數(shù)據(jù)進(jìn)行處理。而精簡協(xié)議由于只發(fā)送廣播不進(jìn)行接收處理,在設(shè)計時只需數(shù)據(jù)發(fā)送子系統(tǒng)完成比特流的處理即可,其中包括組幀、產(chǎn)生CRC 校驗位、數(shù)據(jù)白化和編碼等模塊。因此BLE5.0 標(biāo)準(zhǔn)協(xié)議中所需的AES-128 加密、過濾機(jī)制、白名單、確認(rèn)與流控、FEC 解碼器和跳頻算法等有關(guān)接收處理和連接狀態(tài)下的功能模塊可以移除。
經(jīng)重新設(shè)計后,精簡MAC 層協(xié)議在硬件實現(xiàn)時只需按主機(jī)的需要定時發(fā)送廣播事件以及設(shè)計發(fā)送子系統(tǒng)模塊、系統(tǒng)總線和物理層接口等相關(guān)模塊。
在BLE5.0協(xié)議中,連接態(tài)和擴(kuò)展廣播的4倍通信范圍是在1 Mbps速率編碼的物理層(LE_Coded_PHY)下實現(xiàn)的,MAC 層對幀內(nèi)字段進(jìn)行卷積碼編碼和模式映射,從而提高接收機(jī)的抗干擾能力。在其中采用約束長度為4,編碼速率為1/2 的(2,1,3)卷積碼編碼器和s=8 的映射方式,卷積碼編碼器生成多項式如式(1)和式(2)[6-7]:
該文為實現(xiàn)long-range 傳統(tǒng)廣播功能并且與標(biāo)準(zhǔn)協(xié)議兼容,使用與BLE5.0 標(biāo)準(zhǔn)協(xié)議相同的(2,1,3)卷積碼編碼器和模式映射方式,除此外還對傳統(tǒng)廣播的幀結(jié)構(gòu)進(jìn)行更改。傳統(tǒng)廣播的幀結(jié)構(gòu)如圖2(a)所示,由前導(dǎo)碼(Preamble)、接入地址(Access Address)、負(fù)載報頭(Header)、負(fù)載(Payload)和CRC 校驗位組成。在實現(xiàn)傳統(tǒng)廣播時使用標(biāo)準(zhǔn)協(xié)議的幀結(jié)構(gòu),不做改動;long-range 廣播幀則在傳統(tǒng)廣播幀結(jié)構(gòu)的基礎(chǔ)上添加新字段,在幀結(jié)構(gòu)中加入編碼指示(CI)字段、編碼終止1(TERM1)和編碼終止2(TERM2)字段,如圖2(b)所示。
圖2 廣播幀幀結(jié)構(gòu)
long-range 廣播幀結(jié)構(gòu)分為前導(dǎo)碼、接入地址、由Header 和Payload 組成的協(xié)議數(shù)據(jù)單元PDU(Protocol Data Unit)、校驗位和3 個編碼指示字段共五部分。其中前導(dǎo)碼不進(jìn)行卷積碼編碼,在LE_Coded_PHY 下長度為80 個符號,由00111100 序列重復(fù)十次得到;接入地址為固定值0x8E89BED6;編碼指示(CI)長度為2 bits,用于指示編碼塊2 的模式映射方式;編碼終止1(TERM1)字段長度為3 bits,是編碼塊1 的編碼結(jié)束標(biāo)志位;編碼終止2(TERM2)字段長度為3 bits,是編碼塊2 的編碼結(jié)束標(biāo)志位。
根據(jù)協(xié)議的狀態(tài)機(jī)和功能,該文所設(shè)計的MAC層整體架構(gòu)如圖3 所示,由MAC 頂層狀態(tài)機(jī)、TIMER、發(fā)送子系統(tǒng)、隨機(jī)數(shù)生成模塊、信道選擇模塊、TX_RAM、寄存器、AHB_SLAVE 端口和物理層接口九部分組成,其功能如下:
圖3 MAC層整體架構(gòu)
1)AHB_SLAVE與處理主機(jī)MCU的AHB_MASTER端口相連,將上層主機(jī)的數(shù)據(jù)進(jìn)行解碼后對寄存器內(nèi)的值進(jìn)行修改,并將需要發(fā)送的數(shù)據(jù)存在TX_RAM 中;
2)MAC 頂層狀態(tài)機(jī)根據(jù)上層主機(jī)寫入寄存器中的配置信息,對MAC 層的狀態(tài)和其他硬件模塊進(jìn)行控制;
3)TIMER 包含負(fù)責(zé)調(diào)度MAC 層事件的活動計時器和睡眠計時器;
4)信道選擇模塊用于廣播信道的切換;
5)發(fā)送子系統(tǒng)負(fù)責(zé)幀的比特流處理;
6)物理層接口與物理層相連,提供物理層所需要的控制信號。
發(fā)送子系統(tǒng)模塊對發(fā)送幀的比特流處理過程如圖4 所示,發(fā)送狀態(tài)機(jī)根據(jù)上層的配置,生成對其他模塊進(jìn)行控制的使能(enable_signal)、選擇(sel_signal)、有效信號(valid_signal)和幀內(nèi)的數(shù)據(jù)字段(pack_data);序列化模塊由發(fā)送狀態(tài)機(jī)的有效信號和使能信號控制,對TX_RAM 中的數(shù)據(jù)進(jìn)行序列化處理;CRC 模塊對PDU 進(jìn)行處理,生成24 bits 的校驗位[8];白化模塊是一個7 bits 的線性反饋移位寄存器;卷積碼編碼器僅在LE_Coded_PHY下使用,對幀內(nèi)的編碼塊進(jìn)行卷積碼編碼和模式映射[9-10]。
圖4 發(fā)送幀的比特流處理
比特流處理按以下流程進(jìn)行:
1)發(fā)送狀態(tài)機(jī)根據(jù)主機(jī)的配置生成控制信號和Header;
2)序列化模塊串行化TX_RAM 中的Payload 后與Header 組成PDU;
3)送至CRC 模塊生成校驗位;
4)將PDU 和CRC 校驗位輸入到白化模塊進(jìn)行白化處理(增加白噪聲,避免過長的連0 或連1);
5)白化后的數(shù)據(jù)在卷積碼編碼映射模塊中,根據(jù)編碼使能信號(encoder_en)、編碼速率(encoder_rate)和編碼指示(ci)等信號決定對編碼塊進(jìn)行編碼和模式映射的方式[11]。
在發(fā)送子系統(tǒng)模塊中完成MAC 幀的比特流處理和組幀后,MAC 頂層狀態(tài)機(jī)根據(jù)計時器(TIMER)中的定時信息,將MAC 幀通過物理層接口發(fā)送至物理層,由物理層對MAC 幀進(jìn)行調(diào)制。MAC 層的整體處理流程圖如圖5 所示。
圖5 MAC層處理流程圖
2.2.1 方案設(shè)計
RTL 級實現(xiàn)是用寄存器來描述電路的數(shù)據(jù)流方式,Verilog-HDL 代碼必須滿足可綜合的設(shè)計需求。在該文的仿真實驗中,聯(lián)合BLE5.0 的物理層和射頻模塊進(jìn)行協(xié)同仿真,在一套較為完善的通信系統(tǒng)中對精簡MAC 層協(xié)議進(jìn)行仿真驗證。
在仿真中,該文所設(shè)計的精簡MAC 層協(xié)議作為仿真中的廣播設(shè)備進(jìn)行廣播,定時發(fā)送廣播事件;掃描設(shè)備對廣播幀進(jìn)行掃描并解析。為驗證該文所設(shè)計的long-range 廣播功能,掃描設(shè)備增加了在LE_Coded_PHY 下對37、38 和39 號廣播信道進(jìn)行掃描的功能,以便對long-range 廣播進(jìn)行接收和比特流的處理。
2.2.2 仿真結(jié)果分析
以廣播設(shè)備發(fā)送long-range 廣播幀的仿真結(jié)果為例,圖6(a)是廣播設(shè)備在LE_Coded_PHY 下發(fā)送不可連接long-range 廣播的MAC 層部分信號仿真結(jié)果圖,MAC 層中的數(shù)據(jù)經(jīng)過比特流處理后得到longrange 廣播幀(o_pp_tx_data_out 信號),再以一定的廣播間隔發(fā)送。
圖6(b)為掃描設(shè)備在LE_Coded_PHY 下掃描long-range 廣播幀,并解析出幀內(nèi)各個字段的仿真圖。掃描設(shè)備解析出接收到的幀為一個不可連接的廣播幀;廣播地址為0x0000_0000_1234;負(fù)載數(shù)據(jù)為0xd609;幀內(nèi)各個字段的錯誤標(biāo)志信號(*_err)均為低電平。仿真表明接收到的不可連接long-range 廣播幀的各個字段均正確,且解析出的幀內(nèi)信息與廣播設(shè)備發(fā)送的相同。
圖6 long-range廣播幀仿真圖
結(jié)果顯示,精簡MAC 協(xié)議層的long-range 廣播幀通過物理層調(diào)制,經(jīng)射頻模塊發(fā)送出去后,掃描設(shè)備的射頻模塊、物理層和MAC 層能夠正確地接收、解調(diào)并將幀內(nèi)的各個字段和負(fù)載信息正確地解析出來,由此驗證了協(xié)議的long-range 廣播幀遠(yuǎn)距離通信的可行性。對于BLE5.0 中的其他類型廣播功能該文均已實現(xiàn),由于篇幅有限,未將仿真結(jié)果呈現(xiàn)。
3.1.1 驗證平臺與流程
為驗證所設(shè)計的協(xié)議在電路上是否能夠?qū)崿F(xiàn),還需要對精簡MAC 層協(xié)議進(jìn)行FPGA 驗證。使用PC 和芯片型號為Zynq-7035 的FPGA 板進(jìn)行聯(lián)合測試[12-13]。
圖7為該文所設(shè)計的FPGA驗證平臺,主要由PC、開源的UDP 協(xié)議和被測的精簡MAC 層協(xié)議組成[14]。其中PC 作為上位機(jī),其IP 地址設(shè)為192.168.10.2,F(xiàn)PGA 板 的IP 地址 設(shè)為192.168.10.1;FIFO1 用于存儲UDP 協(xié)議解析出的負(fù)載數(shù)據(jù);MAC(ADV)為被測的精簡MAC 層協(xié)議,為一個廣播設(shè)備;MAC(SCAN)為處理廣播幀的掃描設(shè)備;控制模塊(Control &FIFO2)作為廣播設(shè)備與掃描設(shè)備之間的接口;FIFO3 可存儲掃描設(shè)備解析出的負(fù)載數(shù)據(jù)。
圖7 FPGA驗證平臺
在測試過程中,PC 會將廣播幀的負(fù)載數(shù)據(jù)寫在UDP 報文的負(fù)載中,通過以太網(wǎng)發(fā)送到FPGA 板上,由UDP 協(xié)議解析出其中的負(fù)載數(shù)據(jù)并存入FIFO1中;當(dāng)FIFO1 中的數(shù)據(jù)量達(dá)到預(yù)設(shè)值時,廣播設(shè)備讀取FIFO1 中的數(shù)據(jù)并進(jìn)行MAC 層配置和比特流處理;組幀完成后發(fā)送到FIFO2 中,并產(chǎn)生相應(yīng)的控制信號;掃描設(shè)備根據(jù)控制模塊的控制信號,讀取FIFO2 中的廣播幀并進(jìn)行解析,將解析出的負(fù)載數(shù)據(jù)存在FIFO3 中;UDP 協(xié)議讀取FIFO3 中的數(shù)據(jù),存在UDP 報文負(fù)載中,發(fā)送至PC 進(jìn)行對比。通過判斷處理后的數(shù)據(jù)與發(fā)送的是否一致,以此驗證MAC 層功能的正確性。
3.1.2 FPGA驗證結(jié)果分析
為使分析結(jié)果更加直觀,該文使用特定ASCII 碼對應(yīng)的十六進(jìn)制數(shù)作為待處理數(shù)據(jù)。上位機(jī)發(fā)送的數(shù)據(jù)ASCII 碼000000001234shushushushushushushu shu 對應(yīng)的十六進(jìn)制數(shù),這些數(shù)據(jù)作為UDP 報文的負(fù)載,通過以太網(wǎng)發(fā)送到FPGA 板。0000_0000_1234是廣播設(shè)備的廣播地址,shushushushushushushushu為負(fù)載數(shù)據(jù)。
在驗證過程中,使用Python 腳本向FPGA 板發(fā)送UDP 報文[15-16]。UDP 報文經(jīng)過UDP 協(xié)議、廣播設(shè)備(被測協(xié)議)和掃描設(shè)備處理后再通過FPGA 板上的UDP 協(xié)議發(fā)向PC 端,在此期間PC 端使用xcap 軟件進(jìn)行抓包。圖8 是UDP 報文的負(fù)載,也就是掃描設(shè)備解析后得到的廣播地址和負(fù)載數(shù)據(jù),其中分號左側(cè)陰影部分為十六進(jìn)制數(shù)據(jù),分號右側(cè)為十六進(jìn)制數(shù)對應(yīng)的ASCII 碼值。經(jīng)過對比,上位機(jī)Python 腳本發(fā)送的廣播地址和負(fù)載數(shù)據(jù)與xcap 抓包軟件所接收的數(shù)據(jù)相同,并且IP 地址也對應(yīng)。通過以上實驗可驗證精簡MAC 層協(xié)議RTL 級設(shè)計的正確性。
圖8 PC接收到的UDP包
該文在Vivado 2018.3,芯片型號xc7z035ffg-676-2的實驗環(huán)境下進(jìn)行FPGA 綜合[17]。該文提出協(xié)議綜合后,使用了5 641 個LUT、11 076 個FF 和124 個IO;BLE5.0 標(biāo)準(zhǔn)協(xié)議使用12 751 個LUT、14 646 個FF、1 個DSP 和156 個IO。由于傳統(tǒng)廣播是不進(jìn)行加密的,標(biāo)準(zhǔn)協(xié)議在不考慮AES-128 模塊的情況下,使用8 206 個LUT、12 414 個FF、1 個DSP 和134 個IO。
表1 中列出了除去RAM(3 種情況下RAM 均設(shè)為1 kbytes,占 用FPGA的資源為2 176 個LUT 和8 256 個FF)情況下FPGA 綜合后的資源對比。該文所提出的精簡MAC 層協(xié)議只使用了FPGA 上的LUT和FF 兩種資源。經(jīng)計算,在不包含RAM 的情況下,與加密的BLE5.0 標(biāo)準(zhǔn)協(xié)議相比,該文提出的協(xié)議可以節(jié)省67.2%的LUT、55.9%的FF 和1 個DSP 單元,比不加密的BLE5.0 標(biāo)準(zhǔn)協(xié)議節(jié)省42.5%的LUT、32.2%的FF 和1 個DSP 單元。
表1 協(xié)議占用資源
該文根據(jù)iBeacon 和Eddystone 的使用場景提出一種低成本、遠(yuǎn)距離、低功耗的精簡BLE5.0 MAC 層協(xié)議。通過RTL 級的仿真實驗,驗證了協(xié)議的longrange 廣播功能和標(biāo)準(zhǔn)協(xié)議的廣播功能;使用FPGA在實際電路中對該文提出的MAC 層協(xié)議的邏輯設(shè)計進(jìn)行驗證。在通信距離上,通過對廣播幀的編碼和模式映射,可超過傳統(tǒng)廣播4 倍;在FPGA 資源的消耗上,該協(xié)議與加密的BLE5.0MAC 層相比,節(jié)省了67.2%的LUT、55.9%的FF 和1 個DSP 單元,與不加密的BLE5.0MAC 相比,F(xiàn)PGA 資源節(jié)省了42.5%的LUT、32.2%的FF 和1 個DSP 單元。