當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]PCI接口擴(kuò)展卡的快速開發(fā)方案

隨著計(jì)算機(jī)和控制技術(shù)的不斷發(fā)展,很多工程人員都選用PC機(jī)作為控制系統(tǒng)的操作平臺(tái)。為了能夠和外部設(shè)備通信,PC機(jī)上提供了外置的USB、串口、并口及內(nèi)置的ISA、PCI等接口。PCI總線接口速度快,系統(tǒng)占用率低,有完備的即插即用(PnP)管理體制,是目前計(jì)算機(jī)插卡式外設(shè)總線的事實(shí)標(biāo)準(zhǔn)。
  筆者設(shè)計(jì)了一塊PCI總線多功能CAN通信I/O卡,可以完成數(shù)字量I/O、CAN總線通信的功能。本文將根據(jù)筆者的實(shí)際經(jīng)驗(yàn),介紹PCI接口擴(kuò)展卡的軟硬件設(shè)計(jì)流程和一種快速開發(fā)方案。
1 PCI總線簡(jiǎn)介
  PCI總線標(biāo)準(zhǔn)[1]由PCISIG(PCI Special Interest Group)制定,該組織的成員有Intel、IBM、DEC等公司。目前PC機(jī)中使用的PCI總線標(biāo)準(zhǔn)主要以PCI2.0為主,其頻率為33MHz,字寬為32bit,電源電壓為5V。新版的PCI標(biāo)準(zhǔn)向下兼容,并支持66MHz時(shí)鐘,字寬為64bit,電壓為3.3V。
  PCI總線是一種時(shí)分復(fù)用的雙向應(yīng)答總線,傳輸發(fā)起方稱為主設(shè)備,接收方稱為從設(shè)備。主設(shè)備用FRAME信號(hào)指示,從設(shè)備拉低它的DEVSEL線表示響應(yīng)傳輸請(qǐng)求。PCI總線的數(shù)據(jù)傳輸以幀為單位,每次傳輸由一個(gè)地址周期(Address Phase)和多個(gè)數(shù)據(jù)周期(Data Phase)組成,如圖1所示。AD0~AD31首先給出本次傳輸?shù)氖椎刂罚竺婢o跟一個(gè)或多個(gè)32位(4字節(jié))寬的數(shù)據(jù),多個(gè)數(shù)據(jù)的地址自動(dòng)遞增。在地址周期,C/BE0~C/BE3這四根線的不同組合指示出在AD0~AD31上將要進(jìn)行何種類型的操作,如C/BE0~C/BE3=0110表示存儲(chǔ)器讀,C/BE0~C/BE3=0011表示I/O寫。在數(shù)據(jù)周期,C/BE0~C/BE3對(duì)應(yīng)AD0~AD31上四個(gè)字節(jié)的使能。IRDY和TRDY分別表示主設(shè)備準(zhǔn)備好和從設(shè)備準(zhǔn)備好。在傳輸過程中,只有IRDY和TRDY同時(shí)有效,傳輸才能繼續(xù);否則插入等待周期,用于在不同速度的設(shè)備之間協(xié)調(diào)工作。

