作為一個硬件從業人員,雖然不是從事物理網行業的,但是多少得了解一些,以下是筆者最近學習Zigbee的筆記,包含了Zigbee基本知識,正確的學習方法。
Zigbee無線傳感網絡
先搞清楚IEEE802.15.4協議。
這個協議必須搞清楚,搞不定這個協議,Zigbee永遠吃不透。其實學習這個很簡單,如果學過TCP/ip的話,大家知道,我們要去掌握整個tcp/ip核心的話,我們要掌握以太網底層的一些協議,比如我們做驅動,我們做開發,如果說不懂的話,是沒有辦法做項目的,更直白一點,沒法在工作中去解決實際的問題。對于老板來說,老板招人過來,就是要解決問題的,如果沒有解決問題的能力,那在職場中是沒有競爭力的。
ZIGBEE是什么?
在傳統的無線網絡當中,大家耳熟能詳的就是兩種,藍牙和wifi。在物聯網的世界,也存在物與物之間存在信息溝通的橋梁,也是通過無線技術,最經典的就是ZIGBEE技術,還有ZWAVE技術,不過ZWAVE在中國還是用得很少的。
為什么要引入zigbee呢?
有了Zigbee之后,全球才有了一個物聯網的概念,Zigbee號稱我們商用的第一個無線傳感網絡。
到目前為止,無論是國內還是全球,Zigbee是商用最多的,Zigbee做出來的產品是很多的,在國內,最典型的Zigbee應用是在智能家居領域,目前在國內推出的只能家居,絕對是Zigbee,為什么呢?
zigbee出來比較早,大概是在03年,Zigbee整個協議的這個技術現在變得很成熟。真正可商用化的產品,一定會選一個成熟的技術方案。
Zigbee能夠干什么?
Zigbee主要用于構建無線局域網,如果這個無線局域網用于傳感器的數據收集和監控,這個網絡就叫做無線傳感器網絡(WSN:Wirelss Sensor Network),是無線局域網的具體應用。
Zigbee是屬于無線傳感網絡的一種。
圖中Sink node叫做集中器,負責整個Zigbee網絡的管理和接入的,同時還負責和外圍交互,可以和PC,互聯網進行連接。
單純的一個Zigbee是沒有實際的應用場景的,現在使用的各種的物聯網終端,最起碼有一個app,需要用來觀看無線傳感網絡中的信息,需要保證這個Sink node接入到我們的物聯網當中來。
Zigbee特點
低功耗:6個月-2年,為什么是一個比較大的范圍呢?任何一個低功耗的傳感網絡,首先需要問工作方式是什么,比如多長時間獲取一次數據,多長時間發送一次數據,才能得到具體的使用時間。
高可靠性:用tcp/ip來解釋,在tcp/ip協議中,有兩種經典協議,TCP和UDP,一個是面向連接的,一個是無連接的,一個是可靠傳輸的,一個是不可靠傳輸的。無線連接本身存在不可靠性,zigbee針對這個做了一些高可靠性的機制。
低成本:開源,免專利費
碰撞避免機制,交互確認的機制,保證可靠通信
低延時:設備搜索時延30ms,休眠激活時延典型值是15ms,活動設備信道接入時延為15ms
低數據量:Zigbee每個網絡模塊射頻前端的數據傳輸為250kbps
網絡容量大:Zigbee可以采用星形,樹形,網形的結構組網,而且可以通過任一節點組成更大的網絡結構,從理論上講,其可連接的節點多達65535個,其實就是一個16bit的數。實際應用中并沒有這么多,實際受限于硬件資源。所謂的硬件資源就是芯片的ram,flash,是否能夠容納這么多的節點,是否能夠管理。
高保密性:Zigbee提供了基于循環冗余校驗(CRC)的數據包完整性檢驗和鑒權的功能,加密算法采用AES-128,同時各個應用可以靈活確定其安全屬性。----所有的無線傳輸,都是通過一個射頻的物理通道,任何人都可以利用zigbee協議開放特性,通過射頻芯片發送數據包。但是與互聯網一樣,我們訪問網站的時候,為什么要用https,是因為安全機制,個人網絡不希望被人攻擊,這個時候需要考慮網絡的健壯性,保密性。Zigbee采用AES-128,并需要硬件支持
全球的通用性和完好的開發性:由于Zigbee標準協議,因此不同廠家芯片利用Zigbee通信將是輕而易舉的事情。如ti的方案,恩智浦的方案,只要都滿足Zigbee,互相通信將不是問題。
Zigbee學習模式
單片機+Zigbee=學習模式
只花20%的實際學習單片機的外設,編程。要花80%的時間放在Zigbee協議棧。只有這樣才能用Zigbee來做項目,但是很多書籍都是大篇介紹單片機的使用,各種外設的使用。
學Zigbee其實學的是網絡編程。Zigbee的代碼量其實是挺大的,不要一上來就分析代碼,要明白整個協議的設計,才能明白代碼,才能讀懂代碼。
抓包分析:如果沒有抓包能力,傳輸的數據就沒法知道是上面什么意思,當網絡不通的時候就沒法分析。如果掌握抓包能力,發的任何信息都能知道是上面意思,這樣才能把Zigbee掌握透徹。
Zigbee聯盟
Zigbee協議標準的一個協會。
Zigbee硬件平臺
TI,Jennic,Silicon Labs
不同廠家都有自己硬件上的芯片,都有自己軟件的協議棧。
Zigbee協議棧
Zigbee協議實現的代碼庫
Zigbee協議棧,有一個分層的概念。不管是軟件還是硬件項目,達到一定規模之后,都要進行分層,不分層的話,項目的管理,可擴展性等等效率問題解決不了。
Zigbee分層
最下面是IEEE802.15.4是一個標準,它規定了協議的物理層和MAC層,再上面是Zigbee的網絡層Zigbee NWK(network)和應用層。網絡層和應用層又分很多模塊,為什么呢?
首先網絡分層以后,要有加密特性(Security),再往上是一個Zigbee應用支持的子層,在網絡層和應用層之間又開辟了一個子層(Zigbee Application Support Subplayer(APS))這個層起到承上啟下的作用。承上指的是給整個Zigbee應用的框架。
Zigbee會根據不同的場景(Application Object),比如智能家居,能源,工業等等不同的場景,有一個庫的概念。
針對設備終端的管理,又有單獨的一個層,Zigbee Device object。
學習Zigbee就是學些Zigbee層與層之間的實現,或者說掌握層與層之間的交互,只有把各個功能模塊之間了解清楚,Zigbee才有可能吃透。
IEEE802.15.4協議
Zigbee學習第一個要搞明白的就是Zigbee的物理層和Mac層,為什么呢?我們學習單片機,其實就是和硬件打交道,Zigbee通訊也是建立在硬件的基礎之上的,硬件基礎指的就是射頻,要搞清楚這個無線射頻到底是怎么來通訊的。如果說底層搞不清的話,應用層也是很難理解,因為它很抽象。-----所以說要搞清楚802.15.4這個協議。
Zigbee是由Zigbee聯盟所主導的標準,定義了網絡層,安全層和應用層,以及各種應用的產品架構;而由IEEE所制定的802.15.4標準,則是定義了物理和MAC層。
Zigbee協議,Zibgee聯盟和IEEE組織都參與制定。
Zigbee網絡分層
下面是MAC層和PHY層,其實幾個網絡協議都差不多,只是底層的實現不同。
比如wifi,wifi為什么能跑TCP/IP協議,wifi的物理層和以太網的物理層是完全不同的,如果沒有把MAC和物理層分層的話,wifi是沒有辦法很容易的跑TCP/IP協議的。有了分層,我們就可以把以太網協議移植到射頻里面來。
物理層頻帶參數
三個頻段,國內用得最多是2.4Ghz-2.4835Ghz,在2.4G劃分了16個信道(信道11到信道26),信道與信道的帶寬是5Mhz,信道與wifi信道有交叉(如果應用中信號通訊不穩定,可以看下使用的信道是否和wifi相同,被占用比較多)
868MHZ--美國
915MHZ--歐洲
把數字信號變成一個射頻信號,涉及到調制,調整方式為FSK(頻移鍵控),通過頻率的變化來表示我們的0,1信號,把數字信號變為模擬信號。
物理幀格式
前導碼(4字節):用于符合同步。
起始分隔符(1字節):用于幀同步。
物理頭端(1字節):指定了物理服務數據單元的長度。
物理服務單元(<=127字節):用于負載數據,與以太網幀相比,屬于低數據量。
MAC層網絡拓撲結構
網絡協調器:
全功能設備(FFD,Router):可以支持任何一種拓撲結構,可以作為網絡協商者和普通協商者,并且可以和任何一種設備進行通信,也叫路由節點
精簡功能設備(RFD):支持量型結構,不能成為任何協商者,可以和網絡協商者進行通信,實現簡單。
網狀型結構全功能設備之間相互可以交互,這種組網的應用場景很多,但是這種組網方式對單個節點的運算能力比較高。因為它要存很多路由表,或者路由信息,要負載整個網絡的管理。若其中一個節點壞了,其它節點如何進行組網,如何進行網絡恢復,這些對單個節點的要求是比較高的。
實際我們在項目應用當中,蔟狀型的網絡是用得最多的,這樣可以用低成本的處理器就可以構建一個zigbee網絡。
幀格式
Mac層幀結構目標:用最低復雜度實現多噪聲無線信道環境下的可靠傳輸。多噪聲指環境非常惡劣的情況下,用一個低復雜度的算法,實現可靠的傳輸。
幀組成:
地址格式--16位短地址和64位擴展地址。
幀控制字段的內容指示地址類型。
幀的類型--信標幀,數據幀,確認幀,MAC命令幀。
理解信標幀是非常重要的,在整個MAC層協議里面,網絡管理會大量的使用信標幀。
在IEEE 802.15.4中,可以選用超幀為周期組織LR-WPAN網絡內設備間的通信。每個超幀都以網絡協調器發出信標幀開始,在信標幀中包含了超幀將持續的時間以及對這段時間的分配等信息。
網絡中的普通設備收到包含超幀結構的信標幀后,就可以根據其中的配置信息安排自己的任務。
超幀將通信時間劃分為活躍和不活躍的兩個部分。
如何通俗理解超幀呢?在協調器發送信標幀的時間段內,里面包含一個超幀,在超幀里面,發布了上這些消息:競爭接入的時間段(CAP),非競爭接入的時間段(CFP),保證時隙的間隔時間(GTS),非活躍的時間段。
競爭接入的時間段(CAP),什么意思呢?幀里面,包含了時間戳,在整個網絡里面,所有的終端,所有的節點,在CAP整個時間段里面,是允許接入網絡的。在任何一個節點接入的時間,第一件事就是要入網,現在規定了時間才能入網,并不是設備在任何時間都能入網。在CAP采用時隙CSMA/CA協議進行通信(CSMA:載波沖突檢測)。
非競爭接入時段(CFP),就是在這段時間段內,就不需要和別的設備搶了,當設備節點入網的時候,可以在這段時間內發送入網請求。
保證時隙的間隔時間(GTS),在這個間隔的時間里面,設備節點才能正常的通信。---時間片
非活躍時間段,在這個時間內,整個網絡里面不允許任何的交互。--靜默時間
由上可知,整個網絡的管理,協調器就是通過這種信標幀超幀的結構,來管理所有節點的交互。所以我們在做實驗的時候,如果發現協調器不通信了,可以抓包分析看看,這個協調器發送超幀的時間是多長時間,就能一目了然是為什么。為了保證實時性,我們可以把上面這幾個時間槽設置的短一點,周期快一點。為了更低的功耗,我們可以把時間周期設得長一點。
協調器為每一個節點都能分配一個時間槽,叫GTS,那么就需要所有的時間設備節點的時間都是一樣的(時間同步)。
在目前zigbee的實際使用中,是不會使用信標不使能的模式的,因為不使能的情況下,網絡會非常差,非常不可靠,一般都是信標使能的模式。
?
信標幀使能通信
信標使能通信,類似于TCP/IP的三次握手機制。當協調器要發送數據給設備的時候,要比設備發送給協調器要復雜一點。
在使能信標幀網絡中,是有規定時隙的,CFP,CAP,TPS。在信標幀中,規定了在CFP時間點才能競爭入網,在CAP時間點才能非競爭入網通信,在GTS時間點才能發送數據。
在非使能信標幀網絡中,就是設備節點看網絡中是否有其它設備節點來搶信道資源,如果有其它設備,那本設備就等一會兒,這種網絡會非常不穩定。
NB后退次數:可以理解為一個最大值,假設后退次數為3時,我想發言,第一次發現有其他人在發言,我等一會兒,第二次發現有人在發言,我再等一會兒,第三次發現還有人在發言,我就放棄此次發言。
CW碰撞窗口的長度:當我想發言的時候,我發現沒人跟我搶,我謹慎一點,再等一會兒,發現還是沒有人跟我搶,這是我就去發言。
BE后退指數:取值范圍為0~5,協議推薦值為3,最大值為5。
Z-Stack版本
國內用得最多時候是Z-Stack2.3.1-1.4.0版本(2011),目前商用的版本是Z-Stack 2.5.1a,后面的版本是針對不同行業的,如智能家居,照明,能源,Mesh網絡。我們學習Z-Stack,學習Z-Stack2.5.1a就比較好。
當我們不用51的核,采用ARM的核的時候,使用協議Z-STACK-3.0.1
Z-Stack目錄結構
我們學習Zigbee,需要了解Z-Stack的整個目錄,這里面不光包含了Z-Stack的源碼,協議的實現,同時,針對協議棧,提供了大量的工具以及說明文檔。
第一個目錄Components包含所有的源碼組件:硬件Hal,Mac層,mt,操作系統抽象層osal,服務層Services,協議棧層stack,zmac協議層。
第二個目錄Document為官方的說明文檔,需要掌握如何去看這些文檔及手冊。
第三個目錄Projects為典型的工程案例,已經寫好的應用代碼。
第四個目錄Tools為一些上位機工具。
OSAL操作系統抽象層
OSAL操作系統抽象層如何實現多任務
任務調度:多任務的實現
時間管理:軟件定時器
原與通信:任務與任務之間的通信,類似于操作系統的消息隊列
OSAL為什么會應用到Zigbee呢,因為它在資源非常少的硬件上,比如51單片機,可以跑一個操作系統的雛形,通過非常低成本的資源去實現一些復雜的功能。可以知道Zigbee-Stack的代碼量非常多,這么多的功能和代碼量,就是通過OSAL這樣一個類操作系統來管理的。OSAL可以提供多任務的調度,任務間的通信,還包括時間管理。
任務的調度是通過一個單向鏈表來實現的。OSAL通過一個輪詢的機制來實現一個類操作系統,沒有搶占的概念。
評論