廣播
低功耗藍芽裝置通過廣播通道發現其他裝置,乙個裝置進行廣播,而另乙個裝置進行掃瞄。
1.advertising interval
2.advertising_type
3.own_address_type
4.direct_address_type
5.direct_address
6.advertising_channel_map
7.advertising_filter_policy
8.advertising data
9.scanreponse data
advertising interval (廣播間隔)
裝置每次廣播時,會在3個廣播通道上傳送相同的報文。這些報文被稱為乙個廣播事件。除了定向報文以外,其他廣播事件均可以選擇「20ms ~ 10.28s」不等的間隔。通常,乙個廣播中的裝置會每一秒廣播一次。兩個相鄰廣播事件之間的時間稱為廣播間隔。
但是,裝置週期性的傳送廣播會有乙個問題:由於裝置間的時鐘會不同程度的漂移,兩個裝置可能在很長一段時間同時廣播而造成干擾。為防止這一情況的發生,除定向廣播之外的其他廣播型別,傳送時間均會被擾動。實現該擾動的方式為,在上一次廣播事件後加入「0 ~ 10ms」的隨機延時。這意味著,即使兩個裝置廣播間隔相同,並在相同通道及時間點上傳送造成了衝突,但它們傳送下乙個廣播事件時也會有很大可能不再衝突。
所以,兩個相鄰的廣播事件的之間的時間間隔(t_advevent)為:
t_advevent = advinterval + a***elay
其中,advinterval 必須是「0.625ms」的整數倍,範圍是「20ms ~ 10.24s」之間。對於可掃瞄非定向廣播和不可連線非定向廣播這兩種廣播型別,該值最好不小於100ms,即(160個0.625ms)。a***elay是link layer(鏈結層)分配的乙個偽隨機數,它的範圍為「0 ~ 10ms」。
廣播包的截圖如下:
當然,實際設定過程中沒有廣播間隔引數,而是設定advertising_interval_min(最小廣播間隔)和advertising_interval_max(最大廣播間隔)這兩個引數來調整廣播間隔,它們都是以「0.625ms」為單位,如果要固定廣播間隔為某乙個值,只需要將這兩個引數設定為同乙個有效數值即可。
設定廣播間隔的方法如下:
//普通可發現模式下修改廣播間隔的方法
gap_setparamvalue(tgap_gen_disc_adv_int_min, advint );//單位是0.625ms
gap_setparamvalue(tgap_gen_disc_adv_int_max, advint );//單位是0.625ms
//有限可發現模式下修改廣播間隔的方法
gap_setparamvalue( tgap_lim_disc_adv_int_min, advint );//單位是0.625ms
gap_setparamvalue( tgap_lim_disc_adv_int_max, advint );//單位是0.625ms
advertising_type (廣播型別)
廣播的型別一般分為四種,分別是:
1.可連線的非定向廣播(connectable undirected event type)。這是一種用途最廣的廣播型別,包括廣播資料和掃瞄響應資料,它表示當前裝置可以接受其他任何裝置的連線請求。
鑑於此種廣播型別用的最多,下面我們來討論一下此型別下廣播事件中廣播包的傳送情況,另外要注意在乙個廣播事件中,前乙個「adv_ind pdus」的開始到相鄰的下乙個「adv_ind pdus」的開始處的時間要小於等於 10ms :
第一種情況:僅僅有廣播 pdus 。截圖顯示如下:
第二種情況:在廣播事件的中間有「scan_req」和「scan_rsp pdus」。截圖顯示如下:
第三種情況:在廣播事件的結尾有「scan_req」和「scan_rsp pdus」。截圖顯示如下:
第四種情況:在廣播事件的中間接收到「connect_req pdu」的情況。截圖顯示如下:
此情況下,廣播事件會關閉,不會繼續在下乙個通道上廣播。
定向廣播型別有特殊的時序要求。完整的廣播事件必須每3.75ms重複一次。這一要求使得掃瞄裝置只需掃瞄3.75ms便可以收到定向廣播裝置的訊息。
當然,如此快的傳送會讓報文充斥著廣播通道,進而導致該區域內的其他裝置無法進行廣播。因此,定向廣播不可以持續1.28s以上的時間。如果主機沒有主動要求停止,或者連線沒有建立,控制器都會自動停止廣播。一旦到了1.28s,主機便只能使用間隔長得多的可連線非定向廣播讓其他裝置來連線。
3.不可連線的非定向廣播(non-connectable undirected event type)。僅僅傳送廣播資料。
4.可掃瞄的非定向廣播(scannable undirected event type)。這種廣播不能用於發起連線,但允許其他裝置掃瞄該廣播裝置。這意味著該裝置可以被發現,既可以傳送廣播資料,也可以響應掃瞄傳送掃瞄回應資料,但不能建立連線。這是一種適用於廣播資料的廣播形式,動態資料可以包含於廣播資料之中,而靜態資料可以包含於掃瞄響應資料之中。
注意:所謂的定向和非定向針對的是廣播的物件,如果是針對特定的物件進行廣播(在廣播包pdu中會包含目標物件的mac)就是定向廣播,反之就是非定向。可連線和不可連線是指是否接受連線請求,如果是不可連線的廣播型別,它將不回應連線請求。可掃瞄廣播型別是指回應掃瞄請求。
不同的廣播型別對掃瞄請求和連線請求的不同結果如下圖:
ti的cc2540和cc2541中廣播型別的具體定義在「components/ble/include」目錄下的「gap.h」檔案中,如下:
/** @defgroup gap_advertisement_type_defines gap advertising event types
* for eventtype field in gapadvertisingparams_t
* @ end gap_advertisement_type_defines */
其中「gap_adtype_adv_hdc_direct_ind」和「gap_adtype_adv_ldc_direct_ind」屬於定向可連線廣播型別的兩種形式。
設定廣播型別的方法:
gaprole_setparameter(gaprole_adv_event_type, sizeof( uint8 ), &advtype );
own_address_type (自身位址型別)
direct_address_type (定向位址型別)
位址型別同own_address_type,具體內容如上。
direct_address (定向位址)
advertising_channel_map (廣播通道)
廣播通道如下所示:
在乙個廣播事件中,乙個廣播包會在每個通道上進行傳輸。顯示如下:
advertising_filter_policy (廣播過濾策略)
廣播過濾策略,對發來請求包的裝置採用的過濾策略。如下所示:
對應上圖的內容解釋如下:
1.接受任何裝置的掃瞄請求或連線請求。(value:0x00)
2.僅僅接受白名單中的特定裝置的掃瞄請求,但是接受任何裝置的連線請求。(value:0x01)
3.接受任何裝置的掃瞄請求,但僅僅接受白名單中的特定裝置的連線請求。(value:0x02)
4.僅僅接受白名單中的特定裝置的掃瞄請求和連線請求。(value:0x03)
5.保留
advertising and scanreponse data (廣播和掃瞄回應資料)
廣播資料和掃瞄回應資料,它們的長度都不能超過31個位元組(0 ~ 31),資料的格式必須滿足下圖的要求,可以包含多個ad資料段,但是每個ad資料段必須由「length:data」組成,其中length占用1個octet,data部分占用length個位元組,所以乙個ad段的長度為:length+1。格式圖如下所示:
設定廣播資料和掃瞄回應資料的方法如下:
gaprole_setparameter( gaprole_advert_data,sizeof( advertdata ), advertdata );
gaprole_setparameter( gaprole_scan_rsp_data,sizeof ( scanrspdata ), scanrspdata );
廣播使能----開啟的方法:
uint8 adv_enable = true;
gaprole_setparameter( gaprole_advert_enabled, sizeof( uint8 ), &adv_enable );
廣播使能----關閉的方法:
uint8 adv_enable = false;
gaprole_setparameter( gaprole_advert_enabled, sizeof( uint8 ), &adv_enable );
附加知識點:octet
在傳統的二進位制概念中,1 byte(位元組)= 8 bit(位)。大多數網際網路標準使用八位組(octet)這個術語而不是使用位元組來表示8位的量。該術語起源於「tcp/ip」發展的時期,當時許多早期的工作是在諸如「dec-10」這樣的系統上進行的,然而這些系統的結構採用的位元組(byte)長度不是8位(bit),因此出現了octet的單位,即準確定義了
1 octet = 8 bit
低功耗藍芽開發(BLE)
藍芽 藍芽是乙個標準的無線通訊協議,他是通過無線電介質傳輸資料的 無線電 是指在自由空間 包括空氣和真空 傳播的電磁波 電磁波 是由同向且相互垂直的電場與磁場在空間中衍生發射的 粒子波,根據頻率的由低到高依次可分為 無線電波,微波,紅外線,可見光,紫外線,x射線,y射線 電磁波傳遞資訊 首先把傳輸的...
低功耗藍芽BLE之連線建立
應付比廣播更為複雜的資料傳輸,或者要在裝置之間實現可靠的資料交付,這些都要依賴於連線。連線使用資料通道在兩個裝置之間可靠地傳送資訊。它採取了自適應跳頻增強魯棒性,同時使用了非常低的占空比,盡可能地降低功率消耗。裝置建立連線的過程如下圖所示。簡言之,裝置首先廣播可連線廣播事件,其他裝置收到之後即可發起...
BLE 低功耗藍芽 中ATT協議簡介
ble屬性協議,它是處於l2cap協議層與gatt之間的一層屬性操作協議。att協議在ble協議框架 ble協議資料交換框架 對於gatt本身,可以簡單的理解為一種根據一定格式規範組織的資料表,例如 我們可以看到他主要由3部分組成 handle attribute type attribute va...