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