計(jì)算機(jī)的接口卡一般會(huì)用到I/O端口、存儲(chǔ)器空間、中斷及DMA等計(jì)算機(jī)資源。傳統(tǒng)ISA接口卡通過更改跳線來避免多塊卡之間的資源沖突,PCI接口卡則摒棄了硬件跳線,由軟件統(tǒng)籌分配資源,這被稱為即插即用。為實(shí)現(xiàn)此功能,PCI協(xié)議除了可以對(duì)I/O空間、存儲(chǔ)器空間讀寫外,還定義了對(duì)配置空間的讀寫(C/BE0~C/BE3=1010、1011)。所謂配置空間,是指映射到每塊接口卡上的256字節(jié)的特殊功能寄存器。設(shè)計(jì)者事先在配置空間的指定位置寫入需要申請(qǐng)使用的資源量,主板上電后,由PnP-Bios讀取各卡的配置空間,對(duì)它們所需的資源進(jìn)行統(tǒng)籌分配,再將分配結(jié)果寫回對(duì)應(yīng)的配置空間地址,完成自動(dòng)配置。
2 PCI接口卡的硬件設(shè)計(jì)及調(diào)試
  以筆者設(shè)計(jì)的PCI卡為例,使用SJA1000實(shí)現(xiàn)CAN總線通信功能,需要映射32字節(jié)的存儲(chǔ)器空間和一個(gè)中斷資源,在功能上屬于PCI從設(shè)備(Target-only Device)。SJA1000的對(duì)外接口電路可以直接與Intel8051、8096及ISA總線連接,但是不能與PCI總線直接連接,因此需要設(shè)計(jì)用于邏輯轉(zhuǎn)換的接口電路。
  PCI接口電路的設(shè)計(jì)一般有兩類方法:一類是使用FPGA/CPLD等可編程器件開發(fā)邏輯轉(zhuǎn)換電路。根據(jù)實(shí)現(xiàn)功能的多少,所需的等效門密度約為5000~15000門,可自行編程或者購買已有“軟核”(IP CORE)的產(chǎn)品實(shí)現(xiàn);另一類是使用標(biāo)準(zhǔn)接口芯片對(duì)PCI總線邏輯信號(hào)解碼。第一種方法開發(fā)成本高、難度大、周期長(zhǎng)、測(cè)試設(shè)備昂貴,但是批量生產(chǎn)成本很低,適合大規(guī)模全定制或半定制ASIC的生產(chǎn)。第二種方法相對(duì)簡(jiǎn)單、開發(fā)周期短、性價(jià)比合理,適合本方案采用。市場(chǎng)上的接口芯片供應(yīng)商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052[2]價(jià)格便宜、供貨渠道暢通、功能適用,因此這里選用PLX9052。
  采用PLX9052的接口卡在邏輯上可分成三個(gè)功能模塊:PCI接口部分、EEPROM部分和局部總線部分,如圖2所示。

PLX9052提供完備的PCI從設(shè)備支持,PCI接口部分的47根信號(hào)線可以直接與PCI連接器(俗稱金手指)連接。PCI連接器上有兩根特殊的引線PRSNT1#和PRSNT2#,它們不參與PCI協(xié)議操作,只用來告知主板該卡消耗的電功率。
  PLX9052 將PCI總線上的操作轉(zhuǎn)換為對(duì)局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對(duì)SJA1000的寄存器進(jìn)行訪問。舉例來說,如果系統(tǒng)上電后分配給本卡的存儲(chǔ)器地址空間為F680 0000~F680 001F,那么當(dāng)系統(tǒng)通過PCI總線訪問這個(gè)區(qū)域時(shí),PLX9052會(huì)應(yīng)答,并將其轉(zhuǎn)換為局部地址0x0000~0x001F,對(duì)應(yīng)于SJA1000的32個(gè)內(nèi)部寄存器。另外,PLX9052自身也有一些內(nèi)部寄存器,它們被自動(dòng)映射到另一片內(nèi)存區(qū)域,可通過PCI總線直接訪問。
  PLX9052提供三種類型的局部總線信號(hào):標(biāo)準(zhǔn)ISA模式、復(fù)用模式和非復(fù)用模式,其中復(fù)用模式和SJA1000的接口最吻合。此模式的信號(hào)和8051CPU輸出的信號(hào)基本相同,可以直接與SJA1000及其它類似接口的芯片相連,只是片選信號(hào)不再需要外部地址譯碼電路,而是由PLX9052內(nèi)部邏輯完成。
  局部總線的時(shí)鐘可以與PCI時(shí)鐘異步,由有源晶振提供。控制信號(hào)LHOLD接地表示局部總線無需申請(qǐng)等待周期。LINTi1是中斷申請(qǐng)線,接有上拉電阻,確保無中斷時(shí)??吭诳臻e狀態(tài)。USER0~USER4是可編程I/O引腳,USER0、1設(shè)置為輸入,USER2、3設(shè)置為輸出,由PLX9052的內(nèi)部寄存器控制,實(shí)現(xiàn)數(shù)字I/O功能。SJA1000和82C250構(gòu)成CAN總線接口電路,最高可支持1MHz的通信速率。
  EEPROM部分用于初始化PLX9052的寄存器,在系統(tǒng)上電后讀取。PLX9052的EECS、EEDO、EEDI、EESK引腳分別與串行EEPROM 93LC46的對(duì)應(yīng)引腳相連,其中EEDO引腳加有上拉電阻,使得在未安裝EEPROM時(shí),EEDO始終保持高電平狀態(tài),PLX9052仍然能夠以缺省設(shè)置運(yùn)行。以下對(duì)幾個(gè)主要寄存器的設(shè)置進(jìn)行說明。
  VendorID和DeviceID:生產(chǎn)廠商代號(hào)和芯片代號(hào)。VendorID由生產(chǎn)商向PCISIG申請(qǐng),DeviceID由生產(chǎn)商自行制定。PLX公司的VendorID為10B5,PLX9052的DeviceID為9050,故設(shè)為10B5 9050。
  ClassCode:表示PCI卡屬于哪種類型,如多媒體卡、顯卡等。本設(shè)計(jì)中將其定為0000 0680,表示PCI橋(PCI Bridge)設(shè)備。
  Local Address Space 0 Range:設(shè)為FFFF FFE0,表示申請(qǐng)32字節(jié)的存儲(chǔ)器空間。[!--empirenews.page--]
  Local Address Space 0 Local Base Address(remap):設(shè)為0000 0001,表示將PCI總線上的地址轉(zhuǎn)換為局部總線地址0x0000~0x001F。
  Chip Select 0 Base Address:設(shè)為0000 0011,表示在局部總線地址為0x0000~0x001F時(shí),局部總線的片選信號(hào)有效,用于SJA1000的片選。
  Interrupt Control/Status: 設(shè)為0000 0041, 表示中斷使能,響應(yīng)LINTi1上的中斷申請(qǐng)。
  CNTRL: 設(shè)為0060 0C80,表示USER0、USER1引腳用于輸入,USER2 、USER3引腳用于輸出,初始值分別為0、1,PCI數(shù)據(jù)傳輸?shù)却瑫r(shí)長(zhǎng)度為12個(gè)時(shí)鐘周期。
  根據(jù)PCI標(biāo)準(zhǔn)和PLX9052的說明文檔,PCI連接器上所有的VCC、Vi/o 5V電源連接到一起,所有的GND端連接到一起,在盡可能靠近PLX9052電源引腳的地方放置高頻去耦電容。PCI總線的時(shí)鐘頻率為33MHz,不恰當(dāng)?shù)牟季€會(huì)導(dǎo)致信號(hào)線之間的延時(shí)關(guān)系混亂,因此PCI協(xié)議對(duì)布線做了嚴(yán)格的規(guī)定,要求主時(shí)鐘PCI_CLK線的長(zhǎng)度為2.5英寸,誤差應(yīng)小于0.1英寸,其它引線短于1.5英寸,推薦使用四層板。設(shè)計(jì)中可以參考市面上的聲卡和網(wǎng)卡布線實(shí)例,如考慮成本等因素,也可只使用兩層板,雙面覆銅接地。經(jīng)實(shí)踐驗(yàn)證該卡能夠穩(wěn)定工作。
