
研究Zigbee的protocol stack時,除了一個好的模擬版,可幫助你容易的理解書上所學,同時,有一台sniffer (封包監聽)更可以讓你實時的體會到程式碼的運行。由於兩台device中間的傳輸是無線環境,所以無法像往常的單晶片程式一樣,拉LED 印message來debug。事情怪異時,唯有公正的第三方(sniffer)探測到的訊息可以解答。我買的是這台,
他有一個SMA的天線接口,也送了一個鞭刑天線,另一邊是USB接頭,很簡單。上面有一個燈,亮了 代表有電。也有一個reset鈕,你覺得怪怪時,就按一下看看吧 代表有電。也有一個reset鈕,你覺得怪怪時,就按一下看看吧!
oldmonkey 發表在
痞客邦
留言(0)
人氣()
無線電傳輸的資料,最怕就是被別人竊取,甚至是偽造再重新發送。防止竊取的做法就是資料加密(Encryption),而防止別人假造資料的方式就是認證(Authentication)。<加密(Encryption)>Zigbee支援先進加密標準 AES (Advanced Encryption Standard),AES是DES的下一代演算法,用來保護下一個世代(30年)的資料安全。AES屬於對稱式編加密的一種,所謂對稱式加密就是說要加密與解密適用同一個密碼。你拿到密碼你就可以用來做加密以及解密,你若要換密碼,加密端與解密端需要一併更換。他的流程是這樣的,假設你有一段訊息,稱為明文(plaintext),你想要用一個金鑰(key),把明文加密成,密文(ciphertext)。然後用密文在無線電上傳輸,這樣即使截取到的人,截到的也是密文,看不懂內容,這樣就達到加密保護的作用了。收到密文的一端,再用一樣的金鑰,把密文解成明文,這樣就完成整個通訊程序了。由此可以看的出來,金鑰,是最重要的事情,一旦流出去就毀了,所有的秘密也都守在這一個點上,你也可以說,當金鑰越長安全性也就越高,目前Zigbee只支援到AES 128,也就是每次加密的單位為128 bit,我猜是由於移動設備的運算能力關係,才沒有用目前安全性較高的AES256。整個的操作上使用兩種key,1. link key: 在兩台device間分享。2. network key: 分享在整個網路上。設計上有一台特殊的ZigBee device稱為 信任中心(trust center),用來發布link key以及network key。這樣的機器在整個網路上只能有一台,由coordinator決定其位址,存放在APS IB的屬性apsTrustCenterAddress內部。已經了解到加密與解密都要用到同一把金鑰,有三種device獲取金鑰的方法,這裡指的是link key,1. 預載 (preinstallation): 由廠商預載設定好的key。2. 傳送金鑰 (key transport): device去問trust center而得到key。
oldmonkey 發表在
痞客邦
留言(0)
人氣()

這一層是最上層了,包含三種東西1. 應用程式支援 APS (Application Support)2. 設備物件 ZDO (Zigbee Device Object)3. 應用程式框架 AF (Application Framefork)這一層一樣有預設值(constant)以及屬性(attribute),如同其他層一樣,預設值前面有apsc,屬性前面有aps關鍵字。這些東西存在APS IB內,而APS IB (APS Information Base) 屬於上面講的APS的管轄範圍。在應用程式框架這一段,內有很多應用程式物件(Application Object),藉由AF,與ZDO以及APS溝通。定義上,每台device最多可以有240個應用程式物件,也配給每個應用程式物件一個端點(end point),作為溝通用,編號由1 ~ 240。 還有一個沒講到的,就是設備物件ZDO,他也要溝通,他使用特殊的端點,端點 0。還有一個特別的是端點255,若要把訊息廣播到所有的應用程式物件,就使用端點255。 <應用程式框架 AF (Application Framefork)>
oldmonkey 發表在
痞客邦
留言(0)
人氣()
這一層是我最有興趣的,因為TI沒有提供原始碼,我們無法從source code level去得知精確的做法,只能由規格書與實驗中去驗證。但是這一層又很有趣,因為各種的組網都在這層控制,所以值得好好的了解。 這一層主要提供兩個服務,資料與管理。跟之前兩層一樣,有自己的預設值(constant) 與屬性(attribute) 記得,這層已經脫離802.15.4的規範,來到Zigbee標準的規範,所以預設值前面會掛 nwkc關鍵字,而屬性前面會掛nwk關鍵字。資料由 資料進入點控制 NLDE (NWK Layer Data Entrity)管理由 管里進入點控制 NLME (NWK Layer Menegement Entrity) NWK層也管理一個訊息在整個網路內的傳播跳躍次數,這個叫半徑 (radius),若一個訊息的原始半徑為10,則每跳躍一次,這個值會減1。 通訊的方式大致上可以分為三種,1. 廣播 (Broadcast): 所有device都會收到訊息。
oldmonkey 發表在
痞客邦
留言(0)
人氣()

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)
oldmonkey 發表在
痞客邦
留言(0)
人氣()
服務就是要提供給別人呼叫的,ZigBee中遵循一套原生的服務概念(concept of primitive),以此來描述互動的關西。在層與層之間,是透過呼叫含式或是傳送訊的方式做溝通,稱為 原生(primitive)。這個總共有四種,分成兩組看,第一組是 要求(request)與確認(confirm),2u4-4y 要求(request)與確認(confirm),第二組是通知(indicate)與回應(response)。 在第一組,通常是由上一層作要求,也就是由MAC層 要求(request)PHY層的資料傳輸,若傳輸順利,PHY要要回送一個確認(confirm)的訊息給MAC層。 第二組,通常是由下層回報給上層,例如PHY層要是收到資料,就要通知(indicate)給Mac層知道,MAC層收到之後,要回應(response)給PHY層。只是這個回應,不是必需的,要看該個通知,有沒有要求對方要回應,這個可以從sniffer的封包上面看到真實的情形。
oldmonkey 發表在
痞客邦
留言(0)
人氣()
實體層,就是最靠近硬體那一層,所以首先先來知道一下,無線傳輸最重要的,頻率到底是多少,我們買模組的時候,大概都有印象這是2.4GHz的模組,但是精確的頻率到底是多少?在IEEE 802.15.4的規範中,通道(channel)是分頁的,定義了通道頁(Channel Page) 從0 ~31,但是目前為止只有通道0,1,2 有被定義,其他的3~31 都是預留給未來使用的。每個通道頁內部都分割成27個頻道(channel),頻道編號(channel number)從0~26。以我們常見的通道頁0,又切成四個頻帶(band),他的頻道編號是這樣的頻道0: 868MHz (BPSK調變)頻道1~10: 915 MHz (BPSK調變)頻道11~26: 2.4GHz (O-QPSK調變) 以頻道11~26來說,它們使用2.4GHz,這只是一個頻帶在2.4G附近,每個頻道都有一個專屬的中心頻率(Center Frequency) 這樣才不會跟別人打架。中心頻率的算法為中心頻率 = 2405 + 5 x (頻道編號 - 11)這樣就可以知道你的選定的頻道,其中心頻率是多少MHz。
oldmonkey 發表在
痞客邦
留言(0)
人氣()

