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