3 PCI接口驅(qū)動(dòng)程序及軟件設(shè)計(jì)
  在DOS環(huán)境下,操作系統(tǒng)對(duì)應(yīng)用程序開放所有權(quán)限,開發(fā)人員可以使用匯編指令、BIOS函數(shù)等任何方法操作硬件資源,此處不再贅述。
  在Windows系統(tǒng)中,為避免因不當(dāng)?shù)挠布僮鞫鴮?dǎo)致系統(tǒng)崩潰,應(yīng)用程序不再具有直接的硬件訪問權(quán),如果要操作硬件,必須借助設(shè)備驅(qū)動(dòng)程序?,F(xiàn)有的Windows系列操作系統(tǒng)產(chǎn)品眾多,所使用的設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)也有所不同。其中,VxD型驅(qū)動(dòng)程序最古老,適用于Win3.x、Win95、Win98等操作系統(tǒng);WinNT型驅(qū)動(dòng)程序只適用于WinNT4.x以下版本的操作系統(tǒng);WDM型驅(qū)動(dòng)程序是WinNT型驅(qū)動(dòng)程序的升級(jí)版,適用于Win98、Win2000、WinXP等操作系統(tǒng),是今后幾年的應(yīng)用主流。
  Microsoft為設(shè)備驅(qū)動(dòng)程序的編寫提供了一些工具,如Windows Device Drivers Kit(簡(jiǎn)稱DDK),它包含了驅(qū)動(dòng)開發(fā)所需的各種類型的定義和內(nèi)核函數(shù)庫。如果直接使用DDK,開發(fā)者需要了解整個(gè)系統(tǒng)體系結(jié)構(gòu)和WDM規(guī)范,熟諳上千個(gè)DDK函數(shù)的功能和使用場(chǎng)合。用這種方法編制的驅(qū)動(dòng)程序有很高的運(yùn)行效率,但是開發(fā)難度大,測(cè)試流程繁瑣,一般用于有一定研發(fā)和生產(chǎn)需求的單位。
  為減輕開發(fā)者的負(fù)擔(dān),很多第三方廠商提供了輔助軟件。如Numega公司的DriverStudio軟件,它將DDK函數(shù)按照邏輯功能組織,把很多常用功能封裝成類,建立了一個(gè)基于C++語言的面向?qū)ο蟮木幊汰h(huán)境。開發(fā)者面對(duì)的不再是上千個(gè)復(fù)雜凌亂的DDK函數(shù),而是邏輯清晰的類庫,大大降低了開發(fā)難度和開發(fā)周期,獲得了廣泛的應(yīng)用。
  對(duì)于速度要求不高、實(shí)時(shí)性要求不嚴(yán)的場(chǎng)合, Jungo公司的Windriver[3]軟件提供了一種更加快速簡(jiǎn)潔的解決方案。它內(nèi)置一個(gè)名為Wdpnp.sys的通用核心態(tài)WDM驅(qū)動(dòng)程序,將一些基本的操作如存儲(chǔ)器讀寫、I/O端口讀寫、中斷服務(wù)、DMA操作等進(jìn)行了封裝,開發(fā)者只需編寫一個(gè)外殼程序來調(diào)用這個(gè)驅(qū)動(dòng)程序,就可以對(duì)硬件設(shè)備操作,如圖3所示,圖中灰色的部分表示W(wǎng)indriver已經(jīng)提供。