我的資訊來源通常是IEEE 802.15.4 規格書,再來就是ZigBee 聯盟http://www.zigbee.org/Standards/Downloads.aspx根據這個資訊,可以做的事情很多啊,到今天為止總計有
大樓自動化 (ZIGBEE BUILDING AUTOMATION)
遙控器 (ZIGBEE REMOTE CONTROL) 這個在RF4CE的規格內
oldmonkey 發表在
痞客邦
留言(0)
人氣()
Zigbee有兩個主要的安全性議題<資料機密 (data confidentiality)>就是怕傳輸中的資料會被別人偷走或是洩漏,這邊的做法很簡單,就是把傳輸的資料加密就好,ZigBee支援AES (Advanced Encrypion Standard)加密法。 <資料鑑定 (data authentication)>這個就是怕別人竄改,偽造資料,這邊的解法是用訊息完整碼MIC (Message integrity code)來解決。 不管是那個議題,若是啟動都會造成device需要額外的運算力量與電力的消耗,這對於ZigBee這種低功耗設備來說,是比較傷的,這是做設計時需要考量的取捨。
oldmonkey 發表在
痞客邦
留言(0)
人氣()

往後會一個一個仔細地介紹每一層的內容,在此先來個總覽吧!ZigBee的封包跟我們之前學的TCP/IP封包差不多,都是一層一層的包上去,收到之後在一層一層的脫掉外衣解出訊息,一樣的大腸包小腸的方式。我們總共要認識的有四層,從下到上分別是實體層 PHY媒體層 MAC網路層 NWK應用層 APS 可以認知為,實體層的封包,是除了實體層,再加上媒體層的資訊。而媒體層的封包,是媒體層之外再加上網路層的資訊。而網路層是除了本身的資訊再加上應用層的資訊,而應用層,就是你的應用程式需要用到的。也就是說,你在sniffer上面截取到一個封包,他是實體層的,你要把他剝掉實體層取出媒體層,再從媒體層的內容(payload)得到網路層,再從網路層的內容得到應用層,最後這個才是你要觀察的對象。當你要除錯(debug)的對象只有你寫的程式,這是假定所有的設備(device)都有按照Zigbee的規範,沒有人偷改下面的協定。這樣的話你看應用層的資料就行。但是要是要解釋為何組網不成功,想要看到網路層的動作,理論與實際有沒有吻合,你就必須看看請處每一層的內容。這個包裹的樣式,需要認識仔細,才不會後面講到sniffer時看不懂,其實也不難,就只要層層分開解析就可以看清楚資訊了。
oldmonkey 發表在
痞客邦
留言(0)
人氣()
在IEEE 802.15.4 定義了兩種定址法:- 16 bits 短定址- 64 bits 延伸定址這個在開始組網時,可以設定要用哪一種,等到晚一點看到source code時,自然可以看到這個設定。使用短定址時,好處是縮短訊息的長度,因為這種未址的起訖充斥在每個訊息中,所以使用短定址可以明顯地縮短長度。這種短定址的方式缺點是只能用於同一個網路。要是你打算要用於兩個不相關網路的通訊就要使用64 bits的延伸定址了。使用64 bits延伸定址有多大呢?理論上有2的64次方,這個好大,非常大,比IPv6的定址範圍還多,所以認知上可以認為是 沒有限制device數量了。在ZigBee的標準,網路層上面(NWK layer)又加了一個16 bits的網路位址,這個是在網路層中傳輸必須的。這個64 bits的位址,我記得內建在每個chip內,可以用工具讀出來,等後面用到TI 2530 或是xBee模組時再介紹怎樣讀取。不過呢,當你達到一台device時,先搞清楚他的ID可是重要的事,要先知道誰是誰,這樣後面在用sniffer觀察封包通訊時才不會亂掉。
oldmonkey 發表在
痞客邦
留言(0)
人氣()
再IEEE 802.15.4的規範內,資料傳輸有三種
1. Device –> Coordinator
2. Coordinator –> Device
3. Device -> Device (也稱為peer-to-peer transfer)
oldmonkey 發表在
痞客邦
留言(0)
人氣()