嵌入式系統(tǒng)的PCI接口設(shè)計(jì)
1引言
本文引用地址:http://www.ex-cimer.com/article/202255.htm通常意義的計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)是以CPU為中心,再輔以存儲(chǔ)系統(tǒng)和I/O接口構(gòu)成。其功能主要用于數(shù)值計(jì)算和數(shù)據(jù)處理。而嵌入式系統(tǒng)是將CPU作為部件嵌入到系統(tǒng)中,此時(shí)的CPU并不是用于通用計(jì)算。嵌入式系統(tǒng)的主要特點(diǎn)是針對(duì)性強(qiáng)和實(shí)時(shí)性強(qiáng)、可靠性高、體積小、功耗低,可廣泛應(yīng)用于個(gè)人數(shù)字助理、數(shù)碼相機(jī)、數(shù)字電視、通信、工業(yè)測(cè)控系統(tǒng)以及導(dǎo)彈控制等諸多領(lǐng)域。嵌入式系統(tǒng)的設(shè)計(jì)過程包括:需求論證、規(guī)格說明、體系結(jié)構(gòu)設(shè)計(jì)、硬件和軟件構(gòu)件設(shè)計(jì)以及系統(tǒng)集成等。較好的方法是采用統(tǒng)一的建模語言(UML)來描述設(shè)計(jì)任務(wù)。這是一種面向?qū)ο蟮慕UZ言,它可將設(shè)計(jì)描述為許多交互的對(duì)象,這些對(duì)象對(duì)應(yīng)系統(tǒng)中的軟件和硬件。與嵌入式系統(tǒng)緊密相關(guān)的概念還包括實(shí)時(shí)操作系統(tǒng)(RTOS)、在片系統(tǒng)(SOC)和硬件描述語言(HDL)。所以說嵌入式系統(tǒng)的設(shè)計(jì)是一個(gè)“系統(tǒng)工程”。
以MPC8260為CPU,再加上PLX9656的64bit/66MHz PCI接口所組成的嵌入式系統(tǒng)有很高的性能,其數(shù)據(jù)吞吐量可達(dá)幾百M(fèi)B/S。其中MPC8260是MOTOROLA公司生產(chǎn)的具有603eTM核及通信處理模塊(CPM)的高性能、高集成度CPU。它在片內(nèi)集成了存儲(chǔ)管理單元(MMU)、系統(tǒng)接口單元(SIU)、64位60x總線和32位本地總線以及強(qiáng)大的網(wǎng)絡(luò)接口(三個(gè)FCC、兩個(gè)MCC、四個(gè)SCC、兩個(gè)SMC等)。
嵌入式系統(tǒng)有兩種工作模式:第一種為附屬工作方式,該方式將嵌入式系統(tǒng)設(shè)計(jì)成板卡形式,并通過主機(jī)的PCI接口進(jìn)行數(shù)據(jù)傳輸。這種方式具有一定的獨(dú)立性,可承擔(dān)某項(xiàng)特定的任務(wù),從而可使主機(jī)CPU的開銷大大減少。常用的視頻壓縮卡、工業(yè)數(shù)據(jù)采集卡等都屬此種類型。第二種工作模式為獨(dú)立工作方式。該方式由于嵌入式系統(tǒng)本身含有CPU,因而是一個(gè)自主的系統(tǒng)和功能單元,能獨(dú)立完成某項(xiàng)任務(wù),并可通過網(wǎng)絡(luò)接口(如以太網(wǎng)、ATM、HDLC/SDLC等)或通道(如SCSI、USB等)將數(shù)據(jù)傳輸給服務(wù)器,以實(shí)現(xiàn)數(shù)據(jù)的傳輸與管理。其典型產(chǎn)品有機(jī)頂盒、磁盤陣列控制器等。
2 PCI規(guī)范及其接口芯片
第一個(gè)PCI技術(shù)規(guī)范1.0版本于1992年6月面世,到1999年2月發(fā)布了2.2版,不久前又公布了PCIX規(guī)范。PCI的位數(shù)由32位擴(kuò)展為64位,頻率從33MHz提高到133MHz。該規(guī)范是處理器、存儲(chǔ)器總線至周邊設(shè)備擴(kuò)展的橋梁,根據(jù)PCI橋接的對(duì)象可分為Host/PCI橋(北橋)和PCI/SA橋(南橋),它們可一起構(gòu)成芯片組。PCI接口芯片通過配置和編程可將其數(shù)據(jù)空間映射為Memory和I/O方式;其數(shù)據(jù)傳送既可以是單數(shù)據(jù)段讀寫,又可以是突發(fā)方式、中斷方式或DMA方式。
許多廠商(如AMCC、IBM、PLX等)都可提供PCI接口芯片,圖1所示是PLX的64bit/66MHz PCI接口芯片PLX9656的結(jié)構(gòu)框圖。
PLX9656符合PCIr2.2、CompactPCIr1.0及PCI熱插拔r1.0規(guī)范。它可配置為M模式(可與Motorola的MPC850、MPC860無縫接口)、C模式(為非復(fù)用地址/數(shù)據(jù)方式,可與DSP、ASIC和FPGA接口)和J模式(為復(fù)用地址/數(shù)據(jù)方式,可與IBMPoweerPC401和IOP480接口)。此外,它還具有以下特點(diǎn):
●采用先進(jìn)的Direct Master、Direct Slave和DMA數(shù)據(jù)傳輸技術(shù),其迸發(fā)數(shù)據(jù)傳輸率PCIBus端為528MB/s,Local Bus端為264MB/s;
●I2OTM信息單元包括8個(gè)32位郵箱寄存器和2個(gè)32位門鈴寄存器;
●PCI仲裁器支持7個(gè)外部主設(shè)備;
●帶有可編程中斷產(chǎn)生器及串行EEPROM接口。
3硬聯(lián)邏輯設(shè)計(jì)
PCI接口芯片的主要功能是橋接CPU端的LocalBus與PCI總線。另外,還必須通過串行總線上的EEPROM來配置PCI芯片的初始工作方式。PLX9656的三種工作模式(M、C和J)可以和大多數(shù)CPU和DSP接口。其中M模式是專為MOTOROLA的POW-ERPC系列CPU而設(shè)計(jì)的接口模式。
由PLX9656與MPC8260組成的最小系統(tǒng)至少應(yīng)包括以下幾個(gè)組成部分:FLASH、SDRAM、SRAM、PCI連接器、JTAG端口、時(shí)鐘、復(fù)位、電源、EEPROM、以太網(wǎng)接口、ATM和RS232串行口等。
PLX9656信號(hào)線包括PCI端信號(hào)、Local Bus端地址與數(shù)據(jù)、控制信號(hào)、電源和地。其中前兩項(xiàng)占了信號(hào)數(shù)量的絕大部分。為了保證信號(hào)的可靠傳輸,芯片上用很多引腳作電源和地,這些引腳在布線時(shí)應(yīng)仔細(xì)連接,并應(yīng)大面積敷銅,同時(shí)還要連接濾波電容。另外要注意的是:MPC8260有60x Bus和LocalBus兩條總線,前者為MPC8260與外界的接口總線,所以應(yīng)將PLX9656的Local Bus信號(hào)與MPC8260的60x Bus連接。圖2所示是系統(tǒng)的硬聯(lián)邏輯框圖。
4驅(qū)動(dòng)程序
開發(fā)Windows環(huán)境和Linux環(huán)境的驅(qū)動(dòng)程序有很大不同。
4.1 Windows環(huán)境中驅(qū)動(dòng)程序的編寫
由于Windows操作系統(tǒng)被Microsoft所壟斷,它是一個(gè)封閉的操作系統(tǒng),因此很難將用戶驅(qū)動(dòng)程序掛接到Windows操作系統(tǒng)中。通常要利用一些開發(fā)工具,如Microsoft的DDK、Numega的DriverStudio和Jungo的WinDriver等。因而應(yīng)首先是由它們生成驅(qū)動(dòng)程序的框架后,再導(dǎo)入到Microsoft的Visual C++中,在填入與設(shè)計(jì)對(duì)象相關(guān)的代碼后,最后由build生成Windows環(huán)境下的驅(qū)動(dòng)程序。
PLX公司的PLX9656RDK提供了Windows API及其源代碼和調(diào)試工具PLXMon。利用這些針對(duì)PLX芯片的API可以驅(qū)動(dòng)PCI接口,而且其編程工作也非常快捷。
PLX芯片的初始化函數(shù)原型為:
S8 Select Device(DEVICE_LOCATION*pDev);
它可提供很多對(duì)PCI的接口操作,其中包括寄存器讀/寫、中斷允許/禁止、獲取中斷狀態(tài)、IOP總線讀/寫、IOP端口讀/寫、電源管理、熱插拔功能、VPD讀/寫、EEPROM讀/寫、郵箱寄存器讀/寫、門鈴寄存器讀/寫、DMA控制/狀態(tài)、DMA塊通道操作、DMASgl通道操作以及DMAShuttle通道操作等。
在對(duì)PLX芯片進(jìn)行初始化后,便可利用PLX9656RDK提供的上述功能對(duì)PCI接口進(jìn)行操作。
4.2 Linux環(huán)境下驅(qū)動(dòng)程序編寫
Linux是源代碼開放型操作系統(tǒng)。在這種系統(tǒng)中,用戶自編的設(shè)備驅(qū)動(dòng)程序可以和原操作系統(tǒng)的驅(qū)動(dòng)程序享有同等的“地位”。Linux環(huán)境下,驅(qū)動(dòng)程序的編寫有兩種方式,一種是基于內(nèi)核的,另一種是基于模塊的。前一種方式是將驅(qū)動(dòng)程序直接注冊(cè)在相應(yīng)的系統(tǒng)文件中,然后在操作系統(tǒng)啟動(dòng)時(shí)將它裝載在內(nèi)存中使用;后一種方式則通過命令行insmod和mmod來加載和卸載驅(qū)動(dòng)程序模塊,因此比較方便靈活。
Linux對(duì)設(shè)備的操作與對(duì)文件的操作一致,所有的驅(qū)動(dòng)程序都毫不例外地要使用file operations結(jié)構(gòu)。其中的read、write、ioctl、mmap、open、release指針分別指向用戶編寫的驅(qū)動(dòng)程序的相關(guān)操作。
每個(gè)PCI設(shè)備均可由總線號(hào)、設(shè)備號(hào)和功能號(hào)來確定,它共有三個(gè)訪問空間,即內(nèi)存空間、I/O端口和配置寄存器。配置空間用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址。其基本功能函數(shù)如下:
訪問I/O和內(nèi)存空間時(shí),要根據(jù)配置寄存器中PCL-BASE-ADDRESS-i(i=0...5)所給定的基地址來讀寫數(shù)據(jù)。
5嵌入式系統(tǒng)的實(shí)現(xiàn)
嵌入式系統(tǒng)的開發(fā)平臺(tái)包括Host(主機(jī))和Tar-get(目標(biāo))兩部分。通常,Host和Target的硬件構(gòu)架(如x86、PowerPC、ARM、MIPS等)和操作系統(tǒng)都不盡相同。因此需要用CDK(交叉開發(fā)工具包)把在Host上開發(fā)的代碼下載到Target上。此開發(fā)平臺(tái)的模型如圖3所示。
由于主機(jī)上資源豐富(如功能強(qiáng)大的操作系統(tǒng)和應(yīng)用軟件、CRT顯示輸出和打印機(jī)硬拷貝輸出、鍵盤和鼠標(biāo)輸入等),因此調(diào)試起來非常便捷。針對(duì)不同的目標(biāo)系統(tǒng),HardHat CDK有不同的開發(fā)工具包,但開發(fā)流程及工具的使用幾乎一樣。首先用相應(yīng)目標(biāo)系統(tǒng)的交叉編譯器將源程序編譯為可執(zhí)行文件,再將可執(zhí)行文件拷貝到目標(biāo)系統(tǒng)的NFS目錄下,待目標(biāo)系統(tǒng)裝載內(nèi)核并引導(dǎo)后,便可調(diào)試和運(yùn)行應(yīng)用程序了。程序調(diào)試成功后,就可以使用EmbeddedPlanet公司的Planet Core來將應(yīng)用程序燒錄到目標(biāo)板的FLASH中,這樣,目標(biāo)板就成了可獨(dú)立運(yùn)行的嵌入式系統(tǒng)了。
6小結(jié)
由MPC8260和PLX9656構(gòu)成的嵌入式系統(tǒng)有著廣闊的應(yīng)用前景??蓱?yīng)用于高性能通信系統(tǒng)中的WAN/LAN控制卡、高速M(fèi)ODEM卡、幀中繼卡、路由和交換機(jī)等,處理器集成的ATM、T1/E1及以太網(wǎng)等通信通道均能很好地支持上述通信功能;另外還支持高速PC適配卡、CompctPCI接口卡以及嵌入式主機(jī)系統(tǒng)等。由于PLX9656具有數(shù)據(jù)管道構(gòu)架的直接傳輸方式,因而可方便的用于PCI及Local Bus端的I/O和設(shè)備的高速數(shù)據(jù)傳輸。
更多計(jì)算機(jī)與外設(shè)信息請(qǐng)關(guān)注:21ic計(jì)算機(jī)與外設(shè)頻道
c++相關(guān)文章:c++教程
評(píng)論