第5章無線射頻與MAC層_第1頁
第5章無線射頻與MAC層_第2頁
第5章無線射頻與MAC層_第3頁
第5章無線射頻與MAC層_第4頁
第5章無線射頻與MAC層_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、- 1 -第第5 5章章無線射頻與無線射頻與MAC層層- 2 -本章目標(biāo)本章目標(biāo)掌握掌握RF內(nèi)核結(jié)構(gòu)內(nèi)核結(jié)構(gòu)掌握掌握FIFO訪問訪問掌握掌握CC2530無線發(fā)送模式無線發(fā)送模式掌握掌握CC2530無線接收模式無線接收模式掌握掌握IEEE802.15.4程序設(shè)計(jì)方法程序設(shè)計(jì)方法- 3 -本章目標(biāo)本章目標(biāo)掌握掌握RF內(nèi)核結(jié)構(gòu)內(nèi)核結(jié)構(gòu)掌握掌握FIFO訪問訪問掌握掌握CC2530無線發(fā)送模式無線發(fā)送模式掌握掌握CC2530無線接收模式無線接收模式掌握掌握IEEE802.15.4程序設(shè)計(jì)方法程序設(shè)計(jì)方法- 4 -CC2530是兼容是兼容IEEE802.15.4標(biāo)準(zhǔn)射頻模塊的片上系統(tǒng)標(biāo)準(zhǔn)射頻模塊的片上系統(tǒng)

2、 5.1 概述概述- 5 -RF內(nèi)核控制無線射頻模塊,并且在內(nèi)核控制無線射頻模塊,并且在MCU和無線電之間提供一個(gè)接口,和無線電之間提供一個(gè)接口,可以發(fā)出命令,讀取狀態(tài)和自動(dòng)對無線電事件排序??梢园l(fā)出命令,讀取狀態(tài)和自動(dòng)對無線電事件排序。RF內(nèi)核包括以下幾內(nèi)核包括以下幾部分:無線電控制狀態(tài)模塊(部分:無線電控制狀態(tài)模塊(FSM)、調(diào)制器,解調(diào)器、幀過濾和源匹)、調(diào)制器,解調(diào)器、幀過濾和源匹配、頻率合成器(配、頻率合成器(FS)、命令選通處理器,定時(shí)器)、命令選通處理器,定時(shí)器2(MAC定時(shí)器)定時(shí)器) 5.2 RF內(nèi)核內(nèi)核lFSM模塊的主要功能包括控制模塊的主要功能包括控制RF收發(fā)器的狀態(tài)、發(fā)

3、送和接收收發(fā)器的狀態(tài)、發(fā)送和接收FIFO,以及大部分,以及大部分動(dòng)態(tài)受控的模擬信號,比如模擬模塊的上電動(dòng)態(tài)受控的模擬信號,比如模擬模塊的上電/掉電掉電 l調(diào)制器:將原始數(shù)據(jù)轉(zhuǎn)換為調(diào)制器:將原始數(shù)據(jù)轉(zhuǎn)換為I/Q(同相(同相/正交)信號發(fā)送到發(fā)送器正交)信號發(fā)送到發(fā)送器DAC,并且遵守,并且遵守IEEE802.15.4標(biāo)準(zhǔn)標(biāo)準(zhǔn) l解調(diào)器:負(fù)責(zé)從收到的信號中檢索無線數(shù)據(jù)。解調(diào)器的振幅信息由自動(dòng)增益控解調(diào)器:負(fù)責(zé)從收到的信號中檢索無線數(shù)據(jù)。解調(diào)器的振幅信息由自動(dòng)增益控制使用,自動(dòng)增益控制調(diào)整模擬制使用,自動(dòng)增益控制調(diào)整模擬LAN的增益,使接收器內(nèi)的信號水平大約是個(gè)的增益,使接收器內(nèi)的信號水平大約是個(gè)常

4、量。常量。- 6 -RF內(nèi)核控制無線射頻模塊,并且在內(nèi)核控制無線射頻模塊,并且在MCU和無線電之間提供一個(gè)接口,和無線電之間提供一個(gè)接口,可以發(fā)出命令,讀取狀態(tài)和自動(dòng)對無線電事件排序??梢园l(fā)出命令,讀取狀態(tài)和自動(dòng)對無線電事件排序。RF內(nèi)核包括以下幾內(nèi)核包括以下幾部分:無線電控制狀態(tài)模塊(部分:無線電控制狀態(tài)模塊(FSM)、調(diào)制器,解調(diào)器、幀過濾和源匹)、調(diào)制器,解調(diào)器、幀過濾和源匹配、頻率合成器(配、頻率合成器(FS)、命令選通處理器,定時(shí)器)、命令選通處理器,定時(shí)器2(MAC定時(shí)器)定時(shí)器) 5.2 RF內(nèi)核內(nèi)核l幀過濾和源匹配:其功能是支持幀過濾和源匹配:其功能是支持RF內(nèi)核中的內(nèi)核中的F

5、SM模塊來執(zhí)行幀過濾和源地址匹模塊來執(zhí)行幀過濾和源地址匹配。配。l頻率合成器:其功能是為頻率合成器:其功能是為RF信號產(chǎn)生載波。信號產(chǎn)生載波。l命令選通處理器:處理命令選通處理器:處理CPU所發(fā)出的命令。它包含一個(gè)所發(fā)出的命令。它包含一個(gè)24字節(jié)的程序存儲(chǔ)器,字節(jié)的程序存儲(chǔ)器,可以自動(dòng)執(zhí)行可以自動(dòng)執(zhí)行CSMA/CA機(jī)制。機(jī)制。- 7 -RF內(nèi)核控制無線射頻模塊,并且在內(nèi)核控制無線射頻模塊,并且在MCU和無線電之間提供一個(gè)接口,可以發(fā)出和無線電之間提供一個(gè)接口,可以發(fā)出命令,讀取狀態(tài)和自動(dòng)對無線電事件排序。命令,讀取狀態(tài)和自動(dòng)對無線電事件排序。RF內(nèi)核包括以下幾部分:無線電控內(nèi)核包括以下幾部分:

6、無線電控制狀態(tài)模塊(制狀態(tài)模塊(FSM)、調(diào)制器,解調(diào)器、幀過濾和源匹配、頻率合成器()、調(diào)制器,解調(diào)器、幀過濾和源匹配、頻率合成器(FS)、)、命令選通處理器,定時(shí)器命令選通處理器,定時(shí)器2(MAC定時(shí)器)定時(shí)器) 5.2 RF內(nèi)核內(nèi)核l無線電無線電RAM:為發(fā)送:為發(fā)送TXFIFO和接收和接收RXFIFO分別分配分別分配128字節(jié)的字節(jié)的FIFO,為幀過,為幀過濾和源匹配存儲(chǔ)參數(shù)保留濾和源匹配存儲(chǔ)參數(shù)保留128字節(jié)。字節(jié)。l定時(shí)器定時(shí)器2(MAC定時(shí)器):用于為無線電事件計(jì)時(shí),以捕獲輸入數(shù)據(jù)包的時(shí)間定時(shí)器):用于為無線電事件計(jì)時(shí),以捕獲輸入數(shù)據(jù)包的時(shí)間戳,這一定時(shí)器在睡眠模式下也保持計(jì)數(shù)。

