基于SoC+FPGA平臺(tái)快速動(dòng)態(tài)加載驅(qū)動(dòng)開(kāi)發(fā)及實(shí)現(xiàn)
摘要:以TI公司的OMAP-L138型號(hào)雙核處理器單片系統(tǒng)(SoC)與ALTERA公司 EP3C80F484型號(hào)FPGA為核心的嵌入式硬件平臺(tái),介紹了SoC與FPGA通過(guò)高速SPI接口實(shí)現(xiàn)固件動(dòng)態(tài)加載的方法,以及基于Linux的SoC對(duì)FPGA快速動(dòng)態(tài)加載驅(qū)動(dòng)程序開(kāi)發(fā)的原理及步驟。實(shí)際測(cè)試基于高速SPI接口的FPGA固件動(dòng)態(tài)加載功能快速穩(wěn)定,對(duì)同類型嵌入式平臺(tái)的FPGA固件動(dòng)態(tài)加載驅(qū)動(dòng)開(kāi)發(fā)具有借鑒意義。
本文引用地址:http://m.butianyuan.cn/article/201605/291764.htm引言
OMAP-L138雙核處理器是TI公司推出的新一代低功耗單片系統(tǒng)(SoC),廣泛應(yīng)用于通信、工業(yè)、醫(yī)療診斷和音視頻嵌入式設(shè)備,其內(nèi)部集成的ARM核與DSP核協(xié)同工作,既能滿足基于嵌入式操作系統(tǒng)的通用應(yīng)用程序開(kāi)發(fā),又能滿足專屬?gòu)?fù)雜算法的高效實(shí)時(shí)運(yùn)行,再加上大容量FPGA芯片做數(shù)字信號(hào)的前端處理,可作為較高速率的綜合通信數(shù)據(jù)業(yè)務(wù)處理通用數(shù)字平臺(tái)。實(shí)現(xiàn)對(duì)FPGA芯片的固件動(dòng)態(tài)加載,既可以去掉FPGA芯片外掛用于存儲(chǔ)其固件的FLASH芯片以降低成本,又可以滿足動(dòng)態(tài)改變FPGA運(yùn)行程序以實(shí)現(xiàn)多種應(yīng)用場(chǎng)合快速靈活的切換要求。
1 OMAP-L138及Cyclone III系列FPGA的特點(diǎn)
采用OMAP-L138與EP3C80F484為核心的嵌入式平臺(tái),能為寬帶通信設(shè)備提供完美的平臺(tái)解決方案。OMAP-L138的特點(diǎn)[1]如下:
(1)內(nèi)部集成RISC MPU,即主頻為375/456MHz的ARM926EJ-S,以及定/浮點(diǎn)兼容的VLIW DSP,即主頻為375/456MHz 的C674x,可滿足系統(tǒng)的非實(shí)時(shí)、多任務(wù)及實(shí)時(shí)、高強(qiáng)度數(shù)據(jù)處理的應(yīng)用需求;
(2)強(qiáng)大豐富的外設(shè)資源。主要包括:1個(gè)EMAC控制器;1個(gè)USB2.0接口和1個(gè)USB1.1接口;2個(gè)I2C接口;1個(gè)McASP;2個(gè)McBSP;2個(gè)SPI接口;4個(gè)64位通用定時(shí)器;1個(gè)實(shí)時(shí)時(shí)鐘(RTC);1個(gè)可配置的16位HPI;144個(gè)可配置的GPIO管腳;3個(gè)UART接口;2個(gè)eHRPWM和3個(gè)eCAP;1個(gè)EMIFA口,可接16位SDRAM/NOR Flash/NAND Flash;1個(gè)EMIFB口,可接16位的DDR2(最高頻率150MHz)或16位 MDDR (最高頻率133MHz);2個(gè)MMC/SD/SDIO;1個(gè) LCD控制器;1個(gè)SATA控制器;1個(gè)UPP接口;1個(gè)VPIF接口;眾多外設(shè)可以通過(guò)PSC(電源及睡眠控制)和管腳復(fù)用控制,根據(jù)系統(tǒng)需求靈活配置;
(3)高效的緩存機(jī)制。其中ARM核內(nèi)部有16KB的L1程序Cache和16KB的數(shù)據(jù)Cache,以及8KB中斷向量表存儲(chǔ)RAM;DSP核采用二級(jí)緩存結(jié)構(gòu),包括32KB 的L1程序Cache、32KB 的數(shù)據(jù)Cache和高達(dá)256KB可靈活配置的L2 Cache,L2可以被ARM核訪問(wèn);此外在兩核之間還有128KB的片內(nèi)SHARE RAM,可用于ARM核和DSP核高速交換數(shù)據(jù),而不影響各自的運(yùn)行;
(4)低功耗設(shè)計(jì)。采用1.2V內(nèi)核電壓,1.8V或3.3V 可配置I/O接口電壓。
FPGA芯片EP3C80F484為ALTERA公司推出的Cyclone III系列FPGA的一員,其特點(diǎn)[2]如下:
1)Cyclone III滿足高性能、低功耗、低成本的應(yīng)用需求;
2)提供容量為5000至200000個(gè)邏輯單元、0.5MB至8MB片內(nèi)RAM的系列芯片選擇,其低功耗設(shè)計(jì)更易于滿足設(shè)計(jì)預(yù)算,其中EP3C80F484內(nèi)部集成81264個(gè)邏輯單元,2810880 比特內(nèi)部RAM,484個(gè)管腳;
3)提供高、中、低I/O管腳封裝以滿足不同應(yīng)用場(chǎng)合;
4)多達(dá)4個(gè)PLL(鎖相環(huán))為片內(nèi)時(shí)鐘、片外時(shí)鐘及I/O接口,提供穩(wěn)定的時(shí)鐘管理及同步;
5)支持32位Nios II嵌入式處理器,可在單片上集成Nios II軟核、片上外設(shè)及內(nèi)存、片外內(nèi)存接口[3],提供低成本可定制的嵌入式處理解決方案;
6)提供多種高速內(nèi)存接口,例如DDR、DDR2、SDR、 SDRAM以及 QDRII SRAM。
2 OMAP-L138對(duì)EP3C80F484實(shí)現(xiàn)快速動(dòng)態(tài)加載的方法
Cyclone III系列FPGA的程序加載運(yùn)行主要通過(guò)以下幾種方式:主動(dòng)串行(AS)、主動(dòng)并行(PS)、被動(dòng)并行 (FPP)、被動(dòng)串行(PS)以及通過(guò)JTAG接口采用USB下載線進(jìn)行加載。當(dāng)OMAP-L138對(duì)EP3C80F484進(jìn)行動(dòng)態(tài)加載時(shí),采用的是被動(dòng)串行(PS)模式,因此對(duì)應(yīng)的EP3C80F484的4位MSEL配置管腳接地。為提高加載的速度及準(zhǔn)確性,采用OMAP-L138的SPI0接口的SPI0_CLK及SPI0_SIMO管腳與EP3C80F484配置口的DCLK及DATA0管腳連接,EP3C80F484配置口的其它控制管腳與OMAP-L138的GPIO管腳連接,遵從Cyclone III系列FPGA的PS模式加載時(shí)序要求實(shí)現(xiàn)對(duì)FPGA的快速動(dòng)態(tài)加載。OMAP-L138與EP3C80F484的連接如圖1所示。
EP3C80F484在被動(dòng)串行(PS)模式下的動(dòng)態(tài)加載時(shí)序要求如圖2所示。
采用OMAP-L138的SPI0接口與EP3C80F484連接,可以使用其高達(dá)50Mbit/s的高速數(shù)據(jù)傳輸能力,實(shí)現(xiàn)EP3C80F484的快速動(dòng)態(tài)加載。OMAP-L138的SPI功能模塊框圖如圖3所示。
SPI控制器包含收發(fā)移位寄存器、緩存以及控制邏輯,數(shù)據(jù)在傳輸開(kāi)始時(shí)寫入發(fā)送移位寄存器,在數(shù)據(jù)傳輸結(jié)束時(shí)讀取接收緩存。SPI控制器可工作在主模式和從模式,工作在主模式時(shí)由SPI控制器發(fā)起傳輸并驅(qū)動(dòng)SPIx_CLK管腳產(chǎn)生時(shí)鐘。支持多種數(shù)據(jù)格式配置,四種相位及極性配置選項(xiàng)[4]。
3 EP3C80F484動(dòng)態(tài)加載基于Linux內(nèi)核的驅(qū)動(dòng)開(kāi)發(fā)
動(dòng)態(tài)加載驅(qū)動(dòng)本質(zhì)上屬于字符設(shè)備驅(qū)動(dòng),動(dòng)態(tài)加載的驅(qū)動(dòng)開(kāi)發(fā)主要包含兩個(gè)部分: (1)根據(jù)EP3C80F484的動(dòng)態(tài)加載時(shí)序要求配置OMAP-L138的SPI0及其它控制邏輯GPIO,實(shí)現(xiàn)固件程序的比特流正確灌入EP3C80F484的配置口;(2)實(shí)現(xiàn)EP3C80F484的.rbf格式固件加載文件的讀取及解析,并傳遞給底層SPI控制驅(qū)動(dòng)程序?qū)崿F(xiàn)比特流的傳輸,完成字符設(shè)備各個(gè)操作函數(shù)的具體實(shí)現(xiàn),并編譯成可動(dòng)態(tài)加載的模塊驅(qū)動(dòng)文件。
與驅(qū)動(dòng)開(kāi)發(fā)密切相關(guān)的主要SPI控制器寄存器說(shuō)明如表1所示。
根據(jù)EP3C80F484在被動(dòng)串行(PS)模式下的動(dòng)態(tài)加載時(shí)序要求,SPI控制器工作在POLARITY = 0 ,PHASE = 1,SHIFTDIR=1模式,POLARITY、PHASE及SHIFTDIR設(shè)置位于SPIFMT0寄存器,工作時(shí)序如圖4所示。
動(dòng)態(tài)加載字符設(shè)備的操作函數(shù)中的成員函數(shù)實(shí)現(xiàn)成為了驅(qū)動(dòng)程序開(kāi)發(fā)的關(guān)鍵,file_operations[5]定義如下:
static const struct file_operations load_fpga_fops =
{ .owner = THIS_MODULE,
.read = load_fpga_read,
.write = load_fpga_write,
.ioctl = load_fpga_ioctl,
.open = load_fpga_open,
.release = load_fpga_release,
};
驅(qū)動(dòng)模塊的初始化函數(shù)load_fpga_init除完成字符設(shè)備的設(shè)備號(hào)及內(nèi)存申請(qǐng)和設(shè)備注冊(cè)外,還要完成SPI0控制器的所有初始化配置及GPIO管腳配置;load_fpga_write成員函數(shù)實(shí)現(xiàn)存放于文件系統(tǒng)的.rbf固件加載文件從用戶空間到內(nèi)核空間的數(shù)據(jù)拷貝,并將基于SPI的動(dòng)態(tài)加載驅(qū)動(dòng)實(shí)現(xiàn)封裝成功能函數(shù)spi_down_load供load_fpga_write函數(shù)調(diào)用;load_fpga_ioctl成員函數(shù)提供SPI通信速率等相關(guān)配置。spi_down_load函數(shù)流程圖如圖5所示。
EP3C80F484配置口DCLK最大支持133MHz的比特流,將OMAP-L138的SPI0_CLK配置成50MHz的時(shí)鐘頻率,加上操作系統(tǒng)、文件處理及控制邏輯等開(kāi)銷,對(duì)于2MB左右的.rbf固件程序?qū)崪y(cè)動(dòng)態(tài)加載完成耗時(shí)小于1.2秒。測(cè)試應(yīng)用程序與驅(qū)動(dòng)程序交互流程如圖6所示。
4 結(jié)語(yǔ)
本文詳細(xì)介紹了在Linux環(huán)境下,采用型號(hào)為OMAP-L138的SOC的SPI接口及邏輯GPIO實(shí)現(xiàn)對(duì)EP3C80F484的快速動(dòng)態(tài)加載的驅(qū)動(dòng)程序開(kāi)發(fā)的具體方法。該方法可靠、快速且穩(wěn)定,比純粹使用GPIO模擬加載時(shí)序快一個(gè)數(shù)量級(jí)以上,并在苛刻的使用條件下仍然表現(xiàn)出良好的穩(wěn)定性??捎糜谑殖纸K端、車載、船載系統(tǒng)等通信和工業(yè)領(lǐng)域,對(duì)動(dòng)態(tài)加載嵌入式系統(tǒng)開(kāi)發(fā)具有重要意義。
參考文獻(xiàn):
[1]OMAP-L138 C6-Integra DSP+ARM Processor (Rev. D) . Texas Instruments, 2011.
[2]Cyclone III Device Handbook. Altera Corporation, 2012.
[3]Nios II Processor Reference Handbook. Altera Corporation, 2011.
[4]TMS320C674x/OMAP-L1x Processor Serial Peripheral Interface (SPI) User's Guide. Texas Instruments.2010.
[5]宋寶華. Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M]..北京:人民郵電出版社:2008.
本文來(lái)源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第5期第40頁(yè),歡迎您寫論文時(shí)引用,并注明出處。
評(píng)論