專利名稱:串行外設(shè)接口設(shè)備接收快速外圍組件互連總線數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及快速外圍組件互連(PCI Express)總線數(shù)據(jù)傳輸?shù)姆椒ǎ绕渖婕耙环N串行外設(shè)接口設(shè)備接收PCI Express總線數(shù)據(jù)的方法。
背景技術(shù):
快速外圍組件互連(PCI Express)技術(shù)是在外圍組件互連(PCI,Peripheral Component Interconnect)技術(shù)的基礎(chǔ)上提出并發(fā)展起來的。PCIExpress總線技術(shù)具有諸多優(yōu)點(diǎn),比如傳輸速度快,靈活擴(kuò)展性,低電源消耗,支持同步數(shù)據(jù)傳輸,具有數(shù)據(jù)包和層協(xié)議架構(gòu),每個(gè)物理鏈接含有多點(diǎn)虛擬通道,可保持端對(duì)端數(shù)據(jù)傳輸?shù)耐暾?,具有錯(cuò)誤報(bào)告和處理功能,節(jié)約空間,在軟件層保持與PCI兼容。由于PCI Express總線技術(shù)具有上述諸多優(yōu)點(diǎn),所以迅速得到業(yè)界的承認(rèn),并且被大家公認(rèn)為下一代總線標(biāo)準(zhǔn)。
PCI Express總線技術(shù)的最大特點(diǎn)是采用點(diǎn)對(duì)點(diǎn)的串行連接方式,允許各個(gè)設(shè)備之間建立獨(dú)立的數(shù)據(jù)傳輸通道。不用再向整個(gè)系統(tǒng)請求帶寬,這樣也就輕松的到達(dá)了其他接口設(shè)備可望而不可及的高帶寬。
串行外設(shè)接口(SPI,Serial Peripheral Interface)是近年來新發(fā)展的一種高速同步串行通訊接口,該接口通過一根時(shí)鐘信號(hào)線、和兩根數(shù)據(jù)線即可完成數(shù)據(jù)的傳輸。通過SPI可以使微處理機(jī)控制器(MCU,MicroprocessorControl Unit)與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。目前,SPI接口已經(jīng)被廣泛的集成在多種嵌入式處理器中。
在很多系統(tǒng)設(shè)計(jì)中,需要通過PCI Express總線接口發(fā)送符合PCI Express總線協(xié)議的數(shù)據(jù)到一個(gè)串行外設(shè)接口設(shè)備,比如第4級(jí)串行外設(shè)接口(SPI-4)。在串行外設(shè)接口設(shè)備接收到PCI Express總線數(shù)據(jù)包后,對(duì)每個(gè)數(shù)據(jù)包都需要進(jìn)行解析,然后再復(fù)制到預(yù)先設(shè)置的內(nèi)存區(qū)域以備使用。當(dāng)串行外設(shè)接口設(shè)備接收到大批量PCI Express總線數(shù)據(jù)時(shí),將導(dǎo)致串行外設(shè)接口設(shè)備性能下降,甚至丟失數(shù)據(jù)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明解決的技術(shù)問題是提供一種串行外設(shè)接口設(shè)備接收PCI Express總線數(shù)據(jù)的方法,可以使串行外設(shè)接口設(shè)備大批量接收PCIExpress總線數(shù)據(jù)。
本發(fā)明包括串行外設(shè)接口設(shè)備設(shè)置多個(gè)緩沖器Buffer;當(dāng)需要接收快速外圍組件互連PCI Express總線數(shù)據(jù)時(shí),串行外設(shè)接口設(shè)備通過其中一個(gè)Buffr接收數(shù)據(jù),并監(jiān)測Buffr的存儲(chǔ)狀態(tài);當(dāng)該Buffr存滿數(shù)據(jù)時(shí),將當(dāng)前接收數(shù)據(jù)的Buffr切換到?jīng)]有數(shù)據(jù)的Buffer,在新的當(dāng)前Buffer繼續(xù)接收數(shù)據(jù)。
其中,串行外設(shè)接口設(shè)備通過Buffer狀態(tài)寄存器判斷Buffr中是否存滿數(shù)據(jù),當(dāng)Buffr狀態(tài)寄存器為第一預(yù)設(shè)值時(shí),表示Buffer已經(jīng)存滿數(shù)據(jù);當(dāng)Buffr狀態(tài)寄存器為第二預(yù)設(shè)值時(shí),表示Buffr中沒有數(shù)據(jù)。
其中,串行外設(shè)接口設(shè)備通過Buffr切換寄存器將當(dāng)前接收數(shù)據(jù)的Buffer切換到?jīng)]有數(shù)據(jù)的Buffer。
其中,進(jìn)一步包括當(dāng)Buffr存滿數(shù)據(jù)后,串行外設(shè)接口設(shè)備處理該Buffr中的數(shù)據(jù),在處理完該Buffer的數(shù)據(jù)后,將該Buffer的狀態(tài)寄存器設(shè)置為第二預(yù)設(shè)值。
其中,所述PCI Express總線數(shù)據(jù)為PCI Express總線數(shù)據(jù)包。
其中,所述PCI Express總線數(shù)據(jù)為符合預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息。
其中,進(jìn)一步包括串行外設(shè)接口設(shè)備判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)置條件,并為符合條件的數(shù)據(jù)設(shè)置指針;修改所述指針,將所述指針指向所述數(shù)據(jù)中的有效數(shù)據(jù),通過鏈表聯(lián)結(jié)修改后的指針;串行外設(shè)接口設(shè)備通過鏈表讀取所述有效數(shù)據(jù)。
其中,當(dāng)所述PCI Express總線數(shù)據(jù)是PCI Express總線數(shù)據(jù)包時(shí),如果接收的數(shù)據(jù)包中的地址處于其預(yù)設(shè)置的地址范圍之內(nèi)則該數(shù)據(jù)包符合預(yù)設(shè)置條件;否則,該數(shù)據(jù)包不符合預(yù)設(shè)置條件。
其中,串行外設(shè)接口設(shè)備按照下述步驟為數(shù)據(jù)包設(shè)置指針串行外設(shè)接口設(shè)備將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度與該數(shù)據(jù)包頭信息長度之和。
其中,串行外設(shè)接口設(shè)備修改所述指針的方法為將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址與該數(shù)據(jù)包頭信息長度之和,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度。
其中,當(dāng)所述PCI Express總線數(shù)據(jù)為符合預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息時(shí),如果所述地址信息是外設(shè)接口設(shè)備預(yù)設(shè)置的地址,則所述數(shù)據(jù)包符合預(yù)設(shè)置條件;否則,所述數(shù)據(jù)包不符合預(yù)設(shè)置條件。
其中,串行外設(shè)接口設(shè)備按照下述步驟為數(shù)據(jù)包設(shè)置指針串行外設(shè)接口設(shè)備將數(shù)據(jù)包保存到其申請的存儲(chǔ)空間,將指針的地址表項(xiàng)設(shè)置為所述存儲(chǔ)空間的首地址信息,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包中有效數(shù)據(jù)的長度與數(shù)據(jù)包頭信息長度之和。
其中,串行外設(shè)接口設(shè)備修改所述指針的方法為將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址與該數(shù)據(jù)包頭信息長度之和,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度。
其中,可編程器件將其接收到的PCI Express總線數(shù)據(jù)包轉(zhuǎn)換為預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息,并將所述數(shù)據(jù)包和地址信息發(fā)送給串行外設(shè)接口設(shè)備。
其中,可編程器件按照下述步驟將PCI Express總線數(shù)據(jù)包轉(zhuǎn)換為預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息可編程器件解析PCI Express總線數(shù)據(jù)包,獲得其中的有效數(shù)據(jù)和地址信息,將有效數(shù)據(jù)重新封裝進(jìn)符合預(yù)設(shè)置格式的數(shù)據(jù)包,根據(jù)地址信息得到與所述符合預(yù)設(shè)置格式的數(shù)據(jù)包相應(yīng)的新的地址信息。
在本發(fā)明中,串行外設(shè)接口設(shè)備設(shè)置多個(gè)緩沖器,為各Buffr分別設(shè)置狀態(tài)寄存器,并設(shè)置Buffr切換寄存器;當(dāng)需要接收快速外圍組件互連PCIExpress總線數(shù)據(jù)時(shí),串行外設(shè)接口設(shè)備通過其中一個(gè)Buffr接收數(shù)據(jù),并檢測該Buffr的狀態(tài)寄存器;當(dāng)該Buffer的狀態(tài)寄存器指示該Buffer已經(jīng)存滿數(shù)據(jù)時(shí),通過Buffr切換寄存器將當(dāng)前接收數(shù)據(jù)的Buffr切換到其它Buffr,在新的當(dāng)前Buffr繼續(xù)接收數(shù)據(jù)??梢钥闯?,通過多個(gè)Buffr切換接收數(shù)據(jù),可以提高存儲(chǔ)空間的利用率,從而可以使串行外設(shè)接口設(shè)備大批量接收PCIExpress總線數(shù)據(jù)。本發(fā)明同時(shí)還為接收到的PCI Express總線數(shù)據(jù)設(shè)置指針,使指針直接指向有效數(shù)據(jù),并通過鏈表聯(lián)結(jié)指針。進(jìn)而可以使串行外設(shè)接口設(shè)備通過對(duì)鏈表的操作,直接得到PCI Express總線數(shù)據(jù)中的有效數(shù)據(jù)。
圖1a是通過切換緩沖器接收PCI Express總線數(shù)據(jù)的流程圖;圖1b是實(shí)施例1的流程圖;圖2是存儲(chǔ)空間的指針結(jié)構(gòu)示意圖;圖3是實(shí)施例1中鏈表的示意圖;圖4是實(shí)施例1中鏈表被修改后的示意圖;圖5是本發(fā)明實(shí)施例2的流程圖;圖6是實(shí)施例2中可編程器件發(fā)送數(shù)據(jù)的示意圖;圖7是實(shí)施例2中SPI-4接口設(shè)備處理數(shù)據(jù)的流程圖。
具體實(shí)施例方式
在本發(fā)明中,串行外設(shè)接口設(shè)備通過多個(gè)Buffr切換接收PCI Express總線數(shù)據(jù),結(jié)合圖1a,其具體過程包括步驟101串行外設(shè)接口設(shè)備設(shè)置多個(gè)緩沖器,為各Buffr分別設(shè)置狀態(tài)寄存器,并設(shè)置Buffer切換寄存器。
其中,當(dāng)Buffr的狀態(tài)寄存器中的值為“1”時(shí),表示Buffr中已經(jīng)存滿數(shù)據(jù);當(dāng)Buffr的狀態(tài)寄存器中的值為“0”時(shí),表示Buffr中沒有數(shù)據(jù)。
步驟102當(dāng)需要接收快速外圍組件互連PCI Express總線數(shù)據(jù)時(shí),串行外設(shè)接口設(shè)備通過其中一個(gè)Buffer接收數(shù)據(jù)。
步驟103檢測該Buffr的狀態(tài)寄存器是否為滿,即該Buffr的狀態(tài)寄存器的值是否為“1”,如果是,則執(zhí)行步驟104;否則,執(zhí)行步驟105。
步驟104通過Buffr切換寄存器將當(dāng)前接收數(shù)據(jù)的Buffr切換到?jīng)]有數(shù)據(jù)的Buffer,在新的當(dāng)前Buffer繼續(xù)接收數(shù)據(jù)。
步驟105當(dāng)前接收數(shù)據(jù)的Buffer繼續(xù)接收數(shù)據(jù),并繼續(xù)檢測該Buffer的狀態(tài)寄存器。
在接收新的數(shù)據(jù)的同時(shí),可以對(duì)已經(jīng)接收滿數(shù)據(jù)的Buffr中的數(shù)據(jù)進(jìn)行處理,處理完數(shù)據(jù)后及時(shí)將空間釋放,并將狀態(tài)寄存器的值設(shè)置為“0”,等待下一次的數(shù)據(jù)接收,從而有利于Buffer的循環(huán)利用,節(jié)省緩存空間。
下面,以SPI-4接口設(shè)備為例,結(jié)合實(shí)施例1對(duì)該方法做進(jìn)一步具體說明。
參見圖1b,一種串行外設(shè)接口設(shè)備接收快速外圍組件互連總線數(shù)據(jù)的方法,包括步驟11PCI Express總線接口設(shè)備準(zhǔn)備向SPI-4接口設(shè)備發(fā)送數(shù)據(jù),并將該數(shù)據(jù)的大小,所要存放的內(nèi)存的目的地址等相關(guān)信息一起發(fā)送,其具體過程包括PCI Express總線接口設(shè)備準(zhǔn)備向SPI-4接口設(shè)備發(fā)送數(shù)據(jù),該數(shù)據(jù)的大小,1K比特?cái)?shù)據(jù),該數(shù)據(jù)存放在SPI-4接口設(shè)備的存儲(chǔ)空間為0000~03FF。
步驟12PCI Express總線接口設(shè)備將相應(yīng)的數(shù)據(jù)封裝進(jìn)多個(gè)符合PCI Express總線協(xié)議的數(shù)據(jù)包,將相應(yīng)的地址信息、數(shù)據(jù)大小以及其它相關(guān)信息封裝進(jìn)數(shù)據(jù)包的頭信息中,然后將所述數(shù)據(jù)包都發(fā)送到SPI-4接口設(shè)備,其具體過程包括首先,PCI Express總線接口設(shè)備將要存放在SPI-4接口設(shè)備的0000~03FF地址空間的1K比特?cái)?shù)據(jù)封裝進(jìn)3個(gè)數(shù)據(jù)包將256字節(jié)封裝進(jìn)數(shù)據(jù)包1,相應(yīng)的地址信息為0000~00FF;將512字節(jié)封裝進(jìn)數(shù)據(jù)包2,相應(yīng)的地址信息為0100~02FF;將256字節(jié)封裝進(jìn)數(shù)據(jù)包3,相應(yīng)的地址信息為0300~03FF。
然后,分別為數(shù)據(jù)包1、數(shù)據(jù)包2和數(shù)據(jù)包3封裝頭信息,頭信息中包括相應(yīng)數(shù)據(jù)的地址信息的首地址,即0000、0100和0300,數(shù)據(jù)包中有效數(shù)據(jù)大小,即256字節(jié)、512字節(jié)和256字節(jié),以及其他相關(guān)信息。
最后,將數(shù)據(jù)包1、數(shù)據(jù)包2和數(shù)據(jù)包3發(fā)送到SPI-4接口設(shè)備。
步驟13SPI-4接口設(shè)備通過多個(gè)緩沖器(Buffr)接收數(shù)據(jù),其過程包括SPI-4接口設(shè)備預(yù)先設(shè)置多個(gè)Buffr,為Buffr0、Buffr1和Buffr2,并為各Buffer分別設(shè)置狀態(tài)寄存器和Buffr切換寄存器。通過Buffr的狀態(tài)寄存器的值,可以獲知Buffr中是否已經(jīng)存滿數(shù)據(jù),如果當(dāng)前接收數(shù)據(jù)的Buffr中已經(jīng)存滿數(shù)據(jù),則通過Buffer切換寄存器對(duì)將當(dāng)前Buffer切換到?jīng)]有數(shù)據(jù)的Buffer,在新的當(dāng)前Buffer繼續(xù)接收數(shù)據(jù)。
例如當(dāng)數(shù)據(jù)到來時(shí),SPI4接口設(shè)備首先通過Buffr0接收數(shù)據(jù),同時(shí)監(jiān)測當(dāng)前接收數(shù)據(jù)的Buffer0的狀態(tài)寄存器,以獲得Buffer0的狀態(tài)。
當(dāng)前接收數(shù)據(jù)的Buffr0存滿數(shù)據(jù)后,SPI4接口設(shè)備將通過Buffr切換寄存器將接收數(shù)據(jù)的Buffr切換到Buffr1,由Buffr1繼續(xù)接收數(shù)據(jù)。
當(dāng)Buffer1存滿數(shù)據(jù)后SPI4接口設(shè)備將通過Buffer切換寄存器將接收數(shù)據(jù)的Buffer切換到Buffer2,由Buffer2繼續(xù)接收數(shù)據(jù)。
在Buffr1或Buffr2接收數(shù)據(jù)時(shí),SPI-4接口設(shè)備將對(duì)已經(jīng)接收到的數(shù)據(jù)進(jìn)行處理。當(dāng)Buffr2存滿數(shù)據(jù)后,SPI-4接口設(shè)備也已經(jīng)對(duì)Buffr0中的數(shù)據(jù)處理完畢,SPI4接口設(shè)備將通過Buffr切換寄存器將接收數(shù)據(jù)的Buffr切換到Buffer0,由Buffer0繼續(xù)接收數(shù)據(jù)。
通過上述過程,實(shí)現(xiàn)了Buffer的循環(huán)利用,提高了資源使用效率。
其中,監(jiān)測當(dāng)前接收數(shù)據(jù)的Buffr的狀態(tài)寄存器可以通過硬件(或軟件、或軟硬件結(jié)合)進(jìn)行,其方法為查詢方法,即周期性查詢Buffr的狀態(tài)寄存器,以獲知該Buffr是否已經(jīng)存滿數(shù)據(jù);或?yàn)橹袛喾椒?,即?dāng)Buffr已經(jīng)存滿數(shù)據(jù)時(shí),Buffer狀態(tài)寄存器發(fā)信息給設(shè)備,以使設(shè)備獲知該Buffer中已經(jīng)存滿數(shù)據(jù)。
其中,Buffr的數(shù)量和大小,都可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,這里不再重復(fù)舉例說明。
步驟14將接收到的數(shù)據(jù)存儲(chǔ)到其內(nèi)部的存儲(chǔ)空間,并將各存儲(chǔ)空間通過鏈表聯(lián)結(jié),其具體過程包括SPI-4接口設(shè)備通過解析接收到的數(shù)據(jù)包的頭信息中的數(shù)據(jù)大小信息,獲知該數(shù)據(jù)包中有效數(shù)據(jù)的大小。SPI-4接口設(shè)備通過解析數(shù)據(jù)包頭信息中的首地址信息獲知該數(shù)據(jù)包是否為待接收的數(shù)據(jù)包,如果是,則將該數(shù)據(jù)包存放在預(yù)先設(shè)置的存儲(chǔ)空間中;否則,丟棄該數(shù)據(jù)包,其具體過程包括SPI-4接口設(shè)備接收到數(shù)據(jù)包1后,解析其頭信息可以獲知該數(shù)據(jù)包有效數(shù)據(jù)的大小為256字節(jié),并獲知所述有效數(shù)據(jù)待存放的首地址信息0000。如果所述有效數(shù)據(jù)待存放的地址空間位于SPI-4接口設(shè)備預(yù)留的地址空間0000~03FF,則SPI-4接口設(shè)備將數(shù)據(jù)包1存放在地址空間0000~00FF中;否則,丟棄該數(shù)據(jù)包。并設(shè)置數(shù)據(jù)包1的指針,為指針0,指針0的地址表項(xiàng)為存儲(chǔ)數(shù)據(jù)包1的首地址,0000;該指針的大小表項(xiàng)為數(shù)據(jù)包1中有效數(shù)據(jù)的大小,256字節(jié)。
同理,將SPI-4接口設(shè)備將數(shù)據(jù)包2存放在地址空間0100~02FF中,將數(shù)據(jù)包3存放在地址空間0300~03FF中,并分別設(shè)置數(shù)據(jù)包2和數(shù)據(jù)包3的指針,為指針1和指針2。其中,所述各指針的結(jié)構(gòu)如圖2所示。
通過鏈表將3個(gè)指針聯(lián)結(jié)起來,從而將3個(gè)數(shù)據(jù)包聯(lián)結(jié)起來,所述鏈表如圖3所示。
步驟15SPI-4接口設(shè)備對(duì)所述鏈表進(jìn)行處理,生成新的鏈表,其具體過程包括結(jié)合圖2和圖3,將該鏈表中指針0的地址表項(xiàng)更改為首地址+數(shù)據(jù)包1的頭信息長度,即0000+頭信息長度。
同理,將指針1的地址表項(xiàng)更改為0100+頭信息長度,將指針2的地址表項(xiàng)更改為0300+頭信息長度,新鏈表的示意圖如圖4所示。
當(dāng)SPI-4接口設(shè)備需要處理數(shù)據(jù)時(shí),可以通過該鏈表,直接讀取相應(yīng)的有效數(shù)據(jù)。
在實(shí)施例1中,PCI Express數(shù)據(jù)包被直接發(fā)送到串行外設(shè)接口設(shè)備,即SPI-4接口設(shè)備。在實(shí)際情況中,也可以通過在PCI Express接口設(shè)備和串行外設(shè)接口設(shè)備的數(shù)據(jù)鏈路之間串接可編程器件,使可編程器件預(yù)先對(duì)PCIExpress數(shù)據(jù)包進(jìn)行解析并獲得其中的有效數(shù)據(jù)。然后可編程器件再將所述有效數(shù)據(jù)按預(yù)先設(shè)置的格式發(fā)送給串行外設(shè)接口設(shè)備,從而使串行外設(shè)接口設(shè)備可以獲得預(yù)設(shè)置格式的數(shù)據(jù)包。
下面,以SPI-4接口設(shè)備為例,結(jié)合實(shí)施例2對(duì)該方法做進(jìn)一步具體說明。
參見圖5,一種串行外設(shè)接口設(shè)備接收快速外圍組件互連總線數(shù)據(jù)的方法,包括步驟51在PCI Express接口設(shè)備和SPI-4接口設(shè)備的數(shù)據(jù)鏈路之間串接現(xiàn)場可編程門陣列(FPGA,F(xiàn)ield Programmable Gate-Array),設(shè)置FPGA向SPI-4接口設(shè)備傳輸數(shù)據(jù)的方式。
步驟52當(dāng)SPI-4接口設(shè)備需要從PCI Express總線接口設(shè)備獲得數(shù)據(jù)時(shí),將向PCI Express總線接口設(shè)備發(fā)送數(shù)據(jù)請求消息,該消息中包括請求發(fā)送數(shù)據(jù)的大小和FPGA為存放該數(shù)據(jù)而預(yù)留的地址空間信息,其具體過程為SPI-4接口設(shè)備向PCI Express總線接口設(shè)備發(fā)送數(shù)據(jù)請求消息,該消息中包括請求發(fā)送數(shù)據(jù)的大小,1K比特?cái)?shù)據(jù),和FPGA為存放該數(shù)據(jù)而預(yù)留的地址空間信息,0000~03FF。
此時(shí),由于SPI-4接口設(shè)備在向PCI Express總線接口設(shè)備請求數(shù)據(jù)時(shí),已經(jīng)知道該1K比特的數(shù)據(jù)將被存放在FPGA的0000~03FF地址空間,而且SPI-4接口設(shè)備知道FPGA以256比特?cái)?shù)據(jù)塊的形式向其傳輸數(shù)據(jù),所以SPI-4接口設(shè)備可以獲知該1K比特?cái)?shù)據(jù)將被FPGA劃分為4個(gè)256比特的數(shù)據(jù)塊,并且能夠知道4個(gè)數(shù)據(jù)塊的首地址為A1=0000、A2=0100、A3=0200、A4=0300。
步驟53PCI Express總線接口設(shè)備將相應(yīng)的數(shù)據(jù)封裝進(jìn)多個(gè)符合PCI Express總線協(xié)議的數(shù)據(jù)包,將相應(yīng)的地址信息、數(shù)據(jù)大小以及其它相關(guān)信息封裝進(jìn)數(shù)據(jù)包的頭信息中,然后將所述數(shù)據(jù)包都發(fā)送到FPGA,其具體過程和實(shí)施例1中步驟12所述的具體過程相同,這里不再重復(fù)說明。
步驟54FPGA接收到來自PCI Express總線接口設(shè)備的數(shù)據(jù)包后,對(duì)數(shù)據(jù)包頭信息進(jìn)行解析,獲知該數(shù)據(jù)包的大小,和該數(shù)據(jù)包中有效數(shù)據(jù)的存放地址空間,并將數(shù)據(jù)包存放在相應(yīng)的地址空間,其過程具體為FPGA接收到數(shù)據(jù)包1后,解析其頭信息,獲知該數(shù)據(jù)包中有效數(shù)據(jù)的長度和該數(shù)據(jù)存放的首地址,將256字節(jié)的有效數(shù)據(jù)存放在0000~00FF的地址空間;以此類推,F(xiàn)PGA接收到數(shù)據(jù)包2和數(shù)據(jù)包3后,解析所述兩個(gè)數(shù)據(jù)包的頭信息,然后,將數(shù)據(jù)包2的512字節(jié)的有效數(shù)據(jù)存放在0100~02FF的地址空間,將數(shù)據(jù)包3的256字節(jié)的有效數(shù)據(jù)存放在0300~03FF的地址空間。
步驟55FPGA將存放在地址空間0000~03FF的1K比特?cái)?shù)據(jù)劃分為多個(gè)等長度的數(shù)據(jù)塊,并獲得存放各數(shù)據(jù)塊的相應(yīng)首地址信息,其具體過程包括FPGA將存放在地址空間0000~03FF的1K比特?cái)?shù)據(jù)劃分為4個(gè)256字節(jié)的數(shù)據(jù)塊數(shù)據(jù)塊M1,其相應(yīng)的地址信息為0000~00FF,首地址A1為0000;數(shù)據(jù)塊M2,其相應(yīng)的地址信息為0100~01FF,首地址A2為0100;數(shù)據(jù)塊M3,其相應(yīng)的地址信息為0200~02FF,首地址A3為0200;數(shù)據(jù)塊M4,其相應(yīng)的地址信息為0300~03FF,首地址A4為0300。
步驟56將各數(shù)據(jù)塊分別封裝成數(shù)據(jù)包,在每個(gè)數(shù)據(jù)包的頭信息中標(biāo)記該數(shù)據(jù)包的序列信息,將所述各數(shù)據(jù)包發(fā)送到SPI-4接口設(shè)備,其過程具體為將數(shù)據(jù)塊M1、M2、M3、M4分別封裝成4個(gè)數(shù)據(jù)包,為數(shù)據(jù)包D1、數(shù)據(jù)包D2、數(shù)據(jù)包D3和數(shù)據(jù)包D4,并將各數(shù)據(jù)包的序列信息封裝在相應(yīng)各數(shù)據(jù)包的頭信息中。在本實(shí)施例中,設(shè)置數(shù)據(jù)包頭信息長度為44比特,那么每個(gè)數(shù)據(jù)包的長度都是300比特,其中頭信息44比特,有效數(shù)據(jù)256比特。
將數(shù)據(jù)包D1、數(shù)據(jù)包D2、數(shù)據(jù)包D3和數(shù)據(jù)包D4以及各數(shù)據(jù)包相應(yīng)的首地址A1、A2、A3、A4按預(yù)設(shè)定方式傳輸?shù)絊PI-4接口設(shè)備,其具體傳輸方式如圖6所示。
其中,pse-D為一個(gè)預(yù)設(shè)定格式的數(shù)據(jù),系統(tǒng)不對(duì)其進(jìn)行存儲(chǔ),并可以在接收pse-D時(shí)進(jìn)行其它操作;pse-A為一個(gè)預(yù)設(shè)定格式的數(shù)據(jù),通過它可以判斷其后的數(shù)據(jù)塊是本次傳輸?shù)淖詈笠粋€(gè)數(shù)據(jù)塊。
步驟57SPI-4接口設(shè)備通過多個(gè)Buffr接收數(shù)據(jù),其具體過程和實(shí)施例1中步驟13所述的具體過程相同,這里不再重復(fù)說明。
步驟58SPI-4接口設(shè)備處理接收到的數(shù)據(jù),其具體過程包括SPI-4接口設(shè)備通過解析數(shù)據(jù)包頭信息中的首地址信息獲知該數(shù)據(jù)包是否為待接收的數(shù)據(jù)包,如果是,則申請存儲(chǔ)空間并將該數(shù)據(jù)包存放在該存儲(chǔ)空間中,設(shè)置指針指向該數(shù)據(jù)包,通過鏈表將各數(shù)據(jù)包聯(lián)結(jié)起來;否則,丟棄該數(shù)據(jù)包,參見圖7,其具體過程包括701,SPI-4接口設(shè)備對(duì)接收到的數(shù)據(jù)進(jìn)行解析,判斷該數(shù)據(jù)是否為預(yù)設(shè)的FPGA存放數(shù)據(jù)的地址空間的首地址A1,即0000,如果是,則從702向后執(zhí)行;否則,從703向后執(zhí)行。
702,將所述數(shù)據(jù)的下一個(gè)數(shù)據(jù),即pse-D,設(shè)置為無效數(shù)據(jù),并利用pse-D的傳輸時(shí)間申請存儲(chǔ)空間M1,并設(shè)置指針1,將指針1的地址表項(xiàng)設(shè)置為存儲(chǔ)空間M1的首地址,將指針1的大小表項(xiàng)設(shè)置為256比特。
703,判斷接收的數(shù)據(jù)是否為A2,即0100,如果是,則從704向后執(zhí)行;否則,從705向后執(zhí)行。
704,將數(shù)據(jù)包D1存放在存儲(chǔ)空間M1,同時(shí)申請存儲(chǔ)空間M2,設(shè)置指針2,將指針2的地址表項(xiàng)設(shè)置為存儲(chǔ)空間M2的首地址,將指針的大小表項(xiàng)設(shè)置為256比特。
705,判斷接收的數(shù)據(jù)是否為A3,即0200,如果是,則從706向后執(zhí)行;否則,從707向后執(zhí)行。
706,將數(shù)據(jù)包D2存放在存儲(chǔ)空間M2,同時(shí)申請存儲(chǔ)空間M3,設(shè)置指針3,將指針3的地址表項(xiàng)設(shè)置為存儲(chǔ)空間M3的首地址,將指針3的大小表項(xiàng)設(shè)置為256比特。
707,判斷接收的數(shù)據(jù)是否為A4,即0300,如果是,則從708向后執(zhí)行;否則,從709向后執(zhí)行。
708,將數(shù)據(jù)包D3存放在存儲(chǔ)空間M3,同時(shí)申請存儲(chǔ)空間M4,設(shè)置指針4,將指針4的地址表項(xiàng)設(shè)置為存儲(chǔ)空間M4的首地址,將指針4的大小表項(xiàng)設(shè)置為256比特。
709,接收的數(shù)據(jù)是否為pse-A,如果是,則執(zhí)行710;否則,執(zhí)行711。
710,將數(shù)據(jù)包D4存放在存儲(chǔ)空間M4,結(jié)束本次數(shù)據(jù)傳輸。將指針1、指針2、指針3和指針4的地址表項(xiàng)中的首地址都增加44比特,即各數(shù)據(jù)包頭信息的長度,通過鏈表將4個(gè)指針聯(lián)結(jié)起來。當(dāng)SPI-4接口設(shè)備需要處理數(shù)據(jù)時(shí),可以通過該鏈表,直接讀取相應(yīng)的有效數(shù)據(jù)。
711,本次數(shù)據(jù)傳輸出錯(cuò)或?yàn)闊o效的數(shù)據(jù)傳輸,放棄本次數(shù)據(jù)傳輸。
在實(shí)施例2中,在PCI Express接口設(shè)備和高速串行接口設(shè)備的數(shù)據(jù)鏈路之間設(shè)置的可編程器件是FPGA,實(shí)際情況中也可以是復(fù)雜可編程邏輯器件(CPLD,Complex Programmable Logic Device),還可以是其它微處理器,這里就不再重復(fù)舉例說明了。
在實(shí)施例1和實(shí)施例2中,雖然都是以SPI-4接口設(shè)備為例,但是本發(fā)明的方法同樣能夠應(yīng)用于其它不具備數(shù)據(jù)解析功能的高速串行接口設(shè)備,這里不再重復(fù)舉例說明了。
權(quán)利要求
1.一種串行外設(shè)接口設(shè)備接收快速外圍組件互連總線數(shù)據(jù)的方法,其特征在于,包括串行外設(shè)接口設(shè)備設(shè)置多個(gè)緩沖器Buffer;當(dāng)需要接收快速外圍組件互連PCI Express總線數(shù)據(jù)時(shí),串行外設(shè)接口設(shè)備通過其中一個(gè)Buffer接收數(shù)據(jù),并監(jiān)測Buffer的存儲(chǔ)狀態(tài);當(dāng)該Buffer存滿數(shù)據(jù)時(shí),將當(dāng)前接收數(shù)據(jù)的Buffer切換到?jīng)]有數(shù)據(jù)的Buffer,在新的當(dāng)前Buffer繼續(xù)接收數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,串行外設(shè)接口設(shè)備通過Buffer狀態(tài)寄存器判斷Buffer中是否存滿數(shù)據(jù),當(dāng)Buffer狀態(tài)寄存器為第一預(yù)設(shè)值時(shí),表示Buffer已經(jīng)存滿數(shù)據(jù);當(dāng)Buffer狀態(tài)寄存器為第二預(yù)設(shè)值時(shí),表示Buffer中沒有數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,串行外設(shè)接口設(shè)備通過Buffer切換寄存器將當(dāng)前接收數(shù)據(jù)的Buffer切換到?jīng)]有數(shù)據(jù)的Buffer。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括當(dāng)Buffer存滿數(shù)據(jù)后,串行外設(shè)接口設(shè)備處理該Buffer中的數(shù)據(jù),在處理完該Buffer的數(shù)據(jù)后,清空該Buffer,將該Buffer的狀態(tài)寄存器設(shè)置為第二預(yù)設(shè)值。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述PCI Express總線數(shù)據(jù)為PCI Express總線數(shù)據(jù)包。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述PCI Express總線數(shù)據(jù)為符合預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息。
7.根據(jù)權(quán)利要求1至6任意一項(xiàng)所述的方法,其特征在于,進(jìn)一步包括串行外設(shè)接口設(shè)備判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)置條件,并為符合條件的數(shù)據(jù)設(shè)置指針;修改所述指針,將所述指針指向所述數(shù)據(jù)中的有效數(shù)據(jù),通過鏈表聯(lián)結(jié)修改后的指針;串行外設(shè)接口設(shè)備通過鏈表讀取所述有效數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,當(dāng)所述PCI Express總線數(shù)據(jù)是PCI Express總線數(shù)據(jù)包時(shí),如果接收的數(shù)據(jù)包中的地址處于其預(yù)設(shè)置的地址范圍之內(nèi)則該數(shù)據(jù)包符合預(yù)設(shè)置條件;否則,該數(shù)據(jù)包不符合預(yù)設(shè)置條件。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,串行外設(shè)接口設(shè)備按照下述步驟為數(shù)據(jù)包設(shè)置指針串行外設(shè)接口設(shè)備將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度與該數(shù)據(jù)包頭信息長度之和。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,串行外設(shè)接口設(shè)備修改所述指針的方法為將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址與該數(shù)據(jù)包頭信息長度之和,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度。
11.根據(jù)權(quán)利要求7所述的方法,其特征在于,當(dāng)所述PCI Express總線數(shù)據(jù)為符合預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息時(shí),如果所述地址信息是外設(shè)接口設(shè)備預(yù)設(shè)置的地址,則所述數(shù)據(jù)包符合預(yù)設(shè)置條件;否則,所述數(shù)據(jù)包不符合預(yù)設(shè)置條件。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,串行外設(shè)接口設(shè)備按照下述步驟為數(shù)據(jù)包設(shè)置指針串行外設(shè)接口設(shè)備將數(shù)據(jù)包保存到其申請的存儲(chǔ)空間,將指針的地址表項(xiàng)設(shè)置為所述存儲(chǔ)空間的首地址信息,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包中有效數(shù)據(jù)的長度與數(shù)據(jù)包頭信息長度之和。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于,串行外設(shè)接口設(shè)備修改所述指針的方法為將指針的地址表項(xiàng)設(shè)置為該數(shù)據(jù)包的首地址與該數(shù)據(jù)包頭信息長度之和,將指針的大小表項(xiàng)設(shè)置為該數(shù)據(jù)包的有效數(shù)據(jù)的長度。
14.根據(jù)權(quán)利要求6所述的方法,其特征在于,可編程器件將其接收到的PCI Express總線數(shù)據(jù)包轉(zhuǎn)換為預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息,并將所述數(shù)據(jù)包和地址信息發(fā)送給串行外設(shè)接口設(shè)備。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于,可編程器件按照下述步驟將PCI Express總線數(shù)據(jù)包轉(zhuǎn)換為預(yù)設(shè)定格式的數(shù)據(jù)包和相應(yīng)的地址信息可編程器件解析PCI Express總線數(shù)據(jù)包,獲得其中的有效數(shù)據(jù)和地址信息,將有效數(shù)據(jù)重新封裝進(jìn)符合預(yù)設(shè)置格式的數(shù)據(jù)包,根據(jù)地址信息得到與所述符合預(yù)設(shè)置格式的數(shù)據(jù)包相應(yīng)的新的地址信息。
全文摘要
本發(fā)明公開一種高速串行接口設(shè)備接收PCIExpress總線數(shù)據(jù)的方法,包括串行外設(shè)接口設(shè)備設(shè)置多個(gè)緩沖器Buffer;當(dāng)需要接收快速外圍組件互連PCI Express總線數(shù)據(jù)時(shí),串行外設(shè)接口設(shè)備通過其中一個(gè)Buffer接收數(shù)據(jù),并監(jiān)測Buffer的存儲(chǔ)狀態(tài);當(dāng)該Buffer存滿數(shù)據(jù)時(shí),將當(dāng)前接收數(shù)據(jù)的Buffer切換到?jīng)]有數(shù)據(jù)的Buffer,在新的當(dāng)前Buffer繼續(xù)接收數(shù)據(jù)。
文檔編號(hào)G06F13/38GK1889067SQ20061009883
公開日2007年1月3日 申請日期2006年7月13日 優(yōu)先權(quán)日2006年7月13日
發(fā)明者瞿凱, 朱根俊 申請人:杭州華為三康技術(shù)有限公司