7、戳,這一定時(shí)器在睡眠模式下也保持計(jì)數(shù)。- 8 -RFERR中斷中斷RF中斷中斷5.2.1 中斷中斷 CC2530無線射頻的工作涉及到無線射頻的工作涉及到CPU兩個(gè)中斷向量兩個(gè)中斷向量- 9 -RFERR中斷其功能是表示無線射頻的錯(cuò)誤情況,無線射頻內(nèi)核錯(cuò)誤表現(xiàn)中斷其功能是表示無線射頻的錯(cuò)誤情況,無線射頻內(nèi)核錯(cuò)誤表現(xiàn)為為RF TX RFIO下溢或下溢或RX FIFO溢出,通過控制溢出,通過控制SFR寄存器的寄存器的IEN0.RFERRIE位使能。并且在位使能。并且在TCON.RFERRIF保存了保存了RFERR中斷標(biāo)志中斷標(biāo)志位(即是否發(fā)生中斷),位(即是否發(fā)生中斷), 5.2.1 中斷中斷 RF

8、ERR中斷中斷- 10 -5.2.1 中斷中斷 IEN0.RFERRIE/使能使能RF內(nèi)核錯(cuò)誤中斷內(nèi)核錯(cuò)誤中斷IEN0 |=0 x01; RFERR中斷中斷- 11 -5.2.1 中斷中斷 TCON.RFERRIF中斷標(biāo)志中斷標(biāo)志/判斷判斷RFERRIF中斷是否發(fā)生中斷是否發(fā)生if(RFERRIF = 1) RFERR中斷中斷- 12 -5.2.1 中斷中斷 RF中斷中斷 RF中斷其功能是數(shù)據(jù)發(fā)送和接收中斷。中斷其功能是數(shù)據(jù)發(fā)送和接收中斷。RF中斷是上升沿觸發(fā)的,通過中斷是上升沿觸發(fā)的,通過控制控制SFR寄存器的寄存器的IEN2.RFIE位使能,并且在位使能,并且在S1CON.RFIF保存了保

9、存了RFIF中斷標(biāo)志位中斷標(biāo)志位- 13 -5.2.1 中斷中斷 RF中斷中斷 IEN2.RFIE/使能使能RF中斷中斷IEN2 |=0 x01;- 14 -5.2.1 中斷中斷 RF中斷中斷 S1CON.RFIF 中斷標(biāo)志中斷標(biāo)志/判斷判斷RF一般中斷是否發(fā)生一般中斷是否發(fā)生if(RFIF_1 = 1)&( RFIF_2 = 1) - 15 -5.2.2 中斷寄存器中斷寄存器 RF內(nèi)核的兩個(gè)中斷源(內(nèi)核的兩個(gè)中斷源(RFERR和和RF),是),是RF內(nèi)核中若干中斷源的組合,其內(nèi)核中若干中斷源的組合,其中每個(gè)單獨(dú)的中斷源在中每個(gè)單獨(dú)的中斷源在RF內(nèi)核中有自己的中斷屏蔽寄存器和中斷標(biāo)志寄

10、存器。內(nèi)核中有自己的中斷屏蔽寄存器和中斷標(biāo)志寄存器。 中斷屏蔽寄存器中斷屏蔽寄存器 中斷標(biāo)志寄存器中斷標(biāo)志寄存器- 16 -5.2.2 中斷寄存器中斷寄存器 中斷屏蔽寄存器中斷屏蔽寄存器 RF中斷屏蔽寄存器中斷屏蔽寄存器RFIRQM0 RF中斷屏蔽寄存器中斷屏蔽寄存器RFIRQM1 RF錯(cuò)誤中斷屏蔽寄存器錯(cuò)誤中斷屏蔽寄存器RFERRM - 17 -5.2.2 中斷寄存器中斷寄存器 中斷屏蔽寄存器中斷屏蔽寄存器 RF中斷屏蔽寄存器中斷屏蔽寄存器RFIRQM0/ RXPKTDONE 中斷位使能中斷位使能RFIRQM0 |= (16);- 18 -5.2.2 中斷寄存器中斷寄存器 中斷屏蔽寄存器中斷

11、屏蔽寄存器 RF中斷屏蔽寄存器中斷屏蔽寄存器RFIRQM1/ TXPKTDONE 中斷位使能中斷位使能RFIRQM1 |= (11);- 19 -5.2.2 中斷寄存器中斷寄存器 中斷屏蔽寄存器中斷屏蔽寄存器 RF錯(cuò)誤中斷屏蔽寄存器錯(cuò)誤中斷屏蔽寄存器RFERRM- 20 -5.2.2 中斷寄存器中斷寄存器 中斷標(biāo)志寄存器中斷標(biāo)志寄存器 RFIRQF0 RFIRQF1 錯(cuò)誤中斷標(biāo)志寄存器錯(cuò)誤中斷標(biāo)志寄存器RFIERRF - 21 -5.2.2 中斷寄存器中斷寄存器 中斷標(biāo)志寄存器中斷標(biāo)志寄存器 RFIRQF0/判斷判斷RF一般中斷是否發(fā)生一般中斷是否發(fā)生if(RFIRQF0 & 0 x4

12、0) - 22 -5.2.2 中斷寄存器中斷寄存器 中斷標(biāo)志寄存器中斷標(biāo)志寄存器 RFIRQF1- 23 -5.2.2 中斷寄存器中斷寄存器 中斷標(biāo)志寄存器中斷標(biāo)志寄存器 RFIERRF - 24 -5.3 FIFO訪問訪問 CC2530發(fā)送或接收數(shù)據(jù)是通過發(fā)送或接收數(shù)據(jù)是通過FIFO操作來進(jìn)行的。操作來進(jìn)行的。FIFO訪問可以分為訪問可以分為TXFIFO訪問和訪問和RXFIFO訪問,其操作都是通過訪問,其操作都是通過SFR寄存器的寄存器的RFD操作進(jìn)行。操作進(jìn)行。當(dāng)寫入當(dāng)寫入RFD寄存器時(shí),數(shù)據(jù)被寫入到寄存器時(shí),數(shù)據(jù)被寫入到TXFIFO,當(dāng)讀取數(shù)據(jù),當(dāng)讀取數(shù)據(jù)RFD寄存器時(shí),寄存器時(shí),數(shù)據(jù)從

