我們知道ZigBee的底層是IEEE 802.15.4,所以要了解傳輸的方式,就要看IEEE 802.15.4的規範。IEEE 802.15.4用了我們常見的方式,稱為載波偵測 多重存取 碰撞迴避,簡稱CSMA-CA (Carrier Sense Multiple Access with Collision Avoidance)。這個中文實在有夠敖口,所以我們以後還是稱為CSMA-CA好了。
這種機制常見於只有有限的通訊管道(例如早期的ethernet只靠一條網路線),並且允許多人同時使用的通訊方式。規矩是這樣的,當有人要傳輸時,要先聽聽目前線上有沒有人說話,以此為依據來決定這個通道(channel)是不是沒有人用的,這個步驟稱為能量偵測 ED (energy detection)。值得一提的是ED只看有沒有能量,至於這個能量是傳輸啥東西,他並不管,就單純去偵測通道上有沒有能量。
還有一種方式是載波偵測,載波carrier,載波偵測也就是carrier sense。載波是無線通訊上的一個能量強的中心頻率,我猜802.15.4 是去看這個載波的調變方式,這個 待查…
所以不管用ED或是用CS都好,要是偵測到這個通道上有人在傳輸,他就會停住(back off)一個隨機的時間,然後再偵測一次。每一台設備的隨機時間都不一樣,我不確定是否可以設定這個隨機的時間的範圍,這個等看進去z-stack 我想自然就有解答了,到時再說。所以要是下次的偵測發現沒有人用了,他就可以發射訊號,反之要是很衰遇到還是忙線中,就再等一個隨機的時間,然後再試一次。
這個就是用載波偵測CS,來避免碰撞MA,的允許多個設備做存取(MA) 的方式。
進入了主題,存取通道又分成兩種方式,第一種是大家搶(contention-based channel access),第二種是大家輪流講(contention-free channel access)。
在第一種大家搶的工作方式,就是用上面講的CSMA-CA方式,讓所有設備在同一個頻道上講話,如同上面講的規矩,講之前先聽一下,沒有人你就可以講,要是有人,你要稍等一個隨機的時間然後再聽聽看。
第二種就比較有意思了,就我的觀察,好像內定啟動就是這一種,我不知道這是Z-stack幹的還是IEEE 802.15.4定義的,這個待查...
在這種模式中,那個PAN Coordinator 會制訂一序列的時間槽(time slot)給各個設備。因為每個設備都有一個固定的時間槽,所以這個槽也稱為 保證的時間槽GTS (guaranteed time slot)。因著這個設計,所以各個設備就可以在指定的時間槽做發射,也不會跟別人衝突,因為都是事先講好的。所以這種機制不會導致碰撞也就沒有需要使用CSMA-CA機制了。
為了達成這種第二種,輪流講的通訊方式,有些額外的事情要處理,那個PAN coordinator會麻煩些,他必須事先確定(ensure)所有(all) 在網路內的設備是有同步(synchronizd)的,這個同步指的是時間上的同步,讓大家的節奏都一樣,這樣我們講的第幾個時槽大家才能認知相同。時槽的切割事邏輯上的,例如一但這一秒開始算,第一秒是給某甲用,第二秒是給某乙用 乙次類推。所以大家需要確定何時開始算開始。
因著要達到這樣,PAN coordinator要傳輸一個信標(beacon),信標訊息是一種特殊的訊息,用來同步各個設備的時間。這種網路也稱為信標網路(Beacon-Enabled networking)。這樣做很是精準,但是也是有缺點的,因為為了確保同步,那個PAN coordinator三不五時就要發射一下信標,所有設備也都要從睡眠中起來聽一下信標,就是只是為了效正時間,然後再回去睡。所以很明顯的,這種方式的傳輸,電池都撐不久,因為設備會一直被吵醒。還有另一個限制,就是那個保證時槽的數量是有限制的,關於封包格式與時槽時間等等的細節,等我們談到物理層的時候再說。
還有一種方式就是 無信標網路(Nonbeacon networking),PAN coordinator不再一直發射信標,所以也就沒有保證時槽這件事了。明顯的電池壽命也會長很多,當然傳輸也不會太即時比起有GTS的方式。這種無信標網路,適合用來做長時間佈署設備的通訊方式,精確進行的方法,下次再說。