BLE 概覽
第一章 什么是低功耗藍牙(Bluetooth Low Energy)
低功耗藍牙是一項新技術(shù)热凹,它不但是傳統(tǒng)藍牙(classic Bluetooth)的補充物独,同時也幾乎是市面上最低功耗的無線技術(shù)了贤笆。雖然它從傳統(tǒng)藍牙借鑒了許多技術(shù)现斋,但是低功耗藍牙由于不同的設(shè)計目標和不同的細分市場,依然應(yīng)該被視為一項不同的技術(shù)俐末。
傳統(tǒng)藍牙被設(shè)計成串聯(lián)不同世界的計算和通訊設(shè)備料按,把手機連接到筆記本上。然而卓箫,傳統(tǒng)藍牙最核心的應(yīng)用是在手機與耳機類似的設(shè)備建立連接载矿。隨著需求的不斷提升,傳統(tǒng)藍牙的速率也在不斷加強烹卒。藍牙從BR(Basic Rate)的最大物理層速率1Mbps,到在藍牙2.0版本中添加Enhanced Data Rate(EDR)的3Mbps闷盔,再到3.0版本的Alternate MAC-PHY能達到數(shù)百兆每秒弯洗。
但是低功耗藍牙走了完全不同的方向,不是提高速率而是優(yōu)化功耗逢勾。
已知的傳統(tǒng)藍牙技術(shù)不能滿足紐扣電池牡整,所以另外一個不同的方向被開辟出來了。雖然已經(jīng)完全了解低功耗方面的需求了溺拱,另外一個方面也需要考慮逃贝。那就是數(shù)量的問題。低功耗藍牙非常大量地部署的一種方法
就是價格低迫摔。例如沐扳,RFID(Radio frequency identification)標簽?zāi)鼙淮罅繎?yīng)用的原因就是價格非常低,尤其是通過價格更貴一些的掃描器提供能量攒菠。
因此迫皱,低價對于低功耗藍牙有著極其關(guān)鍵的意義。三個因素使這個設(shè)計能達到低價:
- ISM 頻段
2.4Ghz 的ISM頻段對于無線技術(shù)的設(shè)計和使用來說都是一個噩夢辖众。它的傳播特性非常弱卓起,因為無線電的能量很容易被其他任何東西吸收,尤其是水凹炸。而人體又幾乎是由水構(gòu)成的戏阅。幾乎可以說是這個缺點使這個頻譜成為了全球都不需要牌照的無線頻譜。免費意味著其他技術(shù)都將使用這個頻譜啤它,包括Wi-Fi奕筐。不需要牌照并不意味著沒有任何限制,這些限制主要在限制設(shè)備的發(fā)射功率方面变骡。然而离赫,即使有這些限制,免費的頻段也遠遠好過付費的塌碌。 - IP 牌照
當Wibree(藍牙的前身)技術(shù)已經(jīng)成熟到融合到一個已有的無線標準組織時渊胸,諾基亞(Nokia)可以選擇這項技術(shù)給任何類似的組織。但是諾基亞沒有選擇WiFi聯(lián)盟(Wi-Fi Alliance)台妆,而是聲譽和許可政策都非常好的SIG(Bluetooth Special Interest Group)翎猛。這些政策意味著每個藍牙設(shè)備的授權(quán)費都會非常低。 - 低功耗
設(shè)計一款低價設(shè)備最好的方式就是減少使用的材料接剩,如電池等切厘。更換電池得花錢,這不僅是需要重新買一塊電池懊缺,再安裝進去疫稿,也意味者設(shè)備不能正常工作的機會成本。
因此 低功耗的設(shè)計初衷就是能與紐扣電池協(xié)同工作——最小,最便宜且最容易適應(yīng)各種類型電池的而克。但是靶壮,這也意味著你不能用它達到高速率數(shù)據(jù)傳輸、大量數(shù)據(jù)傳輸或者數(shù)據(jù)流傳輸。這也是低功耗藍牙和傳統(tǒng)藍牙最重要的區(qū)別枯怖。
1.1設(shè)備類型
低功耗藍牙的出現(xiàn)造就了兩種類型的設(shè)備:雙模設(shè)備和單模設(shè)備挂绰。雙模設(shè)備既支持傳統(tǒng)藍牙也支持低功耗藍牙。單模設(shè)備要么只支持低功耗藍牙寒砖,要么只支持傳統(tǒng)藍牙。
很明顯雙模的設(shè)備可以與現(xiàn)有的藍牙設(shè)備進行通訊。很明顯低功耗藍牙的單模設(shè)備不能與現(xiàn)有的藍牙設(shè)備進行通訊筋帖,但是它依然能夠與其他的低功耗藍牙的單模設(shè)備和雙模的藍牙設(shè)備通訊。傳統(tǒng)藍牙單模設(shè)備不能與低功耗藍牙單模設(shè)備通訊冤馏,但是傳統(tǒng)藍牙可以與雙模設(shè)備或者傳統(tǒng)藍牙單模設(shè)備通過BR/EDR通訊日麸。
1.2 設(shè)計目標
在學(xué)習(xí)任何技術(shù)的時候,總是會有一個首先被提到:設(shè)計者如何優(yōu)化這項技術(shù)逮光。許多技術(shù)都是有一兩項擅長的地方和更多的是不擅長的代箭。在決定這一兩項目標的時候,對于這項技術(shù)會有一個更好的理解涕刚。
藍牙的主要目標包括:
- 全球可用
- 低價
- 健壯
- 短距離
- 低功耗
其中低功耗藍牙的功耗是其主要設(shè)計目標嗡综。從物理層到應(yīng)用層全面全部都由Bluetooth SIG設(shè)計,以達到最好的低功耗效果杜漠。
1.3 術(shù)語
AFH(Adaptive Frequency Hopping) 只使用一部分信道的技術(shù)极景。這能有效避開那些被長時間占用的信道。
Frequency Hopping 兩個器件之間通訊使用多個信道驾茴。在一個時間使用一個信道盼樟,并且按照事先定義好的序列選擇信道。
第二章 基本概念
低功耗藍牙不是對傳統(tǒng)藍牙的優(yōu)化锈至,而是對新的細分市場重新設(shè)計的無線標準晨缴。這個細分市場要求再一秒到幾天的時間內(nèi),器件之間的通訊只有少量的數(shù)據(jù)裹赴。這包括了一些控制和檢測應(yīng)用喜庞,如檢測窗戶是不是開著,根據(jù)電價的波動開關(guān)一些電器棋返,或者給電視機換臺延都。
2.1 紐扣電池
紐扣電池是低功耗藍牙的主要設(shè)計目標。這樣的電池有著非常嚴格的使用條件睛竣。
<div align="center">圖2-1 紐扣電池 </div>
如圖2-1所示是一塊紐扣電池晰房,CR2032。"CR"表示這是3伏電壓的鋰錳電池。"20"表示它是直徑20mm殊者,32表示它是高度3.2mm与境。
CR2032的典型電池容量是230mAh,還不夠一個成人的身體使用20s。但是低功耗藍牙卻要使用幾年時間猖吴。即使電池容量已經(jīng)是230mAh這么小了摔刁,有時候仍然無法使用里面的全部能量。再溫度為0度時海蔽,可用的電池容量只有正常室溫的百分之八十共屈。
此外,電池還不能過量使用党窜,也就是說使用紐扣電池時拗引,不能超過它的峰值電流,否則會損壞電池幌衣。如果長時間大電流使用電池會使電池的容量減少矾削。典型的電流峰值是15mA。所以豁护,優(yōu)秀的設(shè)計應(yīng)該在使用大電流后哼凯,給電池留下恢復(fù)的時間。
最后择镇,電池自放電也應(yīng)該考慮到挡逼。即使器件不使用電池,電池也會放電的腻豌。當電池很少使用時家坎,漏電流會占使用電池總量很重要的一部分。
2.2 時間就是能量
另外一個重要的概念就是時間就是能量吝梅。即使器件只是檢查是不是需要收發(fā)數(shù)據(jù)依然要消耗能量虱疏。所以,減少時間去做有用的事就很重要了苏携。
可靠地發(fā)現(xiàn)器件至少需要兩個器件:一個器件搜尋其他器件做瞪,另外的器件處于可被發(fā)現(xiàn)的狀態(tài)。在低功耗藍牙中右冻,處于可被發(fā)現(xiàn)狀態(tài)的器件需要隔幾秒就發(fā)送三次短消息装蓬。如果想知道是否有其他器件愿意與它通訊,他就要在廣播之后立即開始監(jiān)聽纱扭。
至于為什么是發(fā)送三次呢牍帚,這其實是可靠性和低功耗之間的折中。如果只在一個信道發(fā)送一次乳蛾,那么由于發(fā)送的次數(shù)少暗赶,功耗必然降低了鄙币。但是如果這個信道被干擾,整個系統(tǒng)都將崩潰蹂随。如果是16個信道十嘿,每個信道發(fā)送一次,那么就會能量消耗就會很大了岳锁。
哪個器件發(fā)送绩衷,哪個器件接收也都是經(jīng)過深思熟慮的。搜尋正在發(fā)送的器件需要聽很長時間浸锨;這么做會消耗很多的能量唇聘,這部分工作將會放在有更多能量的器件上完成版姑。
數(shù)據(jù)包很短柱搜。使用短數(shù)據(jù)包有三個原因:
第一,使用高效的編碼剥险,短包發(fā)送相同數(shù)量的數(shù)據(jù)聪蘸,但是更快,且使用更少的能量【這點我不太能理解】表制。第二健爬,嚴格使用短包,使得器件不需要經(jīng)常重新校準參數(shù)么介。因為器件在發(fā)送和接收的過程中溫度會上升娜遵,導(dǎo)致改變芯片的一些參數(shù),進而使得頻率偏移壤短。使用短包就讓器件沒有足夠的時間升溫了设拟。此外使用短包也使得芯片的峰值電流降低了一些。最后久脯,短包意味著間隔性地使用電池纳胧,這給紐扣電池提供了更好的恢復(fù)時間。那么就可以最大限度地利用紐扣電池的能量了帘撰。
2.3 內(nèi)存很貴
大家都知道電腦的內(nèi)存越大跑慕,電腦也就越貴,同時內(nèi)存也是需要消耗能量的摧找。低功耗藍牙每一層的設(shè)計都在考慮如何降低內(nèi)存的使用核行。
例如,鏈路層(Link Layer)的數(shù)據(jù)包很小蹬耘,能降低收發(fā)數(shù)據(jù)包的內(nèi)存需求。屬性協(xié)議層(Attribute Protocol Layer)不處理超過23個字節(jié)的數(shù)據(jù)包佳励。此外它還不保存通訊間的狀態(tài)瞧剖。
當需要多做多件事的時候妇垢,就需要多種協(xié)議的支持涨薪。但是低功耗藍牙只有一種協(xié)議光督。屬性協(xié)議 (Attribute Protocol)用于名字發(fā)現(xiàn)船老,服務(wù)發(fā)現(xiàn)薪韩,讀寫信息等观谦。只使用一種協(xié)議倒得,那么多種協(xié)議的開支就節(jié)省下來了根悼。
2.4非對稱設(shè)計
幾乎低功耗藍牙的每一層的設(shè)計都是非對稱的凶异,因為能量少的器件應(yīng)該少干活。
在鏈路層挤巡,從機(slave)不需要做任何復(fù)雜的事,而主機(master)需要處理時間酷麦,自適應(yīng)跳頻矿卑,加密等等一些復(fù)雜的事情。從機只做主機告訴它做的就好了沃饶。
在屬性協(xié)議層有兩種器件:一種是服務(wù)端(server)母廷,一種是客戶端(client)。服務(wù)端保存了數(shù)據(jù)糊肤,客戶端向服務(wù)端請求數(shù)據(jù)琴昆。服務(wù)端像鏈路層的從機一樣,只做告訴它做的馆揉。而服務(wù)端就需要知道服務(wù)端有哪些數(shù)據(jù)业舍,以及如何利用它。
即使是安全架構(gòu)也是非對稱的升酣。主機需要做記住密鑰舷暮,綁定信息等等復(fù)雜的工作,而從機就很簡單了噩茄。能量不同下面,責(zé)任也不同。非對稱設(shè)計有效地提高了那些能量短缺器件的工作時間绩聘。
2.5 為成功而設(shè)計
為成功而設(shè)計意味著每個進到擁擠的地鐵或者公交的人都能夠操作他們的低功耗器件沥割。這意味即使幾千個器件都處在幾米范圍內(nèi)耗啦,它們依然能夠正常工作。而且低功耗藍牙沒有傳統(tǒng)藍牙的7個從機的限制机杜。低功耗藍牙有著非常好的安全機制芹彬,這包括了數(shù)據(jù)的加密和隱私的保護。在連接狀態(tài)時使用private address可以有效避免被追蹤叉庐。
為了保障數(shù)據(jù)的完整性舒帮,所有的數(shù)據(jù)包都有一個強的循環(huán)冗余校驗(CRC)。如果還是不放心陡叠,那么再屬性協(xié)議層提供了一種先驗證玩郊,再寫入的操作方法。
2.6 任何事物都有狀態(tài)
低功耗藍牙的另外一個基本概念是任何事物都有狀態(tài)枉阵。這個狀態(tài)是通過使用屬性服務(wù)端的屬性協(xié)議實現(xiàn)的译红。狀態(tài)可以是任何東西:當前的溫度,器件的電池狀態(tài)兴溜,器件的名字等侦厚。
狀態(tài)不只能讀出,也能寫入拙徽。例如設(shè)置加熱器的溫度刨沦。通過使用準確的狀態(tài)機屬性,器件的狀態(tài)可以清晰地表現(xiàn)出來膘怕。這使得客戶端可以隨時斷開連接想诅,因為當重新連接的時候,當前狀態(tài)有可以很快被讀出岛心。
有些狀態(tài)是可能很快發(fā)生變化来破。服務(wù)端和客戶端之間可以使用直接通知的方式來傳遞信息。每當電池狀態(tài)發(fā)生變化時就會通知客戶端忘古,而客戶端不用一直輪詢著電池的狀態(tài)徘禁。
2.7 客戶端-服務(wù)端架構(gòu)
在設(shè)計低功耗藍牙的時候,設(shè)備聯(lián)入到英特網(wǎng)的的問題就被考慮到了髓堪。把IP協(xié)議棧放到每一個器件本來是可以實現(xiàn)的送朱,這樣所有的器件通過IP協(xié)議都是可見的了。但是即使是最簡單的IP協(xié)議棧對于低功耗藍牙來說旦袋,它所需要的內(nèi)存和能量也過大了骤菠。
而客戶端-服務(wù)端的架構(gòu)使設(shè)備的聯(lián)網(wǎng)成為了可能“淘校客戶端可以直接連接到服務(wù)器商乎,或者可以通過網(wǎng)關(guān)連接到服務(wù)器。而服務(wù)端只是一個數(shù)據(jù)倉庫祭阀,它并不管客戶端是誰鹉戚。
2.8 模塊化的架構(gòu)
低功耗藍牙是基于Generic Attribute Profile架構(gòu)的鲜戒,具備非常優(yōu)秀的擴展性。為此Bluetooth SIG抹凳,成立的一個特別的架構(gòu)工作組致力于模塊化服務(wù)架構(gòu)遏餐。他們把一些原子性的行為封裝成服務(wù),這些服務(wù)之間又可以相互引用赢底。例如一個電池服務(wù)自身有一個溫度傳感器失都,那么它就可以引用一個溫度服務(wù);這個溫度服務(wù)也可以被一個家用的加熱器使用幸冻。
另一個特點是粹庞,器件上的服務(wù)并不是直接與指定的框架(profile)交互∏⑺穑框架(profile)會請求獲得一個器件的許多服務(wù)庞溜,而它可以選擇把這些服務(wù)組合起來。
這樣高靈活性的模塊化架構(gòu)使得低功耗藍牙生態(tài)系統(tǒng)沒那么容易過時碑定。
2.9 十億是少量
一項新技術(shù)獲得市場青睞會碰到很多嚴峻的考驗流码。一項技術(shù)成功,需要足夠低價延刘;而為了能夠低價漫试,就需要巨大的出貨量;巨大的出貨量就需要它能取得成功访娶。今天單一最大出貨量的消費電子就是手機商虐,任何能夠融入到手機上的技術(shù)都能成功。傳統(tǒng)藍牙就是一個例子崖疤。
這項技術(shù)有機會再幾年內(nèi)就達到十億的出貨量。有意思的是典勇,它還創(chuàng)建了一個巨大的周邊商品市場劫哼。
2.10 無連接模型
傳統(tǒng)藍牙幾乎就是為了取代有線而誕生的:耳機線,鼠標線割笙,文件傳輸線权烧。這意味著即使花上一些時間建立一次鏈接也是無關(guān)緊要的,因為這個鏈接會保持幾分鐘伤溉,幾個小時般码,甚至幾天。幾秒鐘的延遲乱顾,完全是微不足道的板祝。但是低功耗藍牙完全改變了這些。
低功耗藍牙的另一個基本概念是走净,連接(保持連接)是短暫的券时。當我們需要做一些事情或者檢查一些東西孤里,我們快速創(chuàng)建一個連接,做完需要做的事情橘洞,然后斷開連接捌袜。每5分鐘發(fā)送一次通知的器件,一天工作的時間不到一秒鐘炸枣。這意味著虏等,器件的無線收發(fā)器有99.999%的時間是關(guān)著的。建立連接過程中的任何延遲都可能產(chǎn)生巨大的能量消耗适肠。
低功耗藍牙從建立連接霍衫,發(fā)送數(shù)據(jù),到斷開連接大約只要3毫秒迂猴。
第三章 架構(gòu)
如圖3-1所示的是藍牙的架構(gòu)慕淡,主要分為了三個部分:controller,host,和application。controller主要完成無線信號的收發(fā)以及把這些信號轉(zhuǎn)換為有用的信息沸毁。host主要是一個負責(zé)兩個或者多個器件之間通訊峰髓。應(yīng)用層就利用host和controller實現(xiàn)一個應(yīng)用的實例。
3.1 Controller
controller通過天線與外部時間建立聯(lián)系息尺;通過Host Controller Interface與host完成協(xié)作携兵。
3.1.1 物理層(Physical Layer)
物理層使用2.4GHz的無線收發(fā)器完成工作。對于很多人來說搂誉,物理層是很神秘的徐紧。從本質(zhì)上講,它只是電磁輻射的簡單收發(fā)炭懊。電磁波在一定的頻率上并级,能通過改變振幅,頻率侮腹,相位傳遞信息嘲碧。低功耗藍牙采用了GFSK(Gaussian Frequency Shift Keying)調(diào)制方案。
FSK(Frequency Shift keying)說的是無線收發(fā)器通過少量地上下改變頻率來發(fā)送0和1.如果頻率從一邊很快變化到另一邊父阻,那么就會有一個脈沖能量延展到更寬的頻率上去愈涩。所以,這時候就需要一個過濾器阻止能量散播到其他頻率加矛。在GFSK上履婉,使用的過濾器就像是一個高斯曲線(Gaussian curve)。
調(diào)制指數(shù)描述了偏離中心頻率多少的頻率如何使用斟览。當一個無線信號被發(fā)送了毁腿,高于中心頻率185kHz的頻率表示1,而低于中心頻率185kHz的頻率表示0。
2.4GHz頻段被分為了40個獨立的信道狸棍,每隔2MHz一個身害。物理層每微秒發(fā)送一個比特(bit)。
3.1.2 直接測試模式(Direct Test Mode)
直接測試模式是為了測試物理層而設(shè)計的草戈。大多數(shù)的無線協(xié)議沒有測試物理層的標準方法塌鸯。這導(dǎo)致了一個問題,那就是不同公司都用自有的方式測試物理層唐片。毫無疑問丙猬,這增加了成本。
直接測試模式使得測試人員可以給物理層發(fā)送指令费韭,使它發(fā)送一段數(shù)據(jù)包或者接收一段數(shù)據(jù)包茧球。測試人員就能分析接收到的數(shù)據(jù)包,進而確定是不是符合規(guī)范星持。直接測試模式也可以用于產(chǎn)線產(chǎn)品測試和頻率校準抢埋。例如:發(fā)送指令給物理層發(fā)送指定頻率的波形,然后通過儀器測試實際發(fā)送的信號頻率督暂,最后調(diào)整無線收發(fā)器到正確的頻率揪垄。
3.1.3 鏈路層(Link Layer)
鏈路層也許是低功耗藍牙架構(gòu)中最復(fù)雜的一層了。它需要負責(zé)廣播(advertising)逻翁,掃描(scanning),創(chuàng)建和維持連接(connnection)饥努。同時它還要保證數(shù)據(jù)是正確的結(jié)構(gòu),正確的校驗值八回,正確的加密酷愧。為了完成這些,有三個基本概念:信道(channels)缠诅,數(shù)據(jù)包(packets)溶浴,步驟(procedures)。
鏈路層的信道有兩種:廣播信道(advertising channels)和數(shù)據(jù)信道(data channels)管引。很明顯戳葵,那些不處于連接狀態(tài)的器件使用廣播信道『撼祝總共有三個廣播信道,(再提一次生蚁,這是低功耗和健壯性的折衷)噩翠。器件使用這些信道廣播數(shù)據(jù),廣播它們的可連接性(connectable)和可發(fā)現(xiàn)性(discoverable)邦投;掃描和發(fā)起連接伤锚。當建立連接后才會用到數(shù)據(jù)通道。數(shù)據(jù)通道可以被加密(encrypted)和認證(authenticated)志衣。
任何數(shù)據(jù)的收發(fā)都有一定的包格式屯援。廣播信道和數(shù)據(jù)信道的基本結(jié)構(gòu)都是一致的猛们,如圖3-2
8-bit的前導(dǎo)碼(preamble)用于時間同步和設(shè)置收發(fā)器的自動增益。32-bit的訪問地址(access address)在廣播包中是固定的狞洋,而在數(shù)據(jù)包中則是隨機的弯淘。8-bit的頭部(header)用于描述數(shù)據(jù)包的內(nèi)容;8-bit的長度(length)則用于描述負載長度吉懊。負載最長可以達到37字節(jié)庐橙,即296 bits。24bits的循環(huán)冗余碼(CRC)用于保證接收的數(shù)據(jù)包沒有錯誤借嗽。
3.1.4 Host/Controller Interface
host使用Host/Controller Interface(HCI)與controller完成通訊态鳖。HCI包含了兩個部分:邏輯接口(logical interface)和物理接口(physical interface)。
邏輯接口定義了命令(commmands),事件(events)以及相關(guān)的行為恶导。邏輯層可以通過物理方式傳達浆竭,或者通過controller上的應(yīng)用編程接口(API)。
3.2 Host
3.2.1 Logical Link Control and Adaptation Protocol(L2CAP)
L2CAP是低功耗藍牙多路復(fù)用層惨寿。這一層定義了兩個基本概念邦泄,即L2CAP通道和L2CAP信號命令.L2CAP的每一個通道都是獨立的,并且有自己的流控缤沦。
低功耗藍牙只是用固定的通道:一個用于信號通道虎韵,一個用于Security Manager,一個用于Attribute Protocol。幀格式如圖3-3缸废,包含兩個字節(jié)的長度包蓝,兩字節(jié)的通道標簽。
3.3.2 Security Manager Protocols
Security Manager定義了配對(pairing)和密鑰分發(fā)(key distribution)協(xié)議企量。配對是一個器件與另一個器件之間建立信任的過程测萎,一般通過認證完成。配對成功后一般隨后就是加密鏈接并分發(fā)密鑰届巩。完成密鑰分發(fā)后硅瞧,這兩個器件在下次重連時就會很快建立。
3.2.3 The Attribute Protocol
屬性協(xié)議(Attribute Protocol)定義了一系列訪問對方器件數(shù)據(jù)的規(guī)則恕汇。這些數(shù)據(jù)就是屬性客戶端能讀和寫存儲在屬性服務(wù)器上的“屬性”腕唧。客戶端給服務(wù)端發(fā)送請求瘾英,服務(wù)端對這個請求做出響應(yīng)枣接。服務(wù)端可以使用這些請求命令找到服務(wù)器上所有的屬性,并讀寫它們缺谴。屬性協(xié)議定義了六種類型的消息:1.客戶端發(fā)送給服務(wù)端的請求但惶;2.服務(wù)端對于客戶端請求的回應(yīng) 3.客戶端發(fā)送給服務(wù)端的命令,但是服務(wù)端沒有響應(yīng) 4.服務(wù)端主動發(fā)送給客戶端的通知(notification) 5.服務(wù)端主動發(fā)送剛給客戶端的指示(indication) 6.客戶端響應(yīng)服務(wù)端指示的確認(confirmation)。 所以膀曾,客戶端和服務(wù)端都可以發(fā)送消息县爬,而消息可以是需要響應(yīng)的也可以是不需要響應(yīng)的。
屬性是有地址和標簽的數(shù)據(jù)添谊。每一個屬性都有唯一的句柄(handle)用于識別屬性财喳,一個類型,和一個值碉钠。例如纲缓,一個屬性的類別是Temperature,它的值是20.5°C,它的句柄是0x01CE喊废。
屬性協(xié)議也定義了屬性的許可權(quán)限:只讀或者只寫一個屬性的權(quán)限祝高,或者只有客戶端經(jīng)過認證或者被服務(wù)端授權(quán)后才能訪問屬性的值。你不能直接發(fā)消息取得一個屬性的權(quán)限污筷;但是你可以發(fā)送請求工闺,但是會得到一個有錯誤的響應(yīng),通過這個查詢這個錯誤就知道為什么沒有成功了瓣蛀。
屬性協(xié)議自身幾乎是無狀態(tài)的陆蟆。每一個單獨的交互都不會在服務(wù)端保留狀態(tài)。這意味著該協(xié)議只需要很少的內(nèi)存惋增。但是有一個例外:prepare and execute write requests叠殷。使用這個請求時,服務(wù)端將存儲一段數(shù)據(jù)诈皿,然后再一次執(zhí)行林束。
3.2.4 The Generic Attribute Profile
一般屬性框架(The Generic Attribute Profile)在屬性協(xié)議之上。它定義了屬性的類型和屬性如何使用稽亏。一般性屬性框架引入了許多概念壶冒,包括:"特征(characteristics)","服務(wù)(services)",服務(wù)之間的"包含(include)"關(guān)系,特征的"描述符(descriptors)"。它也定義了用于發(fā)現(xiàn)服務(wù)截歉,特征胖腾,服務(wù)間關(guān)系,讀寫特征值的步驟瘪松。
服務(wù)是器件的一些原子行為的不可變封裝咸作。這實在是一個很復(fù)雜的解釋,但是卻是一個容易懂的概念宵睦。不可變(immutable)當一個服務(wù)發(fā)布后性宏,它就不能修改了。一旦服務(wù)的行為更改了状飞,其他設(shè)置就需要花時間做相應(yīng)修改,這就走向了低功耗藍牙基本理念之一——無連接(connectionless)的對立面。
封裝(encapsulation)意味著簡潔地表現(xiàn)一些特性诬辈。一個服務(wù)的所有內(nèi)容都是通過屬性服務(wù)器承載和表達的酵使。一旦你知道了屬性服務(wù)器上的一個服務(wù)的范圍,你就能知道服務(wù)封裝的內(nèi)容了焙糟。原子性(Atomic)意味著更大系統(tǒng)中的單一不可減少的組件口渔。原子性的服務(wù)非常重要,因為服務(wù)越小穿撮,能被重用的可能性就越大缺脉。如果我們創(chuàng)建了一個包含了眾多行為的復(fù)雜服務(wù),那么這個服務(wù)被重復(fù)利用的可能性就降低了很多悦穿。
行為(behaviour)是說對于情況或者刺激的反應(yīng)動作攻礼。對于服務(wù)來說,行為是當你讀或者寫一個屬性時栗柒,將發(fā)生什么礁扮;或者是什么導(dǎo)致屬性發(fā)送通知給客戶端。明確地定義行為對于相互的可操作性非常重要瞬沦。如果一個服務(wù)的行為沒有明確定義太伊,那么每一個客戶端在與這個服務(wù)交互時就有可能出現(xiàn)不同的動作。服務(wù)對于不同的客戶端也可能有不同的反應(yīng)逛钻。更可怕的是僚焦,不同器件的相同服務(wù)也會不同。因此曙痘,明確定義的行為是可測試的芳悲,即使對于錯誤的相互操作,也提升了互操作性屡江。
服務(wù)關(guān)系(service relationships)是復(fù)雜行為的關(guān)鍵芭概。服務(wù)原生都是原子性的。復(fù)雜的行為不應(yīng)該由單一的服務(wù)表示惩嘉。例如罢洲,一個器件可以通過展示的溫度服務(wù)測量室內(nèi)溫度。這個器件可能是通過電池供電的文黎,所以它也會顯露出一個電池服務(wù)惹苗。然而,如果這個電池有一個溫度傳感器耸峭,我們就能在器件上顯露另一個溫度服務(wù)桩蓉。第二個溫度服務(wù)需要與電池相關(guān),那么客戶端就能知道它們之間的關(guān)系了劳闹。如圖3-4所示:
為了適應(yīng)服務(wù)間的復(fù)雜行為和關(guān)系院究,服務(wù)分為了兩類:首要服務(wù)(primary services)和次要服務(wù)(secondary services)洽瞬。服務(wù)是什么類型一般不依賴服務(wù)本身,而是依賴于如何使用這個服務(wù)业汰。在用戶的角度伙窃,首要服務(wù)展現(xiàn)出了這個器件是做什么的。而次要服務(wù)是用來幫助主要服務(wù)或者次要服務(wù)完成相應(yīng)的工作样漆。在上一個例子中童芹,電池服務(wù)是一個首要服務(wù)连茧,同時它還引用了一個次要服務(wù)(溫度服務(wù))來完成一部分工作允蜈。另外一個溫度則是一個首要服務(wù)串结。
3.2.5 The Generic Access Profile
一般訪問框架(The Generic Access Profile)定義了器件是如何發(fā)現(xiàn),連接和呈現(xiàn)有用的信息給用戶的跪妥。它同時也定義了器件之間如何建立永久的關(guān)系鞋喇,叫做綁定(bonding)。為了實現(xiàn)這些骗奖,這個框架定義了器件如何變成可發(fā)現(xiàn)(discoverable),可連接(connectable)和可綁定(bondable)确徙。它也定義了這些器件如是使用步驟(procedures)發(fā)現(xiàn)其他器件,連接到其他器件执桌,讀取其他器件的名字鄙皇,綁定他們。
這一層也通過使用可分解的私有地址(resolvable private address)引入了隱私的概念仰挣。
3.3應(yīng)用層
一般屬性框架(The Generic Attribute Profile)定義如何為把屬性組合成特征和服務(wù)伴逸,應(yīng)用層則定義了如何使用這些屬性。
3.3.1 特征(Characteristics)
特征是有UUID(Universally Unique Identifier)的數(shù)據(jù)膘壶。特征被設(shè)計成可復(fù)用的错蝴,因此就沒有行為。只要添加了行為颓芭,就限制了它的復(fù)用顷锰。最有趣的是它使用了更適合電腦理解的格式,而不是適合人類理解的文本亡问。
3.3.2 服務(wù)(Services)
一個服務(wù)是一些特征和它們相關(guān)的行為組合在一起的人類可讀的規(guī)范官紫。服務(wù)只定義了服務(wù)端上這些特征的行為,但是沒有定義客戶端的行為州藕。
一個服務(wù)可以包含其他服務(wù)束世。父類服務(wù)只能定義它們包含的服務(wù),而不能修改這些被包含服務(wù)中的特征和行為床玻。但是可以描述這邊被包含的服務(wù)是如何相互作用的毁涉。
服務(wù)并不描述如何如何找到和使用這些服務(wù)。服務(wù)只描述當一個特征被讀或?qū)憰r锈死,將發(fā)生什么贫堰。
3.3.3 框架(Profiles)
框架是一個使用實例或者應(yīng)用的終極實例穆壕。框架定義了客戶端如何找到服務(wù)严嗜,找到服務(wù)的特征粱檀,以及如何使用這些服務(wù)完成最終的應(yīng)用。
從框架到服務(wù)是多對多的映射漫玄,如圖3-5。一個服務(wù)可以被多個框架使用來完成器件的行為压彭。服務(wù)的行為與哪個框架在使用這個服務(wù)沒有任何關(guān)系睦优。