13、數(shù)據(jù)從RXFIFO中讀出。中讀出。 unsigned char i;signed char tx =dh;/將將mac的內(nèi)容寫到的內(nèi)容寫到RFD中中for(i=0;i3;i+) RFD = txi;- 25 -5.3.1 RXFIFO訪問訪問 RXFIFO存儲(chǔ)器區(qū)域位于地址存儲(chǔ)器區(qū)域位于地址0 x6000到到0 x607F,一共,一共128字節(jié),在字節(jié),在XREG存儲(chǔ)區(qū)域中是可以訪問的。存儲(chǔ)區(qū)域中是可以訪問的。RXFIFO可以保存一個(gè)或多個(gè)收到可以保存一個(gè)或多個(gè)收到的幀,只要總字節(jié)數(shù)不大于的幀,只要總字節(jié)數(shù)不大于128字節(jié)。有兩種方式確定字節(jié)。有兩種方式確定RXFIFO中的中的字節(jié)數(shù):字節(jié)數(shù):

14、 l 讀讀RFD寄存器寄存器 l 讀讀RXFIFOCNT寄存器寄存器 - 26 -5.3.1 RXFIFO訪問訪問 讀讀RFD寄存器寄存器/ 通過通過RFD讀接收的數(shù)據(jù)長度讀接收的數(shù)據(jù)長度unsigned char len;len = RFD;- 27 -5.3.1 RXFIFO訪問訪問 讀讀RXFIFOCNT寄存器寄存器/ 通過通過RXFIFOCNT讀接收的數(shù)據(jù)長度讀接收的數(shù)據(jù)長度unsigned char len;len = RXFIFOCNT;通過通過RFD寄存器讀取的幀長度為數(shù)據(jù)幀的寄存器讀取的幀長度為數(shù)據(jù)幀的“實(shí)際發(fā)送數(shù)實(shí)際發(fā)送數(shù)據(jù)域據(jù)域+幀尾域幀尾域”部分;通過部分;通過RXFIF

15、OCNT寄存器讀取的幀寄存器讀取的幀長度為數(shù)據(jù)幀長度為數(shù)據(jù)幀“幀長度域幀長度域+實(shí)際發(fā)送數(shù)據(jù)域?qū)嶋H發(fā)送數(shù)據(jù)域+幀尾域幀尾域”,由于幀長度域占一個(gè)字節(jié),因此通過由于幀長度域占一個(gè)字節(jié),因此通過RXFIFOCNT寄存寄存器讀出來的數(shù)據(jù)長度比通過器讀出來的數(shù)據(jù)長度比通過RFD寄存器讀出來的長度多寄存器讀出來的長度多一個(gè)字節(jié)一個(gè)字節(jié) - 28 -5.3.2 TXFIFO訪問訪問 TXFIFO存儲(chǔ)器區(qū)域位于地址存儲(chǔ)器區(qū)域位于地址0 x6080到到0 x60FF,一共,一共128字節(jié)。它在字節(jié)。它在XREG存儲(chǔ)區(qū)域中是可以訪問的。存儲(chǔ)區(qū)域中是可以訪問的。 在不產(chǎn)生在不產(chǎn)生TX下溢的情況下,幀數(shù)據(jù)可以在執(zhí)行

16、下溢的情況下,幀數(shù)據(jù)可以在執(zhí)行TX命令選通之前或之后緩沖命令選通之前或之后緩沖 陰影部分的字節(jié)必須寫到陰影部分的字節(jié)必須寫到TXFIFO的字節(jié),其他字節(jié)可以被忽略。寫入的字節(jié),其他字節(jié)可以被忽略。寫入TXFIFO的幀數(shù)據(jù)根據(jù)的幀數(shù)據(jù)根據(jù)AUTOCRC(CRC自動(dòng)校驗(yàn))是否啟用可以分為兩種自動(dòng)校驗(yàn))是否啟用可以分為兩種情況:當(dāng)情況:當(dāng)AUTOCRC為為0時(shí),沒有啟動(dòng)硬件自動(dòng)檢測;當(dāng)時(shí),沒有啟動(dòng)硬件自動(dòng)檢測;當(dāng)AUTOCRC為為1時(shí),時(shí),啟動(dòng)了硬件自動(dòng)檢測。啟動(dòng)了硬件自動(dòng)檢測。 - 29 -5.3.2 TXFIFO訪問訪問 TXFIFO中的字節(jié)數(shù)存儲(chǔ)在中的字節(jié)數(shù)存儲(chǔ)在TXFIFOCNT寄存器中,可

17、以通過兩種方式來進(jìn)行寄存器中,可以通過兩種方式來進(jìn)行TXFIFO的寫操作的寫操作 寫入寫入RFD寄存器。寄存器。 由于幀緩沖總是開始于由于幀緩沖總是開始于TXFIFO存儲(chǔ)器的起始地址,因此可以通過使能存儲(chǔ)器的起始地址,因此可以通過使能FRMCTRL1.IGNORE_TX_UNDERF位,直接將幀數(shù)據(jù)寫到無線電存儲(chǔ)器的位,直接將幀數(shù)據(jù)寫到無線電存儲(chǔ)器的RAM區(qū)域。本書中建議使用區(qū)域。本書中建議使用RFD寫數(shù)據(jù)到寫數(shù)據(jù)到TXFIFO。不建議用此種操作不建議用此種操作- 30 -5.4 發(fā)送模式發(fā)送模式 CC2530射頻的發(fā)送過程:射頻的發(fā)送過程:l 發(fā)送器的控制發(fā)送器的控制l 幀的處理幀的處理-

18、31 -5.4.1 TX控制控制 在幀處理和報(bào)告狀態(tài)下,無線電有許多內(nèi)置的功能,這些功能可精確控制輸出在幀處理和報(bào)告狀態(tài)下,無線電有許多內(nèi)置的功能,這些功能可精確控制輸出幀的時(shí)序。幀的時(shí)序。 在設(shè)置在設(shè)置TX和和RX的過程中可以通過寄存器來設(shè)置,且必須在的過程中可以通過寄存器來設(shè)置,且必須在TX和和RX中同時(shí)設(shè)置中同時(shí)設(shè)置 /設(shè)置設(shè)置TX抗混疊過濾器以獲得合適的帶寬抗混疊過濾器以獲得合適的帶寬TXFILTCFG = 0 x09;/調(diào)整調(diào)整AGC目標(biāo)值目標(biāo)值A(chǔ)GCCTRL1 = 0 x15;/獲得最佳的獲得最佳的EVMFSCAL1 = 0 x00;- 32 -5.4.2 幀處理幀處理 CC253

19、0數(shù)據(jù)幀的基本結(jié)構(gòu)如下:數(shù)據(jù)幀的基本結(jié)構(gòu)如下: 同步頭同步頭 需要傳輸?shù)臄?shù)據(jù)需要傳輸?shù)臄?shù)據(jù) 幀尾幀尾- 33 -5.4.2 幀處理幀處理 同步頭同步頭 幀引導(dǎo)序列幀引導(dǎo)序列 幀開始界定符幀開始界定符 當(dāng)已經(jīng)發(fā)送了所需的幀引導(dǎo)序列字節(jié)數(shù),射頻部分會(huì)自動(dòng)發(fā)送當(dāng)已經(jīng)發(fā)送了所需的幀引導(dǎo)序列字節(jié)數(shù),射頻部分會(huì)自動(dòng)發(fā)送1字節(jié)長的字節(jié)長的SFD(幀開始界定符)。(幀開始界定符)。SFD是固定的,軟件不能改變其值。是固定的,軟件不能改變其值。 - 34 -5.4.2 幀處理幀處理 需要傳輸?shù)臄?shù)據(jù)需要傳輸?shù)臄?shù)據(jù) LEN(幀長度域):幀長度域用于確定要發(fā)送多少個(gè)字節(jié)。(幀長度域):幀長度域用于確定要發(fā)送多少個(gè)字節(jié)