Windriver提供的驅(qū)動(dòng)程序經(jīng)過充分優(yōu)化,功能完備,在通用性和高效性之間做了很好的平衡。另外,Windriver專門為PLX公司的芯片開發(fā)了軟件包,因此非常適合在本方案中使用。
  Windriver啟動(dòng)后,會(huì)自行發(fā)現(xiàn)計(jì)算機(jī)上的所有即插即用設(shè)備,如圖4所示。其中“PCI:PLX PCI 9050 Target PCI Interface Chip”即指本卡。點(diǎn)擊“Generate.INF file‘按鈕可以生成INF文件,系統(tǒng)

用它提供的信息安裝Wdpnp.sys。

為方便在用戶態(tài)驅(qū)動(dòng)代碼中操作SJA1000 和PLX9052的寄存器,可以使用Windriver為已映射的存儲(chǔ)器地址命名,如圖5所示,圖中CAN_IR表示中斷寄存器,CAN_CR表示控制寄存器,等等。

Windriver的核心態(tài)驅(qū)動(dòng)程序內(nèi)置了中斷服務(wù)函數(shù),它的作用有兩個(gè):一是發(fā)送硬件清中斷指令,用戶在初始化階段告知Windriver如何清中斷(一般是對(duì)板卡上的某個(gè)寄存器進(jìn)行讀寫),由核心驅(qū)動(dòng)程序自動(dòng)完成。二是通知應(yīng)用程序有中斷到來,回調(diào)用戶程序的中斷響應(yīng)函數(shù)。
  用Windriver可以生成一個(gè)基于C語言的應(yīng)用程序函數(shù)庫,用戶通過這些庫函數(shù)控制內(nèi)核驅(qū)動(dòng)程序?,F(xiàn)以筆者編制的程序?yàn)槔M(jìn)行介紹,工程文件名取為CAN01。
  在初始化階段,先使用 WD_Open()打開驅(qū)動(dòng)程序,再用CAN01_Open()設(shè)置驅(qū)動(dòng)程序工作參數(shù),生成一個(gè)CAN01實(shí)例,最后用CAN01_IntEnable()設(shè)置用戶態(tài)中斷響應(yīng)函數(shù)。
  在退出應(yīng)用程序前,先清除所有未處理的中斷,釋放分配的內(nèi)存,再用CAN01_Close()刪除CAN01,最后使用WD_Close()關(guān)閉驅(qū)動(dòng)程序。
  對(duì)SJA1000和PLX9052的寄存器的操作通過兩個(gè)函數(shù)完成,可以實(shí)現(xiàn)CAN總線通信和數(shù)字量I/O等功能:
  讀操作CAN01_ReadByte(),
  寫操作CAN01_WriteByte()。
  本文根據(jù)筆者的實(shí)際經(jīng)驗(yàn),介紹了開發(fā)PCI總線擴(kuò)展卡的軟硬件流程,給出了一套快速可行的解決方案。該方案電路簡(jiǎn)單、調(diào)試方便、編程高效、可以使技術(shù)人員迅速掌握PCI總線的開發(fā)技術(shù),從而設(shè)計(jì)符合個(gè)性要求的多功能擴(kuò)展卡。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