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