20、。 MAC幀:幀:MAC幀包括幀包括MHR(MAC幀頭)和幀頭)和MAC負(fù)載兩部分,是來自負(fù)載兩部分,是來自與與MAC層的數(shù)據(jù)。層的數(shù)據(jù)。 當(dāng)發(fā)送了當(dāng)發(fā)送了SFD,調(diào)制器開始從,調(diào)制器開始從TXFIFO讀數(shù)據(jù),首先讀幀長度域,然后讀數(shù)據(jù),首先讀幀長度域,然后是是MHR(MAC幀頭)和幀頭)和MAC負(fù)載。負(fù)載。 - 35 -5.4.2 幀處理幀處理 幀尾幀尾 寄存器寄存器FRMCTRL0.AUTOCRC控制位控制幀尾域的幀校驗(yàn)序列自動(dòng)產(chǎn)控制位控制幀尾域的幀校驗(yàn)序列自動(dòng)產(chǎn)生,其中幀尾不寫入生,其中幀尾不寫入TXFIFO中,存儲(chǔ)在一個(gè)單獨(dú)的中,存儲(chǔ)在一個(gè)單獨(dú)的16位寄存器中。位寄存器中。 除了可能用

21、于調(diào)試的目的,建議使能除了可能用于調(diào)試的目的,建議使能AUTOCRC。 如果如果FRMCTRL.AUTOCRC=0,那么調(diào)制器期望在,那么調(diào)制器期望在TXFIFO中找到中找到FCS,所以軟件必須產(chǎn)生所以軟件必須產(chǎn)生FCS,連同,連同MAC負(fù)載一起寫到負(fù)載一起寫到TXFIFO FRMCTRL0 幀處理寄存器幀處理寄存器- 36 -5.4.2 幀處理幀處理 幀尾幀尾FRMCTRL0 幀處理寄存器幀處理寄存器- 37 -5.4.2 幀處理幀處理 數(shù)據(jù)幀的產(chǎn)生數(shù)據(jù)幀的產(chǎn)生 CC2530射頻部分產(chǎn)生并自動(dòng)傳輸物理層的同步頭,包括幀引導(dǎo)序列和射頻部分產(chǎn)生并自動(dòng)傳輸物理層的同步頭,包括幀引導(dǎo)序列和幀開始界定

22、符(幀開始界定符(SFD)。)。 通過射頻部分傳輸幀長度域和指定的字節(jié)數(shù),包括通過射頻部分傳輸幀長度域和指定的字節(jié)數(shù),包括MAC幀頭和幀頭和MAC負(fù)負(fù)載。載。 通過操作寄存器計(jì)算并自動(dòng)傳輸幀尾(通過操作寄存器計(jì)算并自動(dòng)傳輸幀尾(FSC)。)。- 38 -5.5 接收模式接收模式 接收器的控制接收器的控制 RX幀的處理幀的處理 - 39 -5.5.1 RX控制控制 一般接收數(shù)據(jù)是通過接收中斷來處理的,在發(fā)送數(shù)據(jù)完成之后,首先要打開接一般接收數(shù)據(jù)是通過接收中斷來處理的,在發(fā)送數(shù)據(jù)完成之后,首先要打開接收中斷,接收中斷是通過寄存器收中斷,接收中斷是通過寄存器RFIRQM0的第的第6位位RXPKTDO

23、NE和和IEN2寄存器寄存器的第的第0位來控制的位來控制的 /* 打開接收中斷打開接收中斷*/ 打開打開RX中斷中斷 RFIRQM0 |= (16);/打開打開RF中斷中斷IEN2 |= (10);/* 接收數(shù)據(jù)接收數(shù)據(jù)*/接收幀長度接收幀長度len = RFD;len &= 0 x7f;/將接收的數(shù)據(jù)寫入將接收的數(shù)據(jù)寫入buf中中for (i = 0; i len; i+) bufi = RFD; Delay(200);- 40 -5.5.2 幀處理幀處理 CC2530的接收器收到的幀結(jié)構(gòu)如下的接收器收到的幀結(jié)構(gòu)如下 當(dāng)當(dāng)CC2530的射頻模塊接收到一個(gè)數(shù)據(jù)幀時(shí)執(zhí)行以下操作的射頻模塊

24、接收到一個(gè)數(shù)據(jù)幀時(shí)執(zhí)行以下操作 移除同步頭:由移除同步頭:由CC2530射頻硬件部分檢測和移除收到的射頻硬件部分檢測和移除收到的PHY同步頭(幀引導(dǎo)同步頭(幀引導(dǎo)序列和序列和SFD)。)。接收數(shù)據(jù)幀:通過操作寄存器接收幀長度域規(guī)定的字節(jié)數(shù),(包括接收數(shù)據(jù)幀:通過操作寄存器接收幀長度域規(guī)定的字節(jié)數(shù),(包括MHR和和MAC負(fù)載)。負(fù)載)。幀過濾:通過操作寄存器可以實(shí)現(xiàn)幀過濾功能,拒絕接收目標(biāo)不明確的數(shù)據(jù)幀過濾:通過操作寄存器可以實(shí)現(xiàn)幀過濾功能,拒絕接收目標(biāo)不明確的數(shù)據(jù)幀。幀。- 41 -5.5.2 幀處理幀處理 CC2530的接收器收到的幀結(jié)構(gòu)如下的接收器收到的幀結(jié)構(gòu)如下 當(dāng)當(dāng)CC2530的射頻模

25、塊接收到一個(gè)數(shù)據(jù)幀時(shí)執(zhí)行以下操作的射頻模塊接收到一個(gè)數(shù)據(jù)幀時(shí)執(zhí)行以下操作 匹配源地址:包括多達(dá)匹配源地址:包括多達(dá)24個(gè)短地址的表,或個(gè)短地址的表,或12個(gè)擴(kuò)展個(gè)擴(kuò)展IEEE地址。源地址存儲(chǔ)地址。源地址存儲(chǔ)在無線電在無線電RAM中。中。自動(dòng)自動(dòng)FCS檢查:通過操作寄存器可以選擇把自動(dòng)檢查的結(jié)果和其它狀態(tài)值檢查:通過操作寄存器可以選擇把自動(dòng)檢查的結(jié)果和其它狀態(tài)值(RSSI、LQI和源匹配結(jié)果)填入接收到的幀中。和源匹配結(jié)果)填入接收到的幀中。具有正確時(shí)序的自動(dòng)確認(rèn)傳輸:可以通過操作寄存器且正確設(shè)置幀未決位,具有正確時(shí)序的自動(dòng)確認(rèn)傳輸:可以通過操作寄存器且正確設(shè)置幀未決位,基于源地址匹配和基于源地

