本發(fā)明屬于spi接口配置技術(shù)領(lǐng)域,更具體的是一種基于fpga的spi接口配置方法。
背景技術(shù):
現(xiàn)場(chǎng)可編程陣列(fpga)具有靈活性、時(shí)效性等優(yōu)點(diǎn),通過靈活的編程可以設(shè)計(jì)成為很多通用接口。
spi(串行外設(shè)接口)總線系統(tǒng)是一種同步串行外設(shè)接口,用于處理主設(shè)備與各種外圍設(shè)備以串行方式進(jìn)行通信信息交換。它以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4根線,事實(shí)上3根也可以(單向傳輸時(shí))。分別是sdi(數(shù)據(jù)輸入)、sdo(數(shù)據(jù)輸出)、sclk(時(shí)鐘)、cs(片選)。sdi為主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出;sdo是主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入;sclk是時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生;cs是從設(shè)備使能信號(hào),由主設(shè)備控制。
通常實(shí)現(xiàn)中fpga與外圍設(shè)備的spi通信具有準(zhǔn)實(shí)時(shí)的交互性,多數(shù)情況下需要上位機(jī)進(jìn)行配合,增加交互用的串口、網(wǎng)口或是增加cpu器件的參與。不論哪一種都既增加開發(fā)難度,又需要增加開發(fā)人員,進(jìn)而增加了開發(fā)周期及開發(fā)成本。
相關(guān)術(shù)語:
spiserialperipheralinterface串行外設(shè)接口
fpgafiledprogrammablegatearray現(xiàn)場(chǎng)可編程門陣列
romread-onlymemory只讀存儲(chǔ)器
cpucentralprocessingunit中央處理器
jtagjointtestactiongroup聯(lián)合測(cè)試工作組
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出了一種基于fpga的spi接口配置方法,可以在沒有上位機(jī)的情況下完成spi接口的配置。并在線修改spi配置參數(shù),實(shí)現(xiàn)準(zhǔn)實(shí)時(shí)交互性。
本發(fā)明技術(shù)方案提供一種基于fpga的spi接口配置方法,用于在沒有上位機(jī)的情況下完成spi接口的配置,并支持在線修改spi配置參數(shù),實(shí)現(xiàn)如下,
設(shè)置jtag下載器連接jtag接口,jtag接口通過配置連線連接fpga,fpga通過spi總線連接到作為外圍設(shè)備的spi器件;
fpga包括依次連接的rom模塊、spictrl模塊和spi接口模塊,spi模塊通過spi總線連接到spi器件;
所述rom模塊用于存儲(chǔ)二進(jìn)制編碼文件;
所述spictrl模塊,用于從rom模塊中讀取數(shù)據(jù),并轉(zhuǎn)化成spi接口接受的命令格式;
spi接口模塊用于產(chǎn)生spi接口信號(hào),輸出spi接口信號(hào)給外圍設(shè)備;
對(duì)外圍設(shè)備的初始配置包括以下步驟,
步驟1,將外圍設(shè)備的配置腳本文件轉(zhuǎn)換成fpga內(nèi)部的rom模塊能夠存儲(chǔ)并識(shí)別的二進(jìn)制編碼文件;
步驟2,例化fpga內(nèi)部的rom模塊,rom模塊的存儲(chǔ)大小由步驟1生成的二進(jìn)制編碼文件大小決定;用步驟1生成的二進(jìn)制編碼文件對(duì)rom模塊進(jìn)行初始化;
步驟3,fpga通過spictrl模塊配置的狀態(tài)機(jī),從rom模塊中將二進(jìn)制編碼命令傳到spi接口模塊上;所述二進(jìn)制編碼命令是用步驟1生成的二進(jìn)制編碼文件對(duì)rom模塊進(jìn)行初始化的結(jié)果;
步驟4,fpga的spi接口模塊形成符合外圍設(shè)備的spi接口命令,對(duì)外圍設(shè)備進(jìn)行串行通信配置。
而且,當(dāng)需要對(duì)外圍設(shè)備重新配置時(shí),在線修改rom模塊中的二進(jìn)制編碼文件,fpga復(fù)位釋放后,實(shí)現(xiàn)對(duì)外圍設(shè)備的重新配置。
而且,采用以下方式實(shí)現(xiàn)對(duì)外圍設(shè)備的重新配置。
首先,在應(yīng)用中根據(jù)實(shí)際需要,確定要修改的外圍設(shè)備spi接口的地址和數(shù)據(jù)值;
然后,加載用于rom模塊初始化的二進(jìn)制編碼文件;找到相應(yīng)的spi地址,填入確定要修改的數(shù)據(jù)值;
最后,fpga芯片復(fù)位,在fpga內(nèi)部重復(fù)運(yùn)行步驟3和步驟4;修改后的值被重新配置到外圍設(shè)備。
而且,使用fpga編程軟件實(shí)現(xiàn)加載用于rom模塊初始化的二進(jìn)制編碼文件;找到相應(yīng)的spi地址,填入確定要修改的數(shù)據(jù)值。
本發(fā)明提出的一種基于fpga的spi接口配置方法,沒有采用串口、網(wǎng)口等需要cpu參與的交互方式。兩者相比,本發(fā)明實(shí)現(xiàn)節(jié)省了開發(fā)難度及開發(fā)人員投入,節(jié)約了開發(fā)成本,適于通信公司大規(guī)模應(yīng)用,具有重要的經(jīng)濟(jì)意義和市場(chǎng)價(jià)值。
附圖說明
圖1為本發(fā)明實(shí)施例中硬件模塊連接框圖。
圖2為本發(fā)明實(shí)施例中fpga實(shí)現(xiàn)模塊框圖。
圖3為本發(fā)明實(shí)施例中配置流程圖。
圖4為本發(fā)明實(shí)施例中二進(jìn)制編碼文件結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說明。
本發(fā)明實(shí)施例,提出一種基于fpga的spi接口配置方法。無需開發(fā)上位機(jī)軟件,節(jié)省了開發(fā)難度及開發(fā)人員投入,節(jié)約了開發(fā)成本。fpga的內(nèi)部rom模塊存儲(chǔ)外圍設(shè)備需要配置的spi寄存器命令。通過狀態(tài)機(jī)控制將存儲(chǔ)在rom中的命令,生成spi接口信號(hào)對(duì)外圍設(shè)備進(jìn)行配置。在線修改rom中的內(nèi)容實(shí)現(xiàn)對(duì)外圍設(shè)備的重新配置。
本發(fā)明采用的fpga芯片是intel公司的fpga芯片,fpga的開發(fā)綜合軟件是qutursii。
圖1為整個(gè)硬件模塊的連接圖,fpgajtag下載器連接jtag接口,jtag接口通過配置連線連接fpga,fpga通過spi總線連接到作為外圍設(shè)備的spi器件。電路板上電,通過fpgajtag下載器,將編程好的fpga文件下載到fpga芯片。fpga開始運(yùn)行后,從內(nèi)部的rom取出數(shù)據(jù)通過spi接口對(duì)外圍設(shè)備進(jìn)行配置。
圖2為fpga內(nèi)部實(shí)現(xiàn)框圖,包括依次連接的rom模塊、spictrl模塊和spi接口模塊(圖中記為spi),spi模塊通過spi總線連接到spi器件。rom模塊用于存儲(chǔ)二進(jìn)制編碼文件。spictrl模塊(串行外設(shè)接口控制模塊)用于從rom模塊中讀取數(shù)據(jù),并轉(zhuǎn)化成spi接口接受的命令格式。spi接口模塊用于產(chǎn)生spi接口信號(hào),輸出spi接口信號(hào)給外圍設(shè)備。具體實(shí)施時(shí),本領(lǐng)域技術(shù)人員可以采用fpga軟件技術(shù)實(shí)現(xiàn)模塊化。
參見圖3,本發(fā)明實(shí)施例的具體實(shí)現(xiàn)如下:
對(duì)外圍設(shè)備的初始配置包括以下步驟:步驟1,將外圍設(shè)備配置腳本文件轉(zhuǎn)換成fpga內(nèi)部的rom模塊可以存儲(chǔ)并可識(shí)別的二進(jìn)制編碼文件。
實(shí)施例中,先將外圍器件ad9361的配置腳本轉(zhuǎn)換成二進(jìn)制編碼文件。二進(jìn)制編碼結(jié)構(gòu)如圖4。每個(gè)二進(jìn)制編碼位寬為20位,由3部分組成:2位讀寫操作(w/r),第18、19位;10位spi地址(spiaddr),第8~17位和8位數(shù)據(jù)(spidata),第0~7位。寫操作,二進(jìn)制編碼的最高2位編碼為11;讀操作,二進(jìn)制編碼的最高2位編碼為10。ad9361配置腳本中的等待命令,二進(jìn)制編碼的最高2位編碼為01。在控制狀態(tài)機(jī)中如果讀到等待命令,fpga會(huì)等待一段時(shí)間,不操作spi接口。
步驟2,例化fpga內(nèi)部的rom模塊,rom模塊的存儲(chǔ)大小由步驟1生成的二進(jìn)制編碼文件大小決定。并用步驟1生成的二進(jìn)制編碼文件對(duì)rom進(jìn)行初始化。
例化fpga中的rom模塊,rom模塊的存儲(chǔ)位寬和深度由步驟1生成的二進(jìn)制編碼文件決定。實(shí)施例中設(shè)置的rom位寬為20位,存儲(chǔ)深度為4096。rom模塊用步驟1生成的二進(jìn)制編碼文件對(duì)進(jìn)行初始化。
步驟3,fpga通過spictrl模塊配置的狀態(tài)機(jī),從rom模塊中將二進(jìn)制編碼命令傳到spi接口模塊上。所述二進(jìn)制編碼命令是用步驟1生成的二進(jìn)制編碼文件對(duì)rom模塊進(jìn)行初始化的結(jié)果。
fpga中的spictrl模塊控制從rom中讀出數(shù)據(jù),轉(zhuǎn)換成spi模塊可以執(zhí)行的spi命令。實(shí)施例中spictrl模塊的狀態(tài)機(jī)具體設(shè)置為,如讀到的二進(jìn)制編碼命令最高2位為11,則spi串行接口中的讀寫位置1,進(jìn)行寫操作;如讀到的二進(jìn)制編碼命令最高2位為11,則spi串行接口中的讀寫位置0,進(jìn)行讀操作。如讀到的二進(jìn)制編碼命令最高2位為01,則spi串行接口不進(jìn)行讀或是寫操作,等待外圍設(shè)備(本實(shí)施例中是ad9361芯片)進(jìn)行內(nèi)部的校準(zhǔn)/鎖相環(huán)鎖定等操作。
步驟4,fpga的spi接口模塊形成符合外圍設(shè)備的spi接口命令,對(duì)外圍設(shè)備進(jìn)行串行配置。
fpga中的spi接口模塊將得到的spi讀寫、寄存器地址和寫入數(shù)據(jù)等命令,形成外圍設(shè)備可識(shí)別的spi接口信號(hào)。與外圍設(shè)備進(jìn)行串行通信。
進(jìn)一步地,當(dāng)需要對(duì)外圍設(shè)備的重新配置時(shí),使用fpga編程軟件,在線修改rom中的二進(jìn)制編碼命令文件,fpga復(fù)位釋放后,實(shí)現(xiàn)對(duì)外圍設(shè)備的重新配置。
實(shí)施例實(shí)現(xiàn)如下:
首先,在應(yīng)用中根據(jù)實(shí)際需要,確定要修改的外圍設(shè)備spi接口的地址和數(shù)據(jù)值。例如,根據(jù)實(shí)際需要調(diào)整ad9361的發(fā)送端內(nèi)部衰減值,即對(duì)應(yīng)的spi寄存器地址為0x073或是0x075的衰減值。
然后,打開fpga芯片的qutursii軟件的in‐systemmemorycontenteditor工具加載用于rom初始化的二進(jìn)制編碼文件。找到相應(yīng)的spi地址,填入確定的修改值。例如,在in‐systemmemorycontenteditor工具里加載rom初始化二進(jìn)制編碼文件,找到ad9361發(fā)送端內(nèi)部衰減寄存器0x73或是0x75所在的位置。修改二進(jìn)制編碼中的8位數(shù)據(jù)部分,填入所需要的數(shù)值。
最后,fpga芯片復(fù)位,在fpga內(nèi)部重復(fù)運(yùn)行步驟3和步驟4。修改后的值被重新配置到外圍設(shè)備。例如,ad9361發(fā)送端內(nèi)部衰減會(huì)變成實(shí)際需要的值,使發(fā)送端輸出信號(hào)滿足實(shí)際需求。
具體實(shí)施時(shí),本領(lǐng)域技術(shù)人員可以采用fpga軟件技術(shù)實(shí)現(xiàn)上述方法的自動(dòng)運(yùn)行。
本發(fā)明中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明進(jìn)行舉例說明。任何熟悉該技術(shù)的技術(shù)人員在本發(fā)明做揭露的技術(shù)范圍內(nèi),都可輕易得到其變化或替換,因此本發(fā)明保護(hù)范圍都應(yīng)涵蓋在由權(quán)利要求書所限定的保護(hù)范圍之內(nèi)。