MAC層是IEEE 802.15.4定義的最後一層了,往上的層並沒有定義,所以各種網路都有可能,因為這裡是講ZigBee,所以我們可以假設上一層是網路層(NWK)。
再來要講第二個ZigBee 可以省點的秘密,第一個秘密是 無信標網路
<超級框架> Superframe (大陸人稱為 超禎,我超不習慣,所以以後還是稱為Superframe)
先來看一張圖,從規格書截出來的
在有信標網路中,可以由 保證時槽(GTS)存在,這個非常有用特別適用於需要低延遲的傳輸。而Superframe,就夾在兩次的信標(Beacon)之間。也因著這樣,Superfram只存在有信標的網路中。從上而下看出,可整個完整的週期(beacon interval) 可以分成兩種,活動(active)的週期與非活動(inactive)的週期,而整個活動周期,又分為兩種
1. 競爭的週期 CAP (contention access period)
2. 免競爭週期 CFP (contention-free period)
在兢爭周期內,所有device都可以來搶,遵循CSMA-CA的機制,這個之前介紹過了。其中要特別知道的是MAC層的命令,必須要在競爭周期內傳輸。經爭週期的長度是沒有保證的,你搶得到就搶,搶不到就等下一回吧!
在免競爭周期內,是提供給需要低延遲的應用,或是等不及的人使用。這個是有配專屬時槽的,所以在免競爭周期內,不需要使用CSMA-CA來競爭。
總的來說,有競爭週期與非競爭週期,合起來稱為活動週期。這邊加起來只有16個時槽。保證時槽(GTS)不一定要有,但是要有的話最多7個,每個保證時槽可以佔據一個或多個時槽。
接在後面的就是非活動周期啦! 這段在Superframe內是不一定要有的,但是要是有的話,這可以讓Coordinator的收發機關機一下,這樣可以省電。
這個Superframe的總長度是由網路層(NWK)設定的,使用request這個原生服務來做設定的,設定的對象是aBaseSuperframeDuration,以及BO (macBeaconOrder)。
所以信標週期(Beacon Interval) 可以換算成 aBaseSuperframeDuration x 2的BO次方
根據規格書,這個BO的合理值範圍是0~14。要是設到15,這個就是無信標網路了,自然,也沒有Superframe這回事了。
再來下一個是活動周期內的長度SD (Superframe Duration),這個長度除了跟aBaseSuperframeDuration 有關以外,還跟SO (macSuperframeOrder)有關,所以Superframe週期SD可以計算為 aBaseSuperframeDuration x 2的SO次方。因為Superframe一定要小於整個信標週期( SD <= BI)。所以說SO的值一定小於BO。
<框中框>
再來看一張圖,也是從規格書來的,
每一個coordinator,包含PAN coordinator 可以創立(create) 自己的superframe來傳輸訊號。這個圖先看到左右兩端點,這個是信標的邊界,只有PAN coordinator可以發的,也稱為接收的信標(Recevied Beacon)。只要在這個接收的信標內,其他coordinator可以發射他自己的信標,也就是中間那一條,稱為 發送的信標(Transmitted Beacon)。這裡要注意的是,不管是接收信標,還是發射信標,他們的活動周期SD,都是等長的。
<保證時槽的超時 (GTS expire)>
我們知道Superframe內可以有保證時槽,這是個有限的資源,特別要留給需要低延遲的應用,但是要是有device注聞了這個時槽,但是連續幾個Superframe都沒有使用,這樣太討債,就會被coordinator取消掉,轉而配給其他的device。要歷經幾個Superframe才視為這個GTS浪費要回收,可以算出來
若BO(macBeaconOrder)介於8~14,這是個很長的Superframe,所以只要一次沒有用,就會被收回來。要是BO介於 0~8,那可以算成 2的(8 - BO)次方個。
<框間距 (IFS, Interframe spacing)>
當device送資料給別人時,是一個框一個框不斷地送出,當送完這個框,需要等一下,給對方一點時間消耗收到的這些資料,這個間隔就稱為框間距IFS。這個要等多就跟那個框的長度有關,分為長框(long frame)與短框(short frame)。當payload的長度小於MAC層的常數值aMaxSIFSFrameSize,這個就稱為短框,反之就稱為長框。
要是短框,其框間距就看macMinSIFSPeriod,要是長框,其框間距就看macMinLIFSPeriod。不管是哪種,其框間距應該都介於12~40之間。
MAC層提供的12種服務
1. 管理資料 (Managing MAC PIB)
跟PHY層一樣,MAC層也有提供預設值(constant)與屬性(attribute)給上層也就是網路層呼叫。這裡很別的地方,在於網路層不只能存取MAC層的PIB,他也可以經由MAC層存取PHY層的PIB。
2. 重制 (MAC reset)
網路層可以命令MAC層重啟,或是將內部變數還原成內定值。
3. 關聯或是解散 (Device Association and Disassocimation)
這個就有點小複雜,四種原生地呼叫都用上了,包含request<->confirm 以及 Indicate <-> response。由於關連與解散很重要,我們還是要好好地了解一下這些程序,將來在看sniffer或是除錯時,才能更得心應手。
<關聯, association>
我們先假定一個狀況,就是有兩台device,Coordinator(A機)與End Device(B機),當然每台上面都有媒體層(MAC)與網路層(NWK),他們要通訊,想當然爾邏輯上的溝通管道如下
A(NWK) –> A(MAC) <--------> B(MAC) <- B(NWK)
也就是每台的NWK層都會下指定給MAC,記得嗎?NWK是掌管網路資訊的。而MAC層就往下去管PHY層,最後透過2.4G的射頻訊號發射出去。打到定外一台時,對方的PHY層收到,回報MAC層,然後再回報給NWK層。
所以要做關聯時,是B機,想要跟現存A機的網路做關聯,這個時候的步驟為
1. B.NWK –> B.MAC 做request: NWK 要求下來,之後就MAC自己搞,一直到第11步,才把結果confirm 回去B.NWK層喔!
2. B.MAC –> A.MAC 要求連線: 精確的步驟是,B.MAC -> B.PHY -> 無線傳輸 –> A.PHY –> A.MAC
3. A.MAC –> B.MAC 回應收到要求了
這時B.MAC痴痴的等
4. A.MAC –> A.NWK indicate: 往上層回報
5. A.NWK –> A.MAC response
B.MAC等待時間到: 採用之前講的 非直接傳輸(indirect transmission),就是發完request之後等一個特定時間再去問結果,等多久呢? 記載 MAC PIB 內的 macResponseWaitTime屬性內。
6. B.MAC –> A.MAC 要求讀資料
7. A.MAC –> B.MAC 回應收到要求了
8. A.MAC –> B.MAC 回應這次關聯的要求
9. B.MAC –> A.MAC 回應收到要求了
10. A.MAC –> A.NWK indicate
11. B.MAC –> B.NWK confirm
這樣就完成整個程序了。
<解散, disassociation>
這個又分成兩種狀況,一種是device主動不玩了,要解散,一種是coordinator要求device解散,這個要分開說明
a. Device主動解散
1. B.NWK –> B.MAC request 解散 (到第5步才confirm回來)
2. B.MAC –> A.MAC 要求解散
3. A.MAC –> B.MAC 回應收到要求
4. A.MAC –> A.NWK indicate 有人要求解散
5. B.MAC –> B.NWK confirm 解散成功
b. Coordinator要求device解散
1. A.NWK –> A.MAC request 某一台device脫離網路
2. A.MAC –> B.MAC 送一個信標,夾帶訊號,告訴某台device他有未讀訊息
3. B.MAC –> A.MAC 從信標那邊知道有訊息,所以回頭要求讀訊息
4. A.MAC –> B.MAC 回應收到要求
5. A.MAC –> B.MAC 告訴他不幸的消息,就是希望他脫離網路
6. B.MAC –> A.MAC 表示他知道了
7. A.MAC –> A.NWK confirm 他通報完畢
8. B.MAC –> B.NWK indicate 脫離網路
4. 通訊狀況 (Communicaiton Status)
MAC –> NWK回報訊息 (使用indication)
5. 啟動停止接收機 (Enabling and Disabling the Receiver)
如字面所述,接收NWK的要求去開關收發機
6. 保證時槽的管理 (GTS Managment)
這個一樣有三種,先分成分配時槽(allocation)與回收時槽(deallocation),回收的部分分成device主動要求跟coordinator要求
<分配時槽(alloction)>
1. B.NWK –> B.MAC request (到第六步confirm成功)
2. B.MAC –> A.MAC 要求一個GTS
3. A.MAC –> B.MAC 表示收到回應了
4. B.MAC –> A.MAC 在信標上的GTS Character 標示已經配置
5. A.MAC –> A.NWK indicate新配置一個時槽
6. B.MAC –> B.NWK confirm 通報配置成功
<回收時槽(deallocation)>
a. Device主動要求
1. B.NWK –> B.MAC 要求回收
2. B.MAC –> A.MAC 要求GTS回收
3. A.MAC –> B.MAC 表示收到請求
4. A.MAC –> A.NWK indicate 有人要回收時槽
5. B.MAC –> B.NWK confirm 時槽回收成功
b. Coordinator要求
1. A.NWK –> A.MAC request 收回某台device的時槽
2. A.MAC –> A.NWK confirm 這個請求
3. A.MAC –> B.MAC 在信標內夾帶
4. B.MAC –> B.NWK indecite 已經時槽被回收
7. 更新Superframe設定 (Updating Superframe Configuration)
若BLE(Battle Life Extension)參數打開時,可以要求coordinator關閉他的接收機,在frame完後 macBattLifeExtPeriods 的長度,這樣Coordinator的接收機可以不用再整個周期都開電,比較省電。
8. 通知有孤兒 (Orphan Notification)
孤兒,就是沒爸爸的小孩。每台device都需要連接到一個網路,才能做通訊,要是有一台device他之前有連到網路,但是現在失去關聯了,這就叫 孤兒機 (Orphaned device),有用正常脫離程序的device不是孤兒,一直傳輸失敗的機器,才是孤兒機。
這裡判定孤兒機,會用到兩個參數
回應等待時間 macAckWaitDuration
最大重試次數 macMaxFrameRetries
所以當device送出資料並需求一個回應時,他會等待回應'回應等待時間'最大重試次數’。若都沒有,這台device應該就是孤兒機的。這個時候的NWK曾有兩個選擇來解決這個問題,
1. 重置MAC,再重新做一次關聯
2. 進行孤兒機的重新校準(realignment)程序
第一種,之前講過了,就是指示重新做一次,至於第二種的重新校準程序如下
1. B.MAC –> A.MAC 告訴他我是孤兒
2. A.MAC –> A.NWK indicate 接獲孤兒報案
3. A.NWK –> A.MAC response 知道了
4. B.MAC –> A.MAC 重新認領這個device
5. A.MAC –> A.NWK indicate 處理完畢
9. 通道掃描 (Channel Scanning)
這是MAC提供給NWK的服務,主要是在個人活動空間(POS, Personal Operating Space)作掃描,有四種
a. 能量偵測掃描(ED scan)
b. 孤兒掃描(Orphan scan)
c. 主動掃描(Active scan)
d. 被動掃描(Passive scan)
10. 信標通知 (Beacon Notificaiton)
當收到信標MAC –> NWK 用indicate 通知這個事件。
11. 與Coordinator同步 (Synchronizing with a Coordinator)
Device端的NWK可以要求Coordinator送信標給他,然後他可以選擇只要聽一次,或是要持續追蹤。當決定持續追蹤,卻沒有收到,會進行重新定位信標的程序。
12. 從Coordinator要求資料 (Requesting Data from a Coordinator)
這個也常常看到,就是Coordinator會用信標,通知device有未讀訊息,就會用這個服務去跟coordinator要求讀取,程序如下
1. B.NWK –> B.MAC request去讀資料
2. B.MAC –> A.MAC 正式要求資料
3. A.MAC –> B.MAC 回報收到要求
要是此時沒有收到資料就算了,要是有收到,會夾帶未讀的個數FP (frame pending)
4. A.MAC –> B.MAC 送出資料
5. B.MAC –> A.MAC 回應收到資料
6. B.MAC –> B.NWK confirm 之前的request
7. B.MAC –> B.NWK indicate 收到資料
<MAC 框架 frame>
關於MAC的框架,有四種
1. 信標框架 (Beacon frame)
2. 資料框架 (Data frame)
3. 回應框架 (Acknowledgment frame)
4. 命令框架 (command frame)
好好地看清楚內容很重要,因為後面的sniffer,你真的會看到每一個規格書講的欄位,不過等到時你再去翻規格書就好了,因為規格書講得更好,我們著重在講流程。
累了,先到這裡... 剩下的以後再補充
留言列表