26、址匹配和FCS校驗(yàn)的結(jié)果校驗(yàn)的結(jié)果 “匹配源地址匹配源地址”是符合是符合IEEE802.15.4標(biāo)準(zhǔn)的,在直接操標(biāo)準(zhǔn)的,在直接操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收是可以不考慮此項(xiàng)操作的,即可是可以不考慮此項(xiàng)操作的,即可以禁止幀過濾功能以禁止幀過濾功能。 - 42 -5.6 CSMA/CA選通處理器選通處理器 CSMA/CA選通處理器提供控制選通處理器提供控制CPU和無線射頻模塊之間的通信。和無線射頻模塊之間的通信。CSMA/CA選通處理器通過選通處理器通過SFR寄存器寄存器RFST以及以及XREG寄存器和寄存器和CPU通信。本書中采用通信。本書中采用RFST寄存器和寄存器

27、和CPU進(jìn)行通信。進(jìn)行通信。 RFST CSMA/CA選通處理寄存器選通處理寄存器/為為RX使能并校準(zhǔn)頻率合成器使能并校準(zhǔn)頻率合成器RFST = 0 xe3;寫入寫入RFST寄存器的指令為寄存器的指令為CC2530的的RF指指令集令集 ,操作,操作RFST實(shí)現(xiàn)使能實(shí)現(xiàn)使能RX并校準(zhǔn)頻率并校準(zhǔn)頻率合成器的操作指令碼為合成器的操作指令碼為0 xe3 - 43 -5.6 CSMA/CA選通處理器選通處理器 以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述5.D.1 ,操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié),操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié)點(diǎn)發(fā)送完數(shù)據(jù)點(diǎn)發(fā)送完數(shù)據(jù)LED1燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后燈閃

28、爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后LED1閃爍閃爍 射頻初始化程序射頻初始化程序 void rf_init()/硬件硬件CRC以及以及AUTO_ACK使能使能FRMCTRL0 |= (0 x20 | 0 x40);/設(shè)置設(shè)置TX抗混疊過濾器以獲得合適的帶寬抗混疊過濾器以獲得合適的帶寬TXFILTCFG = 0 x09;/調(diào)整調(diào)整AGC目標(biāo)值目標(biāo)值A(chǔ)GCCTRL1 = 0 x15;/獲得最佳的獲得最佳的EVMFSCAL1 = 0 x00;/ RXPKTDONE 中斷位使能中斷位使能RFIRQM0 |= (16);/ RF 中斷使能中斷使能IEN2 |= (10);/開中斷開中斷EA = 1;/信道選擇,選

29、擇信道選擇,選擇11信道信道FREQCTRL = 0 x0b; /目標(biāo)地址過濾期間使用的短地址目標(biāo)地址過濾期間使用的短地址SHORT_ADDR0 = 0 x05;SHORT_ADDR1 = 0 x00;/目標(biāo)地址過濾期間使用的目標(biāo)地址過濾期間使用的PANIDPAN_ID0 = 0 x22; PAN_ID1 = 0 x00;/清除清除RXFIFO緩沖區(qū)并復(fù)位解調(diào)器緩沖區(qū)并復(fù)位解調(diào)器 RFST = 0 xed; /為為RX使能并校準(zhǔn)頻率合成器使能并校準(zhǔn)頻率合成器RFST = 0 xe3; /禁止幀過濾禁止幀過濾FRMFILT0 &= (10);- 44 -5.6 CSMA/CA選通處理器選

30、通處理器 以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述5.D.1 ,操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié),操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié)點(diǎn)發(fā)送完數(shù)據(jù)點(diǎn)發(fā)送完數(shù)據(jù)LED1燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后LED1閃爍閃爍 發(fā)送程序發(fā)送程序 void tx() unsigned char i; signed char tx=hello; /為為RX使能并校準(zhǔn)頻率合成器使能并校準(zhǔn)頻率合成器 RFST = 0 xe3; / TX_ACTIVE | SFD while (FSMSTAT1 & (11) | (15); /禁止禁止RXPKTDONE中斷中斷 RFIRQM

31、0 &= (16); /禁止禁止RF中斷中斷 IEN2 &= (10); / 清除清除TXFIFO緩存緩存 RFST = 0 xee; / 清除清除 TXDONE 中斷中斷 RFIRQF1 = (11); / 發(fā)送的第一個(gè)字節(jié)是傳輸?shù)膸L度發(fā)送的第一個(gè)字節(jié)是傳輸?shù)膸L度 RFD = 5; /將將mac的內(nèi)容寫到的內(nèi)容寫到RFD中中 for(i=0;i5;i+) RFD = txi; / 打開打開RX中斷中斷 RFIRQM0 |= (16); /打開打開RF中斷中斷 IEN2 |= (10); /校準(zhǔn)后使能校準(zhǔn)后使能TX RFST = 0 xe9; /等待傳輸結(jié)束等待傳輸結(jié)束 w

32、hile (!(RFIRQF1 & (11); /清除清除 TXDONE狀態(tài)狀態(tài) RFIRQF1 = (11); /LED1燈狀態(tài)改變燈狀態(tài)改變 LED1=LED1; /延時(shí)延時(shí) Delay(200); Delay(200);- 45 -5.6 CSMA/CA選通處理器選通處理器 以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述5.D.1 ,操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié),操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié)點(diǎn)發(fā)送完數(shù)據(jù)點(diǎn)發(fā)送完數(shù)據(jù)LED1燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后LED1閃爍閃爍 接收程序接收程序 /接收中斷處理接收中斷處理#pragma vector

33、=RF_VECTOR_interrupt void rf_isr(void) unsigned char i; /關(guān)中斷關(guān)中斷IEN2 &= 0X01; /接收幀結(jié)束接收幀結(jié)束if (RFIRQF0 & (16) /接收幀長度接收幀長度len = RFD;len &= 0 x7f;/將接收的數(shù)據(jù)寫入將接收的數(shù)據(jù)寫入buf中中for (i = 0; i len; i+) bufi = RFD;Delay(200);/ 清清RF中斷中斷S1CON = 0; /清清 RXPKTDONE中斷中斷 RFIRQF0 &= (16); /LED1等狀態(tài)改變等狀態(tài)改變LED1

34、= LED1;IEN2 |= (10);- 46 -5.6 CSMA/CA選通處理器選通處理器 以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述5.D.1 ,操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié),操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié)點(diǎn)發(fā)送完數(shù)據(jù)點(diǎn)發(fā)送完數(shù)據(jù)LED1燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后LED1閃爍閃爍 主函數(shù)主函數(shù) #include ioCC2530.h#define LED1 P1_0#define LED2 P1_1static unsigned char buf128;static unsigned char len=0;unsigned char i;vo

