專利名稱:一種串口802.11n無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法
一種串口 802. 11η無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法技術(shù)領(lǐng)域
本發(fā)明屬于無(wú)線局域網(wǎng)領(lǐng)域,作為一種串口 802. Iln無(wú)線網(wǎng)卡芯片接收通路結(jié)構(gòu),特別適用于串口的802. Iln無(wú)線網(wǎng)卡芯片設(shè)計(jì)領(lǐng)域,尤其為USB、SDIO主機(jī)接口的 802. Iln無(wú)線網(wǎng)卡芯片設(shè)計(jì)。采用本發(fā)明提出的串口 802. Iln無(wú)線網(wǎng)卡芯片接收通路結(jié)構(gòu), 可以提高串口傳輸?shù)睦寐?,減少緩存使用的buf空間,提高整個(gè)芯片處理協(xié)議的吞吐率。
背景技術(shù):
802. Iln無(wú)線協(xié)議不同于以前的802. 11協(xié)議,提出了聚合的概念。為了提高無(wú)線信道的利用率,采用了聚合幀的格式,見(jiàn)說(shuō)明書(shū)附圖1。簡(jiǎn)單的說(shuō),就是把多個(gè)802. 11的單幀組合成一個(gè)長(zhǎng)幀,其規(guī)則就是在幀與幀之間插入delimiter。這樣,當(dāng)接收方收到這樣一個(gè)長(zhǎng)幀時(shí),可以通過(guò)搜索其中的delimiter,把各個(gè)子幀給解析出來(lái)。子幀之間的間隔最小為4個(gè)字節(jié),最大沒(méi)有限制。在802. 11協(xié)議中,一個(gè)子幀與下一個(gè)子幀之間的時(shí)間間隔最小為sifs(16us),而在802. Iln的聚合協(xié)議中,在150Mbps物理層速率下,最小只有IOOns 的時(shí)間??梢?jiàn),802. Iln協(xié)議的高效率對(duì)于內(nèi)部的硬件接收結(jié)構(gòu)提出了新的要求。
串口無(wú)線網(wǎng)卡,不同于PCI、PCIe設(shè)備,只能作為主機(jī)的從設(shè)備,其傳輸是被動(dòng)的。 當(dāng)主機(jī)需要獲取數(shù)據(jù)時(shí),從設(shè)備才會(huì)把數(shù)據(jù)送上去。串口另一個(gè)特點(diǎn)是采用block傳輸,每一次的傳輸數(shù)據(jù)量會(huì)限制在block內(nèi)。由此可以看出,充分利用block傳輸?shù)臄?shù)據(jù)量、減少 block次數(shù),才能提高串口的利用率。
為了能夠最大程度減少丟幀,需要足夠的緩沖空間。在接口速率一定的情況下,改善接口的傳輸利用率是減少緩沖空間的唯一方法。串口的每一次block傳輸,都能充分利用,這需要把各個(gè)獨(dú)立的單幀按照類似802. Iln協(xié)議中的聚合幀的方式給重新聚合起來(lái)。 制定的規(guī)則不是采用delimiter的方式,而是為了上層驅(qū)動(dòng)與軟件的方便,采用了私有的協(xié)議。
把幾個(gè)buf的子幀聚合成一個(gè)長(zhǎng)幀,通過(guò)串口傳送,等整個(gè)幀傳送完畢,才釋放這幾個(gè)buf。顯然會(huì)浪費(fèi)buf的空間利用率。采用邊上傳邊釋放的方式,當(dāng)其中一個(gè)子幀確認(rèn)傳輸成功后,會(huì)立即釋放掉此buf·。
串口的每一次傳輸都會(huì)伴隨著傳輸數(shù)據(jù)的校驗(yàn),只有校驗(yàn)通過(guò)的數(shù)據(jù)才能認(rèn)為此次block傳輸成功。因此,在長(zhǎng)幀的傳輸過(guò)程中,不可避免地出現(xiàn)多次重傳。重傳的結(jié)果是降低了串口的利用率,同時(shí)帶來(lái)了設(shè)計(jì)的復(fù)雜。需要一種機(jī)制,來(lái)保證buf在正確的時(shí)機(jī)釋放。發(fā)明內(nèi)容
本發(fā)明提出了一種串口 802. Iln無(wú)線網(wǎng)卡芯片接收通路結(jié)構(gòu)。芯片接收機(jī)從空中信道接收到聚合幀,由MAC協(xié)議處理單元完成聚合幀的解析,把一個(gè)聚合幀拆分成多個(gè)子幀,存放在不同的buf中。在聚合幀的解析過(guò)程中,會(huì)得到各個(gè)子幀的詳細(xì)信息,同時(shí)會(huì)保存在幀描述符中(BD),見(jiàn)附圖2,便于上層驅(qū)動(dòng)和軟件識(shí)別。當(dāng)上層主機(jī)通過(guò)串口詢問(wèn)接收buf的狀態(tài)時(shí),就可以把多個(gè)存有數(shù)據(jù)幀的buf組合成一個(gè)超長(zhǎng)的數(shù)據(jù)幀,把幀的整體長(zhǎng)度告訴主機(jī)。此后,主機(jī)就會(huì)按照此幀的長(zhǎng)度,下發(fā)多個(gè)block進(jìn)行數(shù)據(jù)讀取。這樣,每一次 block傳輸攜帶的數(shù)據(jù)量都是足夠的,充分利用了串口的傳輸效率。
當(dāng)一次block傳輸過(guò)程中,跨越多個(gè)buf時(shí),會(huì)根據(jù)前一個(gè)buf中幀的長(zhǎng)度,提前預(yù)測(cè)出下一個(gè)buf的地址,從而能夠在傳送過(guò)程中,不間斷數(shù)據(jù)的讀取,完成buf之間的無(wú)縫銜接。從串口看去,感覺(jué)在訪問(wèn)同一個(gè)buf,其地址訪問(wèn)采用虛擬地址的方式。串口的 block傳輸會(huì)進(jìn)行傳送數(shù)據(jù)的校驗(yàn),校驗(yàn)不成功會(huì)重新發(fā)起此次block的傳輸。傳輸?shù)刂芬蕴摂M地址的方式回退到block傳輸?shù)钠鹗嫉刂?。判斷block傳輸是否成功,是通過(guò)比較此次block的起始地址與上一次block的起始地址是否相同得到的。如果兩者相同,block 進(jìn)行重傳;反之,是一次新的block傳輸。
當(dāng)block傳輸跨越兩個(gè)buf的邊界時(shí),存在釋放buf的可能。根據(jù)上述block重傳的判斷規(guī)則,當(dāng)block重傳發(fā)生時(shí),不能釋放buf ;反之,可以釋放buf,用來(lái)接收新的幀。 通過(guò)邊上傳邊釋放的方式,提高了 buf的利用率。
上層驅(qū)動(dòng)與軟件處理數(shù)據(jù)幀,根據(jù)數(shù)據(jù)幀的接收順序來(lái)處理,是最合適的方法。當(dāng)內(nèi)部有η個(gè)實(shí)際buf時(shí),擴(kuò)展n-1個(gè)虛擬buf空間。Buf的寫入是按照實(shí)際buf空間管理的,buf的寫指針在循環(huán)運(yùn)轉(zhuǎn)。當(dāng)串口可以接收數(shù)據(jù)時(shí),內(nèi)部管理模塊把各個(gè)存有數(shù)據(jù)幀的 buf組合成一個(gè)虛擬的無(wú)間斷的buf。把各個(gè)buf存儲(chǔ)幀的幀長(zhǎng)相加,得到的長(zhǎng)幀的幀長(zhǎng)送往串口。此后,串口按照此長(zhǎng)度分為多個(gè)block進(jìn)行傳輸。在串口讀取數(shù)據(jù)的過(guò)程中,會(huì)用到虛擬的buf空間。從buf的寫指針開(kāi)始,依次訪問(wèn)最大η個(gè)buf,當(dāng)處于實(shí)際buf空間時(shí), 訪問(wèn)不做特殊處理;當(dāng)處于虛擬buf空間時(shí),訪問(wèn)第n+1個(gè)虛擬buf空間等同于訪問(wèn)第1個(gè)實(shí)際buf空間,以次類推。由此可知,從buf的寫指針看去,按照由先到后的順序,就可以保證上傳是按照先到先上傳的順序進(jìn)行的。通過(guò)擴(kuò)展虛擬空間,把循環(huán)buf指針變成依次遞增的單向指針,簡(jiǎn)化了 buf的讀取,利于硬件電路的實(shí)現(xiàn),見(jiàn)說(shuō)明書(shū)附圖1。
圖1是buf空間結(jié)構(gòu)圖2是A-MPDU結(jié)構(gòu)圖
圖3是buf中數(shù)據(jù)結(jié)構(gòu)圖
圖4是多個(gè)buf聚合成的長(zhǎng)幀結(jié)構(gòu)圖
圖5是數(shù)據(jù)幀順序上傳流程圖具體實(shí)施方式
在buf中存儲(chǔ)的數(shù)據(jù)有兩部分1)存儲(chǔ)的數(shù)據(jù)幀的buf描述符(BD) ;2)存儲(chǔ)的幀體數(shù)據(jù)(FrmData)。在BD中,存有此幀的標(biāo)識(shí)Bd_Id,用來(lái)區(qū)分此幀的類型;存有此幀的長(zhǎng)度FrmLen。Buf存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)見(jiàn)附圖3。
假設(shè)內(nèi)部有8個(gè)實(shí)際buf空間,詳細(xì)見(jiàn)附圖1。當(dāng)電路接收機(jī)啟動(dòng)空中信道數(shù)據(jù)幀的接收時(shí),會(huì)按照從buf 1到buf8的順序?qū)懭霐?shù)據(jù)幀,wr_ptr是當(dāng)前的寫指針。Bufl到 buf8構(gòu)成一個(gè)循環(huán)結(jié)構(gòu),wr_ptr的取值范圍是0到7。同時(shí),還會(huì)維護(hù)一個(gè)8bit的位圖 bitmap,用來(lái)指示那個(gè)buf中含有數(shù)據(jù)。當(dāng)串口詢問(wèn)是否有數(shù)據(jù)上傳時(shí),根據(jù)內(nèi)部buf的狀態(tài),給出要傳送的數(shù)據(jù)幀的大小。在此時(shí)刻,需要鎖存當(dāng)前的bitmap,記為bitmap_l,鎖存當(dāng)前的wr_ptr記為wr_ptr_l,通過(guò)這兩個(gè)變量??梢杂?jì)算出長(zhǎng)幀的大小。由于BD中的 FrmLen是以字節(jié)為單位的,需要進(jìn)行padding,補(bǔ)充到4的整數(shù)倍。根據(jù)bitmap_l指示那幾個(gè)buf中含有數(shù)據(jù),把對(duì)應(yīng)buf中的BD取出得到FrmLen,對(duì)齊到4的整數(shù)倍后累加得到總的幀長(zhǎng)FrmLeruSum。此長(zhǎng)度送給串口后,串口會(huì)按照此長(zhǎng)度分為多個(gè)block進(jìn)行數(shù)據(jù)的讀取。
Block傳輸過(guò)程中會(huì)進(jìn)行傳輸數(shù)據(jù)的校驗(yàn),校驗(yàn)成功后,說(shuō)明此次block傳輸成功。Block_start_addr記為當(dāng)前block傳輸?shù)钠鹗嫉刂?。Block_start_addr_pre記為前一次block傳輸?shù)钠鹗嫉刂?。在每次block傳輸之前,比較Block_start_addr與Block_ start_addr_pre,兩者相等,表示此次block重傳;反之,表示新的block傳輸。
當(dāng)block傳輸跨越兩個(gè)buf的邊界時(shí),存在釋放buf的可能。根據(jù)block是否重傳, 就能確認(rèn)是否能夠釋放前一個(gè)buf。當(dāng)blcok不是重傳時(shí),buf就可以釋放,給出release index。當(dāng)前bitmap中release_index位可以置為0,供新的接收幀寫入。
為了保證按照先到先上傳的順序把接收幀送往上位機(jī),需要用到虛擬buf空間。 虛擬buf空間擴(kuò)展7個(gè),加上8個(gè)實(shí)際buf空間總共15個(gè)。按照此虛擬buf空間,可以形成15bit的虛擬向量bitmap_vlt。Bitmap_vlt的對(duì)應(yīng)關(guān)系如下
完成上述向量的置換后,就可以按照此向量順序傳送buf里的數(shù)據(jù)幀。首先找到 bitmap_vlt向量中第一個(gè)為1的bit,解析出存儲(chǔ)此幀buf的index,上傳完畢,對(duì)bitmap_ vlt [index]清零;接下來(lái),按照同樣的方式進(jìn)行下一個(gè)buf的傳送,直到bitmap_vlt中所有的bit為0,也就是所有的buf里的數(shù)據(jù)都已上傳完畢。當(dāng)處于虛擬buf空間時(shí),按照上述規(guī)則,可以方便的切換到實(shí)際buf空間。具體流程見(jiàn)附圖5。通過(guò)這種虛擬擴(kuò)展的方式, 簡(jiǎn)化了電路結(jié)構(gòu),利于硬件進(jìn)行實(shí)現(xiàn)。
權(quán)利要求
1.一種串口 802. Iln無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法,其特征在于包括以下步驟(1)芯片接收機(jī)從空中信道接收到聚合幀,由MAC協(xié)議處理單元完成聚合幀的解析,把一個(gè)聚合幀拆分成多個(gè)子幀,存放在不同的buf中;(2)上層主機(jī)通過(guò)串口詢問(wèn)buf的狀態(tài),把多個(gè)存有子幀的buf組合成一個(gè)數(shù)據(jù)幀,主機(jī)按照此數(shù)據(jù)幀的長(zhǎng)度,下發(fā)多個(gè)block進(jìn)行數(shù)據(jù)讀?。?3)在block傳輸過(guò)程中跨越多個(gè)buf時(shí),根據(jù)前一個(gè)buf中子幀的長(zhǎng)度,提前預(yù)測(cè)出下一個(gè)buf的地址,使得在傳送過(guò)程中不間斷讀取數(shù)據(jù);(4)當(dāng)block傳輸跨越兩個(gè)buf的邊界時(shí),如果不發(fā)生block重新傳輸,釋放buf,用來(lái)接收新的數(shù)據(jù)幀;如果發(fā)生block重新傳輸,不釋放buf ;(5)在串口讀取數(shù)據(jù)的過(guò)程中,用到虛擬的buf,當(dāng)有η個(gè)實(shí)際buf時(shí),擴(kuò)展n-1個(gè)虛擬 buf, buf的寫指針循環(huán)運(yùn)轉(zhuǎn),從buf的寫指針開(kāi)始,依次訪問(wèn)最大η個(gè)buf,η彡1。
2.如權(quán)利要求1所述的一種串口802. Iln無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法,其特征在于, 當(dāng)串口接收數(shù)據(jù)時(shí),進(jìn)行傳送數(shù)據(jù)的校驗(yàn),校驗(yàn)不成功發(fā)起此次block的重新傳輸;傳輸?shù)刂芬蕴摂M地址的方式回退到block傳輸?shù)钠鹗嫉刂贰?br>
3.如權(quán)利要求1或2所述的一種串口802. Iln無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法,其特征在于,通過(guò)比較此次傳輸?shù)腷lock的起始地址與上一次傳輸?shù)腷lock的起始地址是否相同, 判斷block是否需要進(jìn)行重新傳輸;如果兩者相同,block進(jìn)行重新傳輸;如果兩者不相同, 進(jìn)行新的block傳輸。
4.如權(quán)利要求1所述的一種串口802. Iln無(wú)線網(wǎng)卡芯片接收數(shù)據(jù)的方法,其特征在于, 當(dāng)串口訪問(wèn)虛擬buf時(shí),訪問(wèn)第n+1個(gè)虛擬buf等同于訪問(wèn)第1個(gè)實(shí)際buf,訪問(wèn)第n+2個(gè)虛擬buf等同于訪問(wèn)第2個(gè)實(shí)際buf,以次類推。
全文摘要
本發(fā)明提出了一種串口802.11n無(wú)線網(wǎng)卡接收通路結(jié)構(gòu),內(nèi)容包括把各個(gè)分散的長(zhǎng)度不定的數(shù)據(jù)結(jié)構(gòu)按照一定的規(guī)則組成一個(gè)長(zhǎng)幀;采用一個(gè)巧妙的結(jié)構(gòu),保證了上傳幀的順序,實(shí)現(xiàn)了先到先上傳;當(dāng)其中的某一塊傳輸出錯(cuò)時(shí),采用一種機(jī)制,可以回退訪問(wèn),快速重傳;當(dāng)其中一個(gè)數(shù)據(jù)結(jié)構(gòu)傳輸成功后,可以單獨(dú)釋放這塊空間,空間做到邊上傳邊釋放;當(dāng)跨越buf的邊界時(shí),可以做到無(wú)縫訪問(wèn)。這種結(jié)構(gòu)實(shí)現(xiàn)簡(jiǎn)單,空間的利用率高,串口傳輸效率高,同時(shí)面積很小,有利于電路實(shí)現(xiàn)。通過(guò)此電路結(jié)構(gòu)實(shí)現(xiàn)802.11n無(wú)線網(wǎng)卡的接收,可以實(shí)現(xiàn)高性能、低成本的方案。
文檔編號(hào)H04W28/14GK102547864SQ20101062230
公開(kāi)日2012年7月4日 申請(qǐng)日期2010年12月27日 優(yōu)先權(quán)日2010年12月27日
發(fā)明者張樹(shù)華 申請(qǐng)人:北京中電華大電子設(shè)計(jì)有限責(zé)任公司