EZMacTM媒體接入控制軟件(07-100)
網(wǎng)絡(luò)定址方式中的地址過濾器
本文引用地址:http://2s4d.com/article/91986.htm
圖3 網(wǎng)絡(luò)定址模式的操作流程
圖3顯示了網(wǎng)絡(luò)定址模式的操作流程。在這個(gè)模式中,數(shù)據(jù)包的定址和過濾都更為簡單。雖然沒有獨(dú)立的發(fā)送方和接收方的地址,但是使用了一個(gè)被稱為“網(wǎng)絡(luò)ID”的16比特的單地址來識(shí)別通信網(wǎng)絡(luò)中的成員。
網(wǎng)絡(luò)中的所有信息都是廣播信息。然而,廣播尋址也需要支持特殊模式,例如學(xué)習(xí)模式或者網(wǎng)絡(luò)之間的通信。
在“接收”模式中,接收到的16比特的網(wǎng)絡(luò)ID將與由NIDFL和NIDFH寄存器共同組成的16位地址進(jìn)行比較。如果縮小地址范圍,NWID也可以僅具備8位的寬度,而只需與NIDFL寄存器進(jìn)行比較。
在“發(fā)射”模式中,NWID段的數(shù)據(jù)包報(bào)頭由NIDL和 NIDH寄存器組成;在縮減的地址模式中,只有NIDL寄存器可用作8位網(wǎng)絡(luò)地址。
EZMac的檢錯(cuò)方法
EZMac能檢測(cè)出幾種錯(cuò)誤,這可以使上層的軟件層選擇最好的數(shù)據(jù)發(fā)送策略。EZMac檢錯(cuò)功能為每一個(gè)頻率信道都準(zhǔn)備了一個(gè)獨(dú)立的8bit錯(cuò)誤計(jì)數(shù)器,并安排了一個(gè)公共的控制寄存器。
控制寄存器用來啟用/關(guān)閉不同種類的檢錯(cuò)功能,各個(gè)計(jì)數(shù)器分別各自對(duì)應(yīng)的頻率信道上出現(xiàn)的允許錯(cuò)誤。計(jì)數(shù)器不會(huì)溢出,能被更上層的軟件層清空。
通道忙(沖突)
如果載波偵聽(Listen Before Talk)被啟用,EZMac在數(shù)據(jù)包開始發(fā)送之前檢查該信道,這一檢查的實(shí)現(xiàn)方式是:在被選中進(jìn)行傳送的頻率上讓接收器開啟至少8 bit周期的時(shí)間,并檢測(cè)DQD信號(hào)。
邏輯電平高表示信道正在傳送有效的FSK信號(hào)。EZMac不會(huì)干擾正在進(jìn)行的發(fā)送,也不會(huì)再傳送新的數(shù)據(jù)包,EZMac將進(jìn)入發(fā)送錯(cuò)誤狀態(tài)。
這只是檢測(cè)發(fā)送錯(cuò)誤,其它錯(cuò)誤在接收過程中檢測(cè),并且只有在讀取不同信道的錯(cuò)誤計(jì)數(shù)器時(shí)才能檢查出來。
收發(fā)同步檢錯(cuò)
開始執(zhí)行接收指令時(shí),要掃描可用的頻率,尋找FSK的發(fā)射。這個(gè)功能的實(shí)現(xiàn)方法是像2.4節(jié)中描述的那樣,通過在信道之間跳轉(zhuǎn)并檢測(cè)DQD信號(hào)來實(shí)現(xiàn)的。如果DQD電路在第一輪掃描中報(bào)告有FSK的發(fā)射,但是直到“等到IRQ超時(shí)”指令時(shí),接收機(jī)還處于未檢測(cè)到數(shù)據(jù)包開始傳送,則EZMac就會(huì)檢測(cè)到收發(fā)同步錯(cuò)誤。然后系統(tǒng)將繼續(xù)掃描下一個(gè)可用頻率,并使對(duì)應(yīng)的差錯(cuò)計(jì)數(shù)器加1。
包起點(diǎn)丟失
如果前面小節(jié)部分所描述的錯(cuò)誤情形,收發(fā)同步錯(cuò)誤,在第二輪掃描或后面的掃描中出現(xiàn),則EZMac就將檢測(cè)出數(shù)據(jù)包錯(cuò)誤的起點(diǎn)。這就是為什么EZMac能夠檢測(cè)出第三方的FSK傳輸。
錯(cuò)誤CID
在報(bào)頭中使用客戶ID,EZMac在數(shù)據(jù)包接收剛一開始的階段就能檢測(cè)數(shù)據(jù)包是系統(tǒng)內(nèi)數(shù)據(jù)包還是由使用EZRadio芯片組的第三方發(fā)射的數(shù)據(jù)包。當(dāng)接收機(jī)在數(shù)據(jù)包中識(shí)別到同步碼的開始字節(jié)(2DD4 ,十六進(jìn)制)時(shí),與收發(fā)同步錯(cuò)誤情形中相同的錯(cuò)誤就會(huì)發(fā)生。由于CID是報(bào)頭的第一個(gè)字節(jié),EZMac將很快中斷接收,繼續(xù)掃描可用的頻率,尋找有效數(shù)據(jù)。
錯(cuò)誤地址
緊隨CID字節(jié)發(fā)射的是地址字節(jié)。如果地址過濾器邏輯單元中發(fā)現(xiàn)這些字節(jié)出現(xiàn)錯(cuò)誤,EZMac就可以檢測(cè)到一個(gè)地址錯(cuò)誤的告警,然后中斷接收,繼續(xù)掃描可用的頻率,搜尋有效的數(shù)據(jù)包。
錯(cuò)誤CRC
如果接收到的包沒有通過循環(huán)冗余碼(CRC)校驗(yàn),EZMac會(huì)創(chuàng)建一個(gè)CRC錯(cuò)誤的報(bào)告,并丟棄該數(shù)據(jù)包。掃描可用的頻率、搜尋有效數(shù)據(jù)包的工作將繼續(xù)下去。這種錯(cuò)誤告警能給出關(guān)于射頻鏈路通信質(zhì)量的有用信息。
CRC錯(cuò)誤出現(xiàn)過多表示線路的質(zhì)量較差。檢測(cè)到其它種類錯(cuò)誤信息,但CRC錯(cuò)誤為數(shù)很少,這意味著線路是好的,但是以下情況:
a.)重要的第三方傳輸,或者
b.)明顯的系統(tǒng)內(nèi)沖突,
將意味著通信策略有問題。
錯(cuò)誤的包長度
如果接收到的數(shù)據(jù)包報(bào)頭的PL字節(jié)是0或者超出MPL寄存器所設(shè)定的極限,EZMac會(huì)發(fā)現(xiàn)包長度的錯(cuò)誤。一旦出現(xiàn)了包長度的錯(cuò)誤,EZMac會(huì)中斷接收,繼續(xù)為有效的數(shù)據(jù)包掃描可用的頻率。
狀態(tài)機(jī)的工作原理
圖4是EZMac狀態(tài)機(jī)的狀態(tài)詳圖。該圖包括了EZMac的九種基本狀態(tài)。當(dāng)然,EZMac狀態(tài)機(jī)可具備的狀態(tài)(子狀態(tài))要多得多,但是這九種基本狀態(tài)是上層的軟件層可以看到的。
圖4 狀態(tài)機(jī)工作原理
初始化
上層的必須調(diào)用EZMac_SysInit ()函數(shù)來初始化必要的I/O接口、外設(shè)(外部中斷和定時(shí)1單元)和處理器的寄存器。上層還必須調(diào)用 EZMac_Config ()函數(shù)來初始化EZMac和EZRadio收發(fā)器的芯片。這兩個(gè)函數(shù)都包括在加電重啟程序中?
喚醒
EZMac的狀態(tài)機(jī)在初始化之后進(jìn)入“休眠”狀態(tài)。在這個(gè)狀態(tài)中,收發(fā)機(jī)處于節(jié)電模式,功率消耗少于0.3uA。而且在該模式中,收發(fā)機(jī)會(huì)保存所有的設(shè)置,能接收SPI指令,但是所有的模擬部分被關(guān)閉(包括晶體振蕩器)。
EZMac_Wake_Up()函數(shù)能打開收發(fā)機(jī)的振蕩器。在振蕩器穩(wěn)定之前,MAC一直處于激活狀態(tài)。當(dāng)振蕩器穩(wěn)定后,MAC將進(jìn)入“空閑”狀態(tài)。上層可以使用“休眠”和“激活”狀態(tài)(幾個(gè)毫秒)來對(duì)MAC寄存器和MAC緩存進(jìn)行讀寫操作,但是直到MAC進(jìn)入空閑狀態(tài),上層才能使用EZMac_Receive()和EZMac_Transmit()兩個(gè)函數(shù)
接收流程
如果EZMac處于空閑狀態(tài),上層可以調(diào)用EZMac_Receive()函數(shù),之后EZMac開始掃描有用頻率,搜索FSK的發(fā)送(“檢測(cè)DQD”狀態(tài))。EZMac周期性的改變頻率,該周期大概是10bit的時(shí)間長度。如果MAC檢測(cè)到FSK發(fā)送的出現(xiàn),狀態(tài)機(jī)器會(huì)試圖接收實(shí)際的數(shù)據(jù)包(“接收數(shù)據(jù)包”狀態(tài))。
如果MAC在溢出時(shí)間內(nèi)沒有檢測(cè)到同步碼(參見2.4節(jié)),它會(huì)報(bào)告錯(cuò)誤,自動(dòng)回到檢測(cè)DQD的狀態(tài),繼續(xù)搜索有效的發(fā)送。如果MAC檢測(cè)到同步碼,它將開始數(shù)據(jù)包接收。EZMac在接收中的確要進(jìn)行地址過濾和CRC檢測(cè)。
如果數(shù)據(jù)包是有效的(所有地址和CRC都正確),狀態(tài)機(jī)進(jìn)入“數(shù)據(jù)包有效”狀態(tài),并在此狀態(tài)等候,直到上層讀取緩存器或者調(diào)用EZMac_Idle()函數(shù)。上層讀過緩存器或者調(diào)用EZMac_Idle()函數(shù)之后,狀態(tài)機(jī)器進(jìn)入空閑或休眠狀態(tài)(具體由接收控制寄存器的AXOR位的數(shù)值來決定)。
如果接受包不能通過過濾器,EZMac將回到Checking DQD狀態(tài),搜索下一個(gè)數(shù)據(jù)包。
發(fā)射流程
上層在休眠、空閑和喚醒狀態(tài)下都會(huì)填充緩沖器。如果狀態(tài)機(jī)處于空閑狀態(tài),數(shù)據(jù)包傳輸可以由上層通過調(diào)用EZMac_Transmit(void)函數(shù)來啟動(dòng)。如果“Listen before talk”函數(shù)可用,設(shè)備會(huì)檢查信道 (載波偵聽狀態(tài)),只有在信道空閑時(shí)才開始發(fā)送數(shù)據(jù)包。在發(fā)送過程中,MAC始終處于“發(fā)射數(shù)據(jù)包”狀態(tài)。
如果出現(xiàn)數(shù)據(jù)包的發(fā)送(發(fā)射狀態(tài)),狀態(tài)機(jī)自動(dòng)回到空閑狀態(tài)(AXOR位是0)或者休眠狀態(tài)( AXOR位是1)。如果信道被占用,那末下一個(gè)狀態(tài)就是“發(fā)送錯(cuò)誤”狀態(tài)。
此時(shí),狀態(tài)機(jī)處于等待狀態(tài),直到調(diào)用EZMac_Idle()和EZMac_Transmit()函數(shù):
·狀態(tài)機(jī)收到EZMac_Idle()進(jìn)入空閑或者休眠狀態(tài)(具體取決于AXOT位的值)
·狀態(tài)機(jī)收到EZMac_Transmit()指令后又開始發(fā)送數(shù)據(jù)包。
上層能在“發(fā)送錯(cuò)誤狀態(tài)”下改變信道。如果“Listen before talk”函數(shù)沒有激活,數(shù)據(jù)包將不經(jīng)過信道檢查就開始發(fā)送。
獲取EZMac的狀態(tài)信息
象前面所描述的,上面的層能看到九種主要狀態(tài)。Mac狀態(tài)寄存器(MSR)的前四字節(jié)攜帶了實(shí)際狀態(tài)的代碼。這個(gè)編碼可以在任何時(shí)刻由EZMacReg_Read ()函數(shù)讀出。MSR寄存器能隨著MAC狀態(tài)的改變實(shí)時(shí)刷新。更多細(xì)節(jié)參見MSR部分。
處理器負(fù)荷
正如前面提到的,EZMac的狀態(tài)機(jī)以兩個(gè)中斷程序的形式運(yùn)行。盡管它運(yùn)行在不同狀態(tài)會(huì)使處理器的產(chǎn)生不同的負(fù)荷,但是仍然有一些狀態(tài)完全不會(huì)構(gòu)成處理器的負(fù)荷。
評(píng)論