35、id main(void) /P1為普通為普通 I/O 口口 P1SEL &= (10); /P1.0 P1.1設(shè)置為輸出設(shè)置為輸出 P1DIR |= 0 x03; /關(guān)閉關(guān)閉LED1 LED1=1; /關(guān)閉關(guān)閉LED2 LED2=1; /關(guān)閉總中斷關(guān)閉總中斷 EA = 0; /設(shè)置時(shí)鐘頻率為設(shè)置時(shí)鐘頻率為32M SLEEPCMD &= 0 x04; /等待時(shí)鐘穩(wěn)定等待時(shí)鐘穩(wěn)定 while(!(SLEEPSTA & 0 x40); CLKCONCMD &= 0 x47; SLEEPCMD |= 0 x04; /初始化初始化RF rf_init(); /中斷使能中

36、斷使能 EA = 1; /發(fā)送或等待接收中斷發(fā)送或等待接收中斷 while(1) /宏定義宏定義RX #ifndef RX /如果沒有定義如果沒有定義RX,開始發(fā)送,開始發(fā)送 tx(); /延時(shí)延時(shí) Delay(200); Delay(200); /如果定義如果定義RX,等待接收中斷,等待接收中斷 # else #endif - 47 -5.6 CSMA/CA選通處理器選通處理器 以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述以下內(nèi)容將實(shí)現(xiàn)任務(wù)描述5.D.1 ,操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié),操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送接收。發(fā)送節(jié)點(diǎn)發(fā)送完數(shù)據(jù)點(diǎn)發(fā)送完數(shù)據(jù)LED1燈閃爍,接收節(jié)點(diǎn)接收完數(shù)據(jù)后燈閃爍,接收節(jié)點(diǎn)接收完數(shù)

37、據(jù)后LED1閃爍閃爍 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果 l分別將發(fā)送程序與接收程序下載至兩個(gè)不同的設(shè)備中,首先打開發(fā)分別將發(fā)送程序與接收程序下載至兩個(gè)不同的設(shè)備中,首先打開發(fā)送設(shè)備,可以觀察到發(fā)送設(shè)備的送設(shè)備,可以觀察到發(fā)送設(shè)備的LED1閃爍;然后打開接收設(shè)備,可閃爍;然后打開接收設(shè)備,可以觀察到接收設(shè)備的以觀察到接收設(shè)備的LED1閃爍頻率和發(fā)送設(shè)備的閃爍頻率和發(fā)送設(shè)備的LED1是相同的。是相同的。如果將發(fā)送設(shè)備關(guān)掉,接收設(shè)備的如果將發(fā)送設(shè)備關(guān)掉,接收設(shè)備的LED1將停止閃爍。將停止閃爍。 - 48 -5.7 IEEE802.15.4 CC2530芯片的射頻發(fā)送和接收是通過操作寄存器來實(shí)現(xiàn)的,雖然直接操作芯片

38、的射頻發(fā)送和接收是通過操作寄存器來實(shí)現(xiàn)的,雖然直接操作寄存器可以實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收,但是直接操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和寄存器可以實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收,但是直接操作寄存器實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收存在以下弊端:接收存在以下弊端:l不能指定接收者,即一個(gè)接收設(shè)備可以接收任何一個(gè)發(fā)送者發(fā)來的不能指定接收者,即一個(gè)接收設(shè)備可以接收任何一個(gè)發(fā)送者發(fā)來的數(shù)據(jù)。數(shù)據(jù)。l當(dāng)發(fā)送者比較多時(shí)會(huì)出現(xiàn)信道碰撞問題。當(dāng)發(fā)送者比較多時(shí)會(huì)出現(xiàn)信道碰撞問題。l不能建立個(gè)域網(wǎng)。不能建立個(gè)域網(wǎng)。- 49 -5.7.1 IEEE802.15.4調(diào)制規(guī)范調(diào)制規(guī)范 IEEE802.15.4的數(shù)字高頻調(diào)制使用的數(shù)字高頻調(diào)制使用2.4G直接序

39、列擴(kuò)頻技術(shù)。直接序列擴(kuò)頻技術(shù)。 直接序列擴(kuò)頻(直接序列擴(kuò)頻(Direct Sequence Spread Spectrum)工作方式,簡稱直)工作方式,簡稱直擴(kuò)方式(擴(kuò)方式(DSSS方式)。方式)。 DSSS是直接用偽噪聲序列對載波進(jìn)行調(diào)制,要傳送的數(shù)據(jù)信息需要經(jīng)過信是直接用偽噪聲序列對載波進(jìn)行調(diào)制,要傳送的數(shù)據(jù)信息需要經(jīng)過信道編碼后,進(jìn)行調(diào)制。道編碼后,進(jìn)行調(diào)制。 在接收機(jī)收到發(fā)射信號后,首先通過解調(diào)以便能夠及時(shí)恢復(fù)出數(shù)據(jù)信息,完在接收機(jī)收到發(fā)射信號后,首先通過解調(diào)以便能夠及時(shí)恢復(fù)出數(shù)據(jù)信息,完成整個(gè)直擴(kuò)通信系統(tǒng)的信號接收。成整個(gè)直擴(kuò)通信系統(tǒng)的信號接收。 - 50 -5.7.1 IEEE80

40、2.15.4調(diào)制規(guī)范調(diào)制規(guī)范 采用直接序列擴(kuò)頻系統(tǒng)的優(yōu)點(diǎn)如下采用直接序列擴(kuò)頻系統(tǒng)的優(yōu)點(diǎn)如下l 抗干擾能力強(qiáng),且具有強(qiáng)的抗多徑干擾能力??垢蓴_能力強(qiáng),且具有強(qiáng)的抗多徑干擾能力。l 對其他電臺干擾小,抗截獲能力強(qiáng)。對其他電臺干擾小,抗截獲能力強(qiáng)。l 可以同頻工作??梢酝l工作。l 便于實(shí)現(xiàn)多址通信。便于實(shí)現(xiàn)多址通信。- 51 -5.7.2 IEEE802.15.4數(shù)據(jù)格式數(shù)據(jù)格式 IEEE802.15.4定義了定義了MAC層以及物理層的通信數(shù)據(jù)格式。其中,物理層的層以及物理層的通信數(shù)據(jù)格式。其中,物理層的數(shù)據(jù)格式是在數(shù)據(jù)格式是在MAC協(xié)議數(shù)據(jù)單元格式前加上同步頭以及物理頭兩部分協(xié)議數(shù)據(jù)單元格式前加

41、上同步頭以及物理頭兩部分 同步頭包括幀引導(dǎo)序列和幀開始界定符。同步頭包括幀引導(dǎo)序列和幀開始界定符。 物理頭即幀長度域。物理頭即幀長度域。 物理層服務(wù)數(shù)據(jù)單元(物理層服務(wù)數(shù)據(jù)單元(PSDU)即)即MAC協(xié)議數(shù)據(jù)單元(協(xié)議數(shù)據(jù)單元(MPDU),包括以下),包括以下幾部分:幾部分:MAC頭、頭、MAC載荷以及幀尾。載荷以及幀尾。- 52 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) IEEE802.15.4射頻程序主要分為發(fā)送和接收兩部分。其主函數(shù)部分程序設(shè)計(jì)射頻程序主要分為發(fā)送和接收兩部分。其主函數(shù)部分程序設(shè)計(jì)流程如下:流程如下:- 53 -5.7.3 IEEE802.15.4射

