close

MAC層是IEEE 802.15.4定義的最後一層了,往上的層並沒有定義,所以各種網路都有可能,因為這裡是講ZigBee,所以我們可以假設上一層是網路層(NWK)。

 

再來要講第二個ZigBee 可以省點的秘密,第一個秘密是 無信標網路

<超級框架> Superframe (大陸人稱為 超禎,我超不習慣,所以以後還是稱為Superframe)

先來看一張圖,從規格書截出來的

image

在有信標網路中,可以由 保證時槽(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。

 

<框中框>

再來看一張圖,也是從規格書來的,

image

每一個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,你真的會看到每一個規格書講的欄位,不過等到時你再去翻規格書就好了,因為規格書講得更好,我們著重在講流程。

 

累了,先到這裡... 剩下的以後再補充

arrow
arrow
    全站熱搜

    oldmonkey 發表在 痞客邦 留言(0) 人氣()