PCI接口擴展卡的快速開發方案
發布時間:2007/8/20 0:00:00 訪問次數:645
摘要:介紹了PCI總線擴展卡的設計思路和方法,并結合一個多功能CAN通信I/O卡的設計實例,介紹了PCI總線擴展卡的軟硬件設計流程,給出了一套快速可行的解決方案。
關鍵詞:PCI總線 PLX9052 設備驅動程序 Windriver
隨著計算機和控制技術的不斷發展,很多工程人員都選用PC機作為控制系統的操作平臺。為了能夠和外部設備通信,PC機上提供了外置的USB、串口、并口及內置的ISA、PCI等接口。PCI總線接口速度快,系統占用率低,有完備的即插即用(PnP)管理體制,是目前計算機插卡式外設總線的事實標準。
筆者設計了一塊PCI總線多功能CAN通信I/O卡,可以完成數字量I/O、CAN總線通信的功能。本文將根據筆者的實際經驗,介紹PCI接口擴展卡的軟硬件設計流程和一種快速開發方案。
1 PCI總線簡介
PCI總線標準由PCISIG(PCI Special Interest Group)制定,該組織的成員有Intel、IBM、DEC等公司。目前PC機中使用的PCI總線標準主要以PCI2.0為主,其頻率為33MHz,字寬為32bit,電源電壓為5V。新版的PCI標準向下兼容,并支持66MHz時鐘,字寬為64bit,電壓為3.3V。
PCI總線是一種時分復用的雙向應答總線,傳輸發起方稱為主設備,接收方稱為從設備。主設備用RFAME信號指示,從設備拉低它的DEVSEL線來表示響應傳輸請求。PCI總線的數據傳輸以幀為單位,每次傳輸由一個地址周期(Address Phase)和多個數據周期(Data Phase)組成,如圖1所示。AD0~AD31首先給出本次傳輸的首地址,后面緊跟一個或多個32位(4字節)寬的數據,多個數據的地址自動遞增。在地址周期,C/BE0~C/BE3這四根線的不同組合指示出在AD0~AD31上將要進行何種類型的操作,如C/BE0~C/BE3=0110表示存儲器讀,C/BE0~C/BE3=0011表示I/O寫。在數據周期,C/BE0~BE3對應AD0~AD31上四個字節的使能。IRDY和TRDY分別表示主設備準備好和從設備準備好。在傳輸過程中,只有IRDY和TRDY同時有效,傳輸才能繼續;否則插入等待周期,用于在不同速度的設備之間協調工作。
計算機的接口卡一般會用到I/O端口、存儲器空間、中斷及DMA等計算機資源。傳統ISA接口卡通過更改跳線來避免多塊卡之間的資源沖突,PCI接口卡則摒棄了硬件跳線,由軟件統籌分配資源,這被稱為即插即用。為實現此功能,PCI協議除了可以對I/O空間、存儲器空間讀寫外,還定義了對配置空間的讀寫(C/BE0~C/BE3=1010、1011)。所謂配置空間,是指映射到每塊接口卡上的256字節的特殊功能寄存器。設計者事先在配置空間的指定位置寫入需要申請使用的資源量,主板上電后,由PnP-Bios讀取各卡的配置空間,對它們所需的資源進行統籌分配,再將分配結果寫回對應的配置空間地址,完成自動配置。
2 PCI接口卡的硬件設計及調試
以筆者設計的PCI卡為例,使用SJA1000實現CAN總線通信功能,需要映射32字節的存儲器空間和一個中斷資源,在功能上屬于PCI從設備(Target-only Device)。SJA1000的對外接口電路可以直接與Intel8051、8096及ISA總線連接,但是不能與PCI總線直接連接,因此需要設備用于邏輯轉換的接口電路。
PCI接口電路的設計一般有兩類方法:一類是使用FPGA/CPLD等可編程器件開發邏輯轉換電路。根據實現功能的多少,所需的等效門密度約為5000~15000門,可自行編程或者購買已有“軟核”(IPCORE)的產品實現;另一類是使用標準接口芯片對PCI總線邏輯信號解碼。第一種方法開發成本高、難度大、周期長、測試設備昂貴,但是批量生產成本很低,適合大規模全定制或半定制ASIC的生產。第二種方法相對簡單、開發周期短、性價比合理,適合本方案采用。市場上的接口芯片供應商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052價格便宜、供貨渠道暢通、功能適用,因此這里選用PLX9052。
采用PLX9052的接口卡在邏輯上可分成三個功能模塊:PCI接口部分、EEPROM部分和局部總線部分,如圖2所示。
PLX9052提供完備的PCI從設備支持,PCI接口部分的47根信號線可以直接與PCI連接器(俗稱金手指)連接。PCI連接器上有兩根特殊的引線PRSNT1#和PRSNT2#,它們不參與PCI協議操作,只用來告知主板該卡消耗的電功率。
PLX9052將PCI總線上的操作轉換為對局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對SJA1000的寄存器進行訪問。舉例來說,如果系統上電后分配給本卡的存儲器地址空間為F680 0000~F680 001F,那么當系統通過PCI總線訪問這個區域時,PLX9052會應答,并將其轉換為局部地址0x0000~0x001F,對應于SJA1000的32個內部寄存器。另外,PLX9052自身也有一些內部寄存器,它們被自動映射到另一片內存區域,可通過PCI總線直接訪問。
PLX9052提供三種類
摘要:介紹了PCI總線擴展卡的設計思路和方法,并結合一個多功能CAN通信I/O卡的設計實例,介紹了PCI總線擴展卡的軟硬件設計流程,給出了一套快速可行的解決方案。
關鍵詞:PCI總線 PLX9052 設備驅動程序 Windriver
隨著計算機和控制技術的不斷發展,很多工程人員都選用PC機作為控制系統的操作平臺。為了能夠和外部設備通信,PC機上提供了外置的USB、串口、并口及內置的ISA、PCI等接口。PCI總線接口速度快,系統占用率低,有完備的即插即用(PnP)管理體制,是目前計算機插卡式外設總線的事實標準。
筆者設計了一塊PCI總線多功能CAN通信I/O卡,可以完成數字量I/O、CAN總線通信的功能。本文將根據筆者的實際經驗,介紹PCI接口擴展卡的軟硬件設計流程和一種快速開發方案。
1 PCI總線簡介
PCI總線標準由PCISIG(PCI Special Interest Group)制定,該組織的成員有Intel、IBM、DEC等公司。目前PC機中使用的PCI總線標準主要以PCI2.0為主,其頻率為33MHz,字寬為32bit,電源電壓為5V。新版的PCI標準向下兼容,并支持66MHz時鐘,字寬為64bit,電壓為3.3V。
PCI總線是一種時分復用的雙向應答總線,傳輸發起方稱為主設備,接收方稱為從設備。主設備用RFAME信號指示,從設備拉低它的DEVSEL線來表示響應傳輸請求。PCI總線的數據傳輸以幀為單位,每次傳輸由一個地址周期(Address Phase)和多個數據周期(Data Phase)組成,如圖1所示。AD0~AD31首先給出本次傳輸的首地址,后面緊跟一個或多個32位(4字節)寬的數據,多個數據的地址自動遞增。在地址周期,C/BE0~C/BE3這四根線的不同組合指示出在AD0~AD31上將要進行何種類型的操作,如C/BE0~C/BE3=0110表示存儲器讀,C/BE0~C/BE3=0011表示I/O寫。在數據周期,C/BE0~BE3對應AD0~AD31上四個字節的使能。IRDY和TRDY分別表示主設備準備好和從設備準備好。在傳輸過程中,只有IRDY和TRDY同時有效,傳輸才能繼續;否則插入等待周期,用于在不同速度的設備之間協調工作。
計算機的接口卡一般會用到I/O端口、存儲器空間、中斷及DMA等計算機資源。傳統ISA接口卡通過更改跳線來避免多塊卡之間的資源沖突,PCI接口卡則摒棄了硬件跳線,由軟件統籌分配資源,這被稱為即插即用。為實現此功能,PCI協議除了可以對I/O空間、存儲器空間讀寫外,還定義了對配置空間的讀寫(C/BE0~C/BE3=1010、1011)。所謂配置空間,是指映射到每塊接口卡上的256字節的特殊功能寄存器。設計者事先在配置空間的指定位置寫入需要申請使用的資源量,主板上電后,由PnP-Bios讀取各卡的配置空間,對它們所需的資源進行統籌分配,再將分配結果寫回對應的配置空間地址,完成自動配置。
2 PCI接口卡的硬件設計及調試
以筆者設計的PCI卡為例,使用SJA1000實現CAN總線通信功能,需要映射32字節的存儲器空間和一個中斷資源,在功能上屬于PCI從設備(Target-only Device)。SJA1000的對外接口電路可以直接與Intel8051、8096及ISA總線連接,但是不能與PCI總線直接連接,因此需要設備用于邏輯轉換的接口電路。
PCI接口電路的設計一般有兩類方法:一類是使用FPGA/CPLD等可編程器件開發邏輯轉換電路。根據實現功能的多少,所需的等效門密度約為5000~15000門,可自行編程或者購買已有“軟核”(IPCORE)的產品實現;另一類是使用標準接口芯片對PCI總線邏輯信號解碼。第一種方法開發成本高、難度大、周期長、測試設備昂貴,但是批量生產成本很低,適合大規模全定制或半定制ASIC的生產。第二種方法相對簡單、開發周期短、性價比合理,適合本方案采用。市場上的接口芯片供應商有PLX、AMCC、TI等公司。其中,PLX公司的接口芯片PLX9052價格便宜、供貨渠道暢通、功能適用,因此這里選用PLX9052。
采用PLX9052的接口卡在邏輯上可分成三個功能模塊:PCI接口部分、EEPROM部分和局部總線部分,如圖2所示。
PLX9052提供完備的PCI從設備支持,PCI接口部分的47根信號線可以直接與PCI連接器(俗稱金手指)連接。PCI連接器上有兩根特殊的引線PRSNT1#和PRSNT2#,它們不參與PCI協議操作,只用來告知主板該卡消耗的電功率。
PLX9052將PCI總線上的操作轉換為對局部總線的操作,即通過LAD0~LAD7、RD、WR、CS等對SJA1000的寄存器進行訪問。舉例來說,如果系統上電后分配給本卡的存儲器地址空間為F680 0000~F680 001F,那么當系統通過PCI總線訪問這個區域時,PLX9052會應答,并將其轉換為局部地址0x0000~0x001F,對應于SJA1000的32個內部寄存器。另外,PLX9052自身也有一些內部寄存器,它們被自動映射到另一片內存區域,可通過PCI總線直接訪問。
PLX9052提供三種類
上一篇:修復硬盤主引導記錄
上一篇:讓KTV的音響系統穩定的運行