42、頻程序設(shè)計(jì)射頻程序設(shè)計(jì) IEEE802.15.4射頻程序主要分為發(fā)送和接收兩部分。其操作過程如下:射頻程序主要分為發(fā)送和接收兩部分。其操作過程如下: 下載軟件包下載軟件包 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng) 修改程序修改程序- 54 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 下載軟件包下載軟件包 首先從首先從TI的官方網(wǎng)站上的官方網(wǎng)站上下載下載srf05_cc2530軟件包,解壓后使用軟件包,解壓后使用IAR打開打開CC2530 BasicRFidesrf05_cc2530iarlight_switch.eww文件文件 從從TI官方網(wǎng)站官方網(wǎng)站下載下載的的srf05_c

43、c2530軟件包,要求軟件包,要求用用IAR 7.51A版本打開版本打開 - 55 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng) 為了實(shí)現(xiàn)點(diǎn)對點(diǎn)的發(fā)送和接收需要對為了實(shí)現(xiàn)點(diǎn)對點(diǎn)的發(fā)送和接收需要對light_switch工程做如下改動(dòng):工程做如下改動(dòng): 需要定義需要定義“發(fā)送發(fā)送”和和“接收接收”兩個(gè)不同的工程選項(xiàng),本例程將兩個(gè)不同的工程選項(xiàng),本例程將“發(fā)送發(fā)送”定定義為義為“SWITCH”,“接收接收”定義為定義為“LIGHT”。 以定義發(fā)送選項(xiàng)以定義發(fā)送選項(xiàng)“SWITCH為例講解為例講解”- 56 -5.7.3 IEEE802.15.4

44、射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)點(diǎn)擊工程的工具欄的Project選項(xiàng),選擇下拉菜單中的“Edit Configuration”選項(xiàng) - 57 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)點(diǎn)擊點(diǎn)擊Edit Configuration選選項(xiàng)后,彈出項(xiàng)后,彈出Configuration for “l(fā)ight_switch”對話框,對話框,點(diǎn)擊點(diǎn)擊“New”選項(xiàng)選項(xiàng) - 58 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)彈出彈出“New Configuratio

45、n”的對的對話框后,在此對話框的話框后,在此對話框的“Name:”一欄中寫入一欄中寫入“SWITCH”,點(diǎn)擊,點(diǎn)擊“OK”選項(xiàng)選項(xiàng) - 59 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)可以看到在可以看到在“Configuration for light_switch”對話框中對話框中已經(jīng)添加了已經(jīng)添加了“SWITCH”選項(xiàng)選項(xiàng) - 60 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)以相同的方式添加以相同的方式添加“LIGHT”選項(xiàng),添加完成之后,選項(xiàng),添加完成之后,在在“l(fā)ight

46、_switch”工程的工程的“Workspace”的下拉菜單中的下拉菜單中可以看到添加了可以看到添加了“SWITCH”和和“LIGHT”選項(xiàng)選項(xiàng) - 61 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)選擇選擇“LIGHT”選項(xiàng),右擊選項(xiàng),右擊“l(fā)ight_switch-LIGHT”選擇選擇“option”選項(xiàng),編輯選項(xiàng),編輯“Options”選項(xiàng)選項(xiàng) - 62 -5.7.3 IEEE802.15.4射頻程序設(shè)計(jì)射頻程序設(shè)計(jì) 定義發(fā)送和接收選項(xiàng)定義發(fā)送和接收選項(xiàng)彈出彈出“Option for node light_switch”的對話框,在

47、此對話框右側(cè)的的對話框,在此對話框右側(cè)的“Category”一欄中選擇一欄中選擇“C/C+Compiler”選項(xiàng),然后在左側(cè)選擇選項(xiàng),然后在左側(cè)選擇“Preprocessor”選項(xiàng),在選項(xiàng),在“Define Symbol:”一欄中添加宏定義一欄中添加宏定義“LIGH”,并點(diǎn)擊并點(diǎn)擊“OK”選項(xiàng)完成添加選項(xiàng)完成添加 - 63 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序?qū)ⅰ發(fā)ight_switch.c”文件下的文件下的main函數(shù)修改如下:函數(shù)修改如下:void main(void) /模式定義為空模式定義為空 uint8 appMode = NONE; /*RF配置配置*/ / PANI

48、D設(shè)置設(shè)置 basicRfConfig.panId = PAN_ID; /信道設(shè)置信道設(shè)置 basicRfConfig.channel = RF_CHANNEL; /確認(rèn)請求確認(rèn)請求 basicRfConfig.ackRequest = TRUE; #ifdef SECURITY_CCM /安全選型設(shè)置安全選型設(shè)置 basicRfConfig.securityKey = key; #endif /*RF配置配置*/ / 硬件初始化硬件初始化 halBoardInit(); /hal_rf初始化初始化 if(halRfInit()=FAILED) HAL_ASSERT(FALSE); - 64

49、-5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序?qū)ⅰ發(fā)ight_switch.c”文件下的文件下的main函數(shù)修改如下:函數(shù)修改如下:/點(diǎn)亮點(diǎn)亮LED1 halLedSet(1); /等待等待S1按下按下 while (halButtonPushed()!=HAL_BUTTON_1); /延時(shí)延時(shí) halMcuWaitMs(350); /如果定義了如果定義了SWIH #ifdef SWTH /模式為按鍵模式模式為按鍵模式 appMode =SWITCH; #endif /如果定義了如果定義了LIHT #ifdef LIHT /模式為模式為LIGHT模式模式 appMode = LIGHT;

50、#endif /如果模式為如果模式為SWITCH模式,將調(diào)用模式,將調(diào)用appSwitch()函數(shù)()函數(shù) if(appMode = SWITCH) appSwitch(); /如果為如果為LIGHT模式,將調(diào)用模式,將調(diào)用appLight()函數(shù)()函數(shù) else if(appMode = LIGHT) appLight(); / 如果返回錯(cuò)誤將執(zhí)行閃燈命令如果返回錯(cuò)誤將執(zhí)行閃燈命令 HAL_ASSERT(FALSE);- 65 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序基于基于IEEE802.15.4點(diǎn)對點(diǎn)的數(shù)據(jù)發(fā)送和接收,由于發(fā)送和接收需要符合點(diǎn)對點(diǎn)的數(shù)據(jù)發(fā)送和接收,由于發(fā)送和接收

