BLE入門談:從空中數(shù)據(jù)收發(fā)理解BLE(上)
發(fā)布時(shí)間:2021-08-03 責(zé)任編輯:lina
【導(dǎo)讀】BLE是Bluetooth Low Energy的縮寫,即低功耗藍(lán)牙,是藍(lán)牙規(guī)范的一個(gè)子集,從藍(lán)牙4.0版本開(kāi)始引入。BLE技術(shù)成功地適應(yīng)了物聯(lián)網(wǎng)時(shí)代那些需要少量無(wú)線數(shù)據(jù)傳輸,并對(duì)功耗很敏感的設(shè)備的需求。
BLE是Bluetooth Low Energy的縮寫,即低功耗藍(lán)牙,是藍(lán)牙規(guī)范的一個(gè)子集,從藍(lán)牙4.0版本開(kāi)始引入。BLE技術(shù)成功地適應(yīng)了物聯(lián)網(wǎng)時(shí)代那些需要少量無(wú)線數(shù)據(jù)傳輸,并對(duì)功耗很敏感的設(shè)備的需求。目前已經(jīng)有為數(shù)不少的MCU器件將BLE無(wú)線收發(fā)電路集成于片內(nèi),還保持了MCU的低功耗特性,實(shí)現(xiàn)了單芯片的物聯(lián)網(wǎng)解決方案。
近幾年我通過(guò)論壇的活動(dòng),陸續(xù)接觸過(guò)NXP、ST、TI、ON Semi支持BLE的MCU產(chǎn)品,深感BLE的門檻不低。要設(shè)計(jì)一個(gè)充分發(fā)揮BLE優(yōu)點(diǎn)的作品,需要對(duì)這一技術(shù)有比較全面的了解。學(xué)習(xí)理解BLE也需要一個(gè)過(guò)程,如果每次僅僅是把現(xiàn)有的例子拿來(lái)改一改,獲得的經(jīng)驗(yàn)很有限。從什么切入點(diǎn)開(kāi)始學(xué)習(xí)比較好?也許不同的人習(xí)慣不同。我打算從MCU硬件工程師的角度提供一些參考,就有了這篇文章的構(gòu)思。
在MCU上使用BLE,目的不外乎發(fā)送數(shù)據(jù),或者是接收數(shù)據(jù)。為什么BLE入門難?對(duì)比下最簡(jiǎn)單的:UART、SPI,和稍微復(fù)雜一點(diǎn)的I2C、CAN這些——它們都是有線連接(廢話),發(fā)送方對(duì)接收方有一個(gè)單獨(dú)(至少在傳輸時(shí)候是獨(dú)占)的、可靠(正常情況下發(fā)出1/0就收到1/0)的數(shù)據(jù)通道;并且數(shù)據(jù)傳遞之前主機(jī)先發(fā)出請(qǐng)求,或者數(shù)據(jù)自身就帶有請(qǐng)求標(biāo)志。再看BLE,數(shù)據(jù)通過(guò)無(wú)線電波發(fā)出,接收者要判斷天線收到的電波里面有沒(méi)有給自己的信號(hào),再?gòu)挠行У男盘?hào)里解調(diào)出數(shù)據(jù)……復(fù)雜程度已經(jīng)不可比擬了。雖然芯片上的無(wú)線功能模塊已經(jīng)把調(diào)制解調(diào)工作做了,但它的工作指令仍然是軟件下達(dá)的。
BLE要用無(wú)線電波傳遞信息,就是將數(shù)據(jù)編碼,調(diào)制到射頻信號(hào)中發(fā)射。通俗地講BLE使用的電波頻率是2.4G,也就是和Wi-Fi、無(wú)線鍵盤鼠標(biāo), 還有Zigbee、Thread等協(xié)議使用的2.4GHz一個(gè)概念。那么問(wèn)題來(lái)了,這些信號(hào)會(huì)不會(huì)互相干擾?
首先要明確2.4GHz這個(gè)說(shuō)法指的是一個(gè)頻段而不是單一頻率(全稱2.4GHz Industry Science Medicine band),覆蓋從2400MHz到2483.5MHz, 是一個(gè)用于短距離,無(wú)須執(zhí)照使用的開(kāi)放頻段。還必須明確:任何帶有信息的信號(hào)傳遞都要占用一定的帶寬,不可能是一個(gè)單一頻率。單一的頻率只能是一個(gè)永久恒定的正弦信號(hào)——它無(wú)法攜帶信息。例如,無(wú)線電廣播所指的頻率是其信號(hào)的中心頻率。AM(調(diào)幅) 639kHz的中國(guó)之聲,實(shí)際信號(hào)帶寬是它廣播音頻帶寬的2倍。
BLE在這個(gè)2.4GHz頻段安排了40個(gè)信道(channel),中心頻率從2402MHz開(kāi)始,以2MHz為間隔。如下圖上半部分:
上圖的下半部分是2.4G Wi-Fi的信道占用頻帶示意,注意Wi-Fi的不同信道頻帶就很可能存在交疊。Wi-Fi和BLE整體的頻率覆蓋是重疊的。至于不同的2.4GHz無(wú)線設(shè)備是否相互干擾,要看實(shí)際通信的電波的能量分布:以時(shí)間為第一維度,以頻率為第二維度看,只要不交疊,就不會(huì)產(chǎn)生干擾;但即使存在部分交疊,不嚴(yán)重的干擾并不損害被編碼的數(shù)據(jù);干擾的可能性總是存在的,各種無(wú)線協(xié)議還需要校驗(yàn)和重傳機(jī)制來(lái)保證數(shù)據(jù)完整性。
一個(gè)BLE設(shè)備,在任一時(shí)刻,只能選擇40個(gè)信道之中的一個(gè)進(jìn)行發(fā)射或者監(jiān)聽(tīng)。發(fā)射或者試圖監(jiān)聽(tīng)的載波頻率,就是對(duì)應(yīng)信道的中心頻率。
BLE使用的調(diào)制方式叫做GFSK,這是FSK調(diào)制的一個(gè)改進(jìn)形式。FSK (Frequency Shift Keying) 是一種簡(jiǎn)單的調(diào)制的:就是將輸出信號(hào)頻率從2N個(gè)頻率中根據(jù)調(diào)制編碼進(jìn)行選擇切換,最簡(jiǎn)單是1-bit調(diào)制,稱為2-FSK(本文不討論其它的)如下圖所示:
圖上紅線代表編碼數(shù)據(jù),藍(lán)線是輸出信號(hào)波形。注意調(diào)制后信號(hào)的瞬時(shí)頻率改變發(fā)生在編碼值改變的時(shí)刻。
FSK調(diào)制的一個(gè)應(yīng)用是用于音頻電話線路的調(diào)制解調(diào)器(Modem),用兩個(gè)方向的數(shù)據(jù)bit流分別調(diào)制兩個(gè)不同的單音,如下圖所示。在線路一端,發(fā)出1170Hz表示0, 發(fā)出1270Hz表示1;線路另一端發(fā)出2025Hz表示0,發(fā)出2225Hz表示1.
我寫了一段MATLAB程序模擬這樣的調(diào)制波,將生成的wav文件從電腦播放出來(lái)就能感受FSK的頻譜了。
FS=48000;
Tt=10;
t=0:FS*Tt-1;
f_center=1170; %2125;
f_shift=100;
baud=300;
pe0=2*pi/FS*(f_center-f_shift);
pe1=2*pi/FS*(f_center+f_shift);
s=zeros(1,FS*Tt);
c=s;
p=0;
enc_one=0;
for k=1:FS*Tt
s(k) = 0.9*sin(p);
c(k) = enc_one;
if enc_one
p = p+pe1;
else
p = p+pe0;
end
if mod(k,round(FS/baud))==0
if rand>0.5, enc_one=0; else enc_one=1; end
fprintf(''%d'',enc_one);
end
end
fprintf(''n'');
plot(t,s,t,0.5*c-1.5,''r'');
set(gca,''YLim'',[-1.6 1]);
wavwrite(s,48000,16,''fsktone.wav'');
將模擬的modem FSK (300bits/s) 調(diào)制波進(jìn)行FFT分析畫圖,中心頻率1170Hz和2125Hz的載波用不同顏色表示:
FSK調(diào)制的實(shí)現(xiàn)簡(jiǎn)單在于只需要用一個(gè)開(kāi)關(guān)信號(hào)控制振蕩器,讓振蕩器在兩個(gè)工作頻率之間二選一,輸出就是FSK調(diào)制波。從上面這個(gè)頻譜分析圖可以看出,F(xiàn)SK輸出波形的頻率成分能量最集中的那段也有一定跨度,并非只震蕩器的“兩個(gè)頻率”。距離中心頻率遠(yuǎn)了之后能量分布逐漸減少,但仍可能干擾別的信號(hào)。
BLE使用的GFSK調(diào)制,前面加個(gè)G字母代表Gaussian, 是讓控制振蕩器頻率的信號(hào)波形先通過(guò)一個(gè)高斯型低通濾波器,讓跳變沿有個(gè)平緩的過(guò)渡。也就是說(shuō),GFSK調(diào)制器雖然也是兩個(gè)基本振蕩頻率,但切換過(guò)程是平滑的。
GFSK調(diào)制比FSK調(diào)制改善了頻譜的寬度,也就是頻帶的利用效率提高了。BLE使用GFSK調(diào)制,基本數(shù)據(jù)速率是1Mbps, 也就是假若持續(xù)發(fā)射的話一秒可以發(fā)送一百萬(wàn)個(gè)0或者1. BLE 5.0規(guī)范增加了2Mbps選項(xiàng)。
選擇40個(gè)信道中的一個(gè),通過(guò)GFSK,BLE就能將一串0/1發(fā)送到空中去。這40個(gè)信道中有三個(gè)要單獨(dú)拿出來(lái),編號(hào)是37、38、39,它們是專門用于advertising(若譯作“廣播”有些偏,因?yàn)闊o(wú)線電發(fā)射本來(lái)就是廣播行為,接收機(jī)都能收到)。其余37個(gè)信道用于建立連接之后的通信。
順便再提一下,BLE與經(jīng)典藍(lán)牙(常見(jiàn)于藍(lán)牙音箱、耳機(jī))是不能兼容,不能相互通信的。BLE并不是傳統(tǒng)藍(lán)牙的簡(jiǎn)化版本,在信道劃分上就有所不同,從數(shù)據(jù)格式到上層協(xié)議都差異明顯?,F(xiàn)在主流的智能手機(jī)是既支持經(jīng)典藍(lán)牙又支持BLE的,我們?cè)谔峒八{(lán)牙概念的時(shí)候要注意區(qū)分。
BLE的數(shù)據(jù)發(fā)送是以數(shù)據(jù)包(packet)為單位進(jìn)行的,一個(gè)數(shù)據(jù)包就是一串有格式的0和1,經(jīng)GFSK調(diào)制成某個(gè)信道上的載波,再被接收機(jī)解調(diào)還原(這當(dāng)中其實(shí)還有兩個(gè)步驟分別叫做whitening和de-whitening,但不改變數(shù)據(jù)長(zhǎng)度和功能,就姑且忽略了)。如下圖,一個(gè)原始BLE數(shù)據(jù)包由4段組成:頭部是8-bit Preamble,用于同步,然后是32-bit的Access Address (后面再看它的作用),接著才是數(shù)據(jù)包內(nèi)容的payload,最后跟著24-bit的CRC校驗(yàn)值。
接收狀態(tài)的BLE設(shè)備需要在同一信道上監(jiān)聽(tīng),才有可能收到這個(gè)數(shù)據(jù)包。接收方還需要知道數(shù)據(jù)包長(zhǎng)度才能進(jìn)行CRC校驗(yàn),包長(zhǎng)度是包含在PDU段內(nèi)的。包的類型不同,PDU的具體格式也不同。
信道37、38和39用于advertising, 這是BLE從設(shè)備用來(lái)表示自己存在的三個(gè)信道,也是主設(shè)備用來(lái)掃描和發(fā)起連接用的。在這三個(gè)信道中,數(shù)據(jù)包格式如下圖:
Advertising信道中的數(shù)據(jù)包類型有7種,由PDU header字段的PDU Type域決定。包長(zhǎng)度信息是header字段的Length域。根據(jù)包類型不同,Payload的內(nèi)容也不同。ADV_IND, ADV_NONCONN_IND, ADV_SCAN_IND和ADV_DIRECT_IND類型的包是從設(shè)備按照自己的間隔發(fā)出來(lái)的,其中AdvA數(shù)據(jù)字段是自己的地址(手機(jī)上的BLE掃描工具看到的就是這個(gè)地址),AdvData數(shù)據(jù)字段提供其它信息比如設(shè)備名稱、廠商代碼等,還可以包括溫度傳感器數(shù)據(jù)這樣的自定信息。ADV_DIRECT_IND這個(gè)類型要特殊一點(diǎn),它是給指定的主設(shè)備發(fā)起連接用的,不附加不必要的數(shù)據(jù)。
ADV_IND和ADV_SCAN_IND類型的包被主設(shè)備收到后,主設(shè)備可以馬上發(fā)送SCAN_REQ包,請(qǐng)求掃描這個(gè)設(shè)備,然后從設(shè)備再以SCAN_RSP包回應(yīng),提供補(bǔ)充數(shù)據(jù)(ScanRspData)。
只有當(dāng)主設(shè)備要發(fā)起連接時(shí),才會(huì)對(duì)從設(shè)備發(fā)送的包(僅ADV_IND和ADV_DIRECT_IND型有效)以CONNECT_REQ包回應(yīng)。這樣,主從設(shè)備之間就算建立起了連接,接下來(lái)將在另外的37個(gè)信道中進(jìn)行信息交換。
剛提到過(guò)的從設(shè)備advertising有自己的間隔,這由BLE的API中advInterval參數(shù)(就是“隔多長(zhǎng)時(shí)間廣播一次”的意思)決定。但是,如果兩個(gè)設(shè)備的advInterval參數(shù)剛好一樣,就有可能碰巧每次都同時(shí)廣播,相互干擾。為了緩解這個(gè)問(wèn)題,BLE規(guī)定實(shí)際兩個(gè)advertising事件之間的間隔還要加上一個(gè)隨機(jī)的延遲,如下圖:
這里的間隔越短,其它條件不變的話,設(shè)備越容易被發(fā)現(xiàn)。當(dāng)然,付出的代價(jià)是耗電也增加。前面說(shuō)了用于advertising的信道有3個(gè),通常主設(shè)備也會(huì)在這三個(gè)信道上輪流監(jiān)聽(tīng),因此,一個(gè)advertising事件一般來(lái)說(shuō)是在三個(gè)信道上分別發(fā)送一個(gè)數(shù)據(jù)包。這么做可以防止一個(gè)信道被干擾了就無(wú)法使用的情況(注意信道37、38和39的頻率并不是接近的)。下面是一個(gè)示意圖,其中38信道上主機(jī)進(jìn)行了一次掃描。
現(xiàn)在我要提醒大家一點(diǎn):接收(監(jiān)聽(tīng))狀態(tài)下BLE無(wú)線部分也是消耗很多能量的,沒(méi)有比發(fā)射狀態(tài)少太多。與片上的CPU耗電相比,BLE的無(wú)線功能的確是耗電大戶,各廠商會(huì)把TX/RX時(shí)的電流作為省電能力衡量的重要指標(biāo)——重點(diǎn),RX的耗電不能想當(dāng)然忽略。
作為從設(shè)備,在進(jìn)行advertising事件的時(shí)候,才需要把無(wú)線發(fā)射功能打開(kāi)。在此外的間歇期間(幾十毫秒到幾秒)設(shè)備可以休眠等待,因此平均功耗可能很低。但是主設(shè)備想發(fā)現(xiàn)從設(shè)備,可就不能長(zhǎng)時(shí)間睡大覺(jué)了,因?yàn)閺脑O(shè)備只有一瞬間發(fā)射,如果主設(shè)備那時(shí)沒(méi)有監(jiān)聽(tīng),就錯(cuò)過(guò)了。但主設(shè)備一直處于(三個(gè)信道輪流的)監(jiān)聽(tīng)狀態(tài),無(wú)線部分的耗電就很大了。通常主設(shè)備也會(huì)間歇性地監(jiān)聽(tīng)來(lái)查找從設(shè)備,也就是持續(xù)接收一段時(shí)間,再休息一陣的策略。如果從設(shè)備為了減少自身功耗,將廣播的間隔設(shè)得很長(zhǎng),那么主設(shè)備要發(fā)現(xiàn)它就要付出更多的功耗。
BLE要做到主機(jī)和從機(jī)的功耗都小,其要點(diǎn),我概括為“在事先約定的時(shí)間地點(diǎn)碰頭”。上面所描述的從機(jī)advertising階段,主機(jī)因?yàn)闊o(wú)法得知從機(jī)在哪個(gè)時(shí)刻在三個(gè)信道中的哪一個(gè)廣播,不得不采取守株待兔的辦法,所以主機(jī)耗電不能像從機(jī)那樣低。但是兩者建立BLE連接之后就不一樣了,現(xiàn)在回顧主機(jī)為了建立連接向從機(jī)發(fā)送的CONNECT_REQ包的Payload內(nèi)容:
除了主機(jī)和從機(jī)的BLE地址之外,LLData部分包含了許多字段:
AA: Access Address, 用于數(shù)據(jù)信道數(shù)據(jù)包中
CRCInit: 隨機(jī)生成的CRC初始值
WinSize: Connection Event Transmit Window Size, 以1.25ms為單位
WinOffset: 同上,Transmit Window的時(shí)間偏移量
Interval: Connection Event的間隔時(shí)間
Latency: Slave Latency參數(shù)
Timeout: connSupervisionTimeout參數(shù),以10ms為單位
ChM: 標(biāo)記要使用的數(shù)據(jù)信道
Hop: hopIncrement, 是跳頻算法的參數(shù)
SCA: 主機(jī)的sleep時(shí)鐘誤差參數(shù)
由以上這些字段決定了BLE連接的初始參數(shù)。從機(jī)如何知道主機(jī)會(huì)在什么時(shí)候,在那個(gè)信道發(fā)送數(shù)據(jù)包?請(qǐng)看下面這個(gè)圖:
實(shí)際上,主機(jī)和叢機(jī)約定了一個(gè)未來(lái)的時(shí)間窗口,主機(jī)會(huì)在那個(gè)時(shí)間窗口內(nèi)發(fā)送第一個(gè)數(shù)據(jù)包,從機(jī)需要保持監(jiān)聽(tīng)。因?yàn)殡p方約定了一個(gè)時(shí)間窗口,無(wú)線電RX狀態(tài)的時(shí)間就可以縮短了,就控制了功耗。主機(jī)發(fā)送數(shù)據(jù)包之后,轉(zhuǎn)到接收狀態(tài),叢機(jī)接收到主機(jī)的數(shù)據(jù)包,也會(huì)很快回應(yīng)一個(gè)數(shù)據(jù)包,這兩次雙向的數(shù)據(jù)交互時(shí)間是可以預(yù)計(jì)的,不存在無(wú)用的RX等待狀態(tài)。然后,主機(jī)在一個(gè)連接間隔(connInterval)之后的時(shí)刻再次發(fā)出數(shù)據(jù)包,也就是新的connection事件開(kāi)始,不過(guò)通信信道由自適應(yīng)跳頻算法重新選擇。上圖只畫了最簡(jiǎn)單的狀態(tài),實(shí)際一個(gè)connection事件可以有多次的雙向數(shù)據(jù)包交互。
把從機(jī)和主機(jī)并排起來(lái)看:
上圖還展示了BLE連接狀態(tài)的一個(gè)特性: slave latency, 即允許從機(jī)不響應(yīng)一些(可能是沒(méi)有收到的)數(shù)據(jù)包,而連接暫時(shí)能保持,不斷掉。因?yàn)殡p方的時(shí)間間隔約定還在,后續(xù)只要成功交互就可以恢復(fù)通信。
BLE連接狀態(tài)下的數(shù)據(jù)包格式本文就不列出了,因?yàn)樯婕暗絃ink Layer層的許多內(nèi)容,要深入了解的朋友可以參閱藍(lán)牙Core specification 4.0以后版本文檔。
本文的目的在于給大家一個(gè)BLE的底層是怎么工作的一個(gè)整體印象,以及認(rèn)識(shí)到它是怎樣實(shí)現(xiàn)低功耗的無(wú)線數(shù)據(jù)交互的。
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)電話或者郵箱聯(lián)系小編進(jìn)行侵刪。
特別推薦
- 復(fù)雜的RF PCB焊接該如何確保恰到好處?
- 電源效率測(cè)試
- 科技的洪荒之力:可穿戴設(shè)備中的MEMS傳感器 助運(yùn)動(dòng)員爭(zhēng)金奪銀
- 輕松滿足檢測(cè)距離,勞易測(cè)新型電感式傳感器IS 200系列
- Aigtek推出ATA-400系列高壓功率放大器
- TDK推出使用壽命更長(zhǎng)和熱點(diǎn)溫度更高的全新氮?dú)馓畛淙嘟涣鳛V波電容器
- 博瑞集信推出低噪聲、高增益平坦度、低功耗 | 低噪聲放大器系列
技術(shù)文章更多>>
- 如何選擇和應(yīng)用機(jī)電繼電器實(shí)現(xiàn)多功能且可靠的信號(hào)切換
- 基于APM32F411的移動(dòng)電源控制板應(yīng)用方案
- 數(shù)字儀表與模擬儀表:它們有何區(qū)別?
- 聚焦制造業(yè)企業(yè)貨量旺季“急難愁盼”,跨越速運(yùn)打出紓困“連招”
- 選擇LDO時(shí)的主要考慮因素和挑戰(zhàn)
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
光收發(fā)器
光通訊器件
光纖連接器
軌道交通
國(guó)防航空
過(guò)流保護(hù)器
過(guò)熱保護(hù)
過(guò)壓保護(hù)
焊接設(shè)備
焊錫焊膏
恒溫振蕩器
恒壓變壓器
恒壓穩(wěn)壓器
紅外收發(fā)器
紅外線加熱
厚膜電阻
互連技術(shù)
滑動(dòng)分壓器
滑動(dòng)開(kāi)關(guān)
輝曄
混合保護(hù)器
混合動(dòng)力汽車
混頻器
霍爾傳感器
機(jī)電元件
基創(chuàng)卓越
激光二極管
激光器
計(jì)步器
繼電器