51、需要符合IEEE802.15.4規(guī)范,因此在程序的編寫過程中首先要定義一些結(jié)構(gòu)體,比規(guī)范,因此在程序的編寫過程中首先要定義一些結(jié)構(gòu)體,比較重要的結(jié)構(gòu)體有兩個(gè):較重要的結(jié)構(gòu)體有兩個(gè):lRF初始化結(jié)構(gòu)體初始化結(jié)構(gòu)體basicRfCfg_t。lMAC數(shù)據(jù)幀幀頭結(jié)構(gòu)體數(shù)據(jù)幀幀頭結(jié)構(gòu)體basicRfPktHdr_t。 - 66 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序lRF初始化結(jié)構(gòu)體初始化結(jié)構(gòu)體basicRfCfg_t。typedef struct uint16 myAddr; uint16 panId; uint8 channel; uint8 ackRequest; #ifdef SECU

52、RITY_CCM uint8* securityKey; uint8* securityNonce; #endif basicRfCfg_t;源地址信息:為16位短地址 網(wǎng)絡(luò)PANID:16位信息 信道:取值為1126 確認(rèn)請求:1接收確認(rèn)幀;0不接收 - 67 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序lMAC數(shù)據(jù)幀幀頭結(jié)構(gòu)體數(shù)據(jù)幀幀頭結(jié)構(gòu)體basicRfPktHdr_t typedef struct uint8 packetLength; uint8 fcf0; uint8 fcf1; uint8 seqNumber; uint16 panId; uint16 destAddr; u

53、int16 srcAddr; #ifdef SECURITY_CCM uint8 securityControl; uint8 frameCounter4; #endif basicRfPktHdr_t;數(shù)據(jù)長度數(shù)據(jù)長度 幀控制域低字節(jié)幀控制域低字節(jié) 幀控制域高字節(jié)幀控制域高字節(jié) 幀序號幀序號 PANID 源地址和目的地址源地址和目的地址 - 68 -5.7.3 發(fā)送過程發(fā)送過程 修改程序修改程序l發(fā)送過程發(fā)送過程 :在主函數(shù)中判定發(fā)送模式和接收模式,如果為發(fā)送模式,在主函數(shù)中判定發(fā)送模式和接收模式,如果為發(fā)送模式,將調(diào)用將調(diào)用appSwitch()函數(shù)發(fā)送數(shù)據(jù),此函數(shù)的功能為實(shí)現(xiàn)每秒鐘發(fā)送(

54、)函數(shù)發(fā)送數(shù)據(jù),此函數(shù)的功能為實(shí)現(xiàn)每秒鐘發(fā)送一次數(shù)據(jù)。一次數(shù)據(jù)。appSwitch()函數(shù)在()函數(shù)在light_switch.c文件中。文件中。 static void appSwitch() /需要發(fā)送的命令需要發(fā)送的命令 pTxData0 = LIGHT_TOGGLE_CMD; /賦予源地址信息賦予源地址信息 basicRfConfig.myAddr = SWITCH_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); /關(guān)閉接收器關(guān)閉接收器 basicRfReceiveOff(); /每隔一秒鐘發(fā)送一個(gè)

55、數(shù)據(jù)每隔一秒鐘發(fā)送一個(gè)數(shù)據(jù) while (TRUE) /延時(shí)延時(shí)1s Delay(); /發(fā)送函數(shù)發(fā)送函數(shù) basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH); - 69 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序l發(fā)送過程發(fā)送過程 :在發(fā)送函數(shù)在發(fā)送函數(shù)appSwitch()中調(diào)用了一個(gè)重要的函數(shù)()中調(diào)用了一個(gè)重要的函數(shù)basicRfSendPacket(),此函數(shù)在(),此函數(shù)在basic_rf.c文件中。文件中。basicRfSendPacket()實(shí)現(xiàn)將數(shù)據(jù)按照()實(shí)現(xiàn)將數(shù)據(jù)按照IEEE802.15.4的數(shù)據(jù)格式

56、將的數(shù)據(jù)格式將數(shù)據(jù)發(fā)送出去,如果發(fā)送成功幀序號將加數(shù)據(jù)發(fā)送出去,如果發(fā)送成功幀序號將加1。uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) uint8 mpduLength; uint8 status; / 如果接收器沒有打開將打開接收器 if(!txState.receiveOn) halRfReceiveOn(); / 發(fā)送數(shù)據(jù)幀長度 length = min(length, BASIC_RF_MAX_PAYLOAD_SIZE); /等待發(fā)送就緒 halRfWaitTransceiverReady

57、(); / 關(guān)閉接收中斷 halRfDisableRxInterrupt(); /獲得發(fā)送數(shù)據(jù)長度 mpduLength = basicRfBuildMpdu(destAddr, pPayload, length); /將txbuffer寫入RFD halRfWriteTxBuf(txMpdu, mpduLength); / 打開RX中斷接收ACK幀 halRfEnableRxInterrupt();用來獲得發(fā)送數(shù)據(jù)的長度。 - 70 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序l發(fā)送過程發(fā)送過程 :basicRfBuildMpdu( ) 函數(shù)如下函數(shù)如下static uint8 basi

58、cRfBuildMpdu(uint16 destAddr, uint8* pPayload, uint8 payloadLength) uint8 hdrLength, n; /按照MAC數(shù)據(jù)幀結(jié)構(gòu)添加幀頭 hdrLength = basicRfBuildHeader(txMpdu, destAddr, payloadLength); for(n=0;npacketLength = payloadLength + BASIC_RF_PACKET_OVERHEAD_SIZE; /*判斷需不需要確認(rèn)幀回復(fù),如果需要判斷需不需要確認(rèn)幀回復(fù),如果需要fcf為為BASIC_RF_FCF_ACK否則為否則

59、為BASIC_RF_FCF_NOACK*/ fcf= pConfig-ackRequest ? BASIC_RF_FCF_ACK : BASIC_RF_FCF_NOACK; /幀控制域低字節(jié)幀控制域低字節(jié) pHdr-fcf0 = LO_UINT16(fcf); /幀控制域高字節(jié)幀控制域高字節(jié) pHdr-fcf1 = HI_UINT16(fcf); /幀序號幀序號 pHdr-seqNumber= txState.txSeqNumber; /panId設(shè)置設(shè)置 pHdr-panId= pConfig-panId; /目的地址信息目的地址信息 pHdr-destAddr= destAddr; /源地

60、址信息源地址信息 pHdr-srcAddr= pConfig-myAddr; /* 確保地址信息為確保地址信息為IEEE802.15.4所定義的類型所定義的類型*/ UINT16_HTON(pHdr-panId); UINT16_HTON(pHdr-destAddr); UINT16_HTON(pHdr-srcAddr);/返回值為返回值為MAC幀頭長度幀頭長度 return BASIC_RF_HDR_SIZE;- 72 -5.7.4 發(fā)送過程發(fā)送過程 修改程序修改程序l發(fā)送過程發(fā)送過程 :數(shù)據(jù)的發(fā)送和接收函數(shù)是通過數(shù)據(jù)的發(fā)送和接收函數(shù)是通過hal_rf.c文件中的文件中的halRfWriteTxBuf()和()和halRfTransmit()函數(shù)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,()函數(shù)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,halRfWriteTxBuf()函數(shù)實(shí)現(xiàn)將發(fā)送的數(shù)據(jù)寫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論