采用8位單片機驅動(dòng)PCI總線(xiàn)網(wǎng)卡的設計方案
單片機上網(wǎng)研究最多的一個(gè)方案就是用單片機驅動(dòng)ISA總線(xiàn)網(wǎng)卡或者是驅動(dòng)基于ISA總線(xiàn)的以太網(wǎng)控制芯片。但是,近年來(lái),隨著(zhù)ISA總線(xiàn)在臺式電腦上的消失(PC98以后的標準已經(jīng)取消了ISA總線(xiàn)),ISA總線(xiàn)的設備也不斷減少,而且很多生產(chǎn)ISA網(wǎng)卡芯片的廠(chǎng)家已經(jīng)停止生產(chǎn)ISA網(wǎng)卡芯片。在計算機上,多數設備用的是PCI總線(xiàn),因此如何制造低成本的PCI總線(xiàn)的以太網(wǎng)接口設備,如何用單片機來(lái)驅動(dòng)PCI總線(xiàn)網(wǎng)卡,已成為目前計算機工業(yè)控制系統的燃眉之急。然而用只有16位地址總線(xiàn)、8位數據端口的8位單片機來(lái)直接驅動(dòng)有32位地址數據復用總線(xiàn)及其他各種信號線(xiàn)的PCI總線(xiàn)網(wǎng)卡,幾乎是不可能的。
本文引用地址:http://dyxdggzs.com/article/201612/326346.htm為此,本文中采用PCI 9054接口芯片作為溝通單片機與PCI設備間的橋梁,設計實(shí)現了單片機與PCI網(wǎng)卡間的可靠通信任務(wù),并提供了主要硬件接口電路和主要程序原代碼。
1PCI9054芯片介紹[3]
1.1PCI9054主要特性
PCI9054是由美國PLX公司生產(chǎn)的先進(jìn)的PCI I/O加速器,他采用了先進(jìn)的PLX數據管道結構技術(shù)。符合PCIV2,2規范的32 位33 MHz總線(xiàn)主控接口控制器可獲得高達132 Mb/s的PCI突發(fā)傳輸速度。通用總線(xiàn)主控接口配備先進(jìn)的數據流水線(xiàn)架構(Data Pipe Architecture(tm)),包含2個(gè)DMA引擎,可編程目標、起始器數據傳輸模式和PCI信息傳輸等功能。
1.2PCI9054本地總線(xiàn)工作模式介紹
PCI9054芯片連接的本地端總線(xiàn)有3種工作模式:M模式、C模式和J模式??衫媚J竭x擇引腳加以選擇,其中C模式時(shí)序較為簡(jiǎn)單。為此,本方案設計選擇PCI 9054工作在C模式。當PCI9054工作在C模式時(shí),其數據傳輸采用直接數據傳輸方式,按數據傳輸的控制方式,他又分為3種傳輸模式,如表1所示。
本方案設計采用PCI初始化器模式,通過(guò)本地端的單片機來(lái)控制PCI9054芯片,然后通過(guò)PCI9054芯片來(lái)驅動(dòng)PCI總線(xiàn)上的網(wǎng)卡,在這里PCI9054芯片就象一個(gè)橋梁,連接了2個(gè)不同的總線(xiàn)設備。其讀寫(xiě)工作原理如圖1所示。
1.3PCI9054寄存器簡(jiǎn)介
PCI9054內部提供了5種寄存器:PCI配置寄存器,本地端配置寄存器,運行時(shí)間RUNTIME寄存器,DMA寄存器和I2O信息寄存器。在本方案設計中,我們主要用到2種配置寄存器:PCI配置寄存器和本地端配置寄存器,下面對這2種寄存器的功能做簡(jiǎn)要介紹。
PCI配置寄存器也就是我們常說(shuō)的PCI配置空間,他提供了配置PCI的一些信息。其中VenderID,DeviceID,RevisionID,HeaderType,ClassCode用于PCI設備的識別。命令寄存器(Command)包含設備控制位,包括允許存儲器讀寫(xiě)響應等。狀態(tài)寄存器(Status)用于記錄PCI總線(xiàn)的相關(guān)事件。PCI配置寄存器提供了6個(gè)基地址寄存器,這些基地址都是在系統中的物理地址范圍內,其中BASE0和BASE1都是用來(lái)訪(fǎng)問(wèn)其他配置寄存器的基地址,BASE1是其他配置寄存器映射到PCI端內存的基地址,BASE2是其他寄存器映射到PCI端I/O的基地址。所以可以通過(guò)PCI端內存和PCI端I/O來(lái)訪(fǎng)問(wèn)LOCAL配置寄存器與其他3種寄存器。BASE2~5四個(gè)空間提供了訪(fǎng)問(wèn)本地端所接的4個(gè)芯片(當然可以少于4個(gè)),他們將本地端的芯片通過(guò)本地端地址(在LOCAL配置寄存器中設)翻譯成PCI的地址,也就是將本地的芯片映射到系統的內存或I/O口。這樣使得用程序操作這一段內存(或I/O)實(shí)際上就是對本地的芯片操作。
本地端配置寄存器提供了本地端的一些信息,在本方案設計中,主要是通過(guò)配置本地端配置寄存器來(lái)將本地端的單片機讀寫(xiě)指令、周期轉換成PCI端的讀寫(xiě)指令及周期。也就相當于將PCI端網(wǎng)卡上的芯片及存儲器映射到本地端,與本地端的存儲器統一編址,這樣單片機只要能訪(fǎng)問(wèn)本地端的內存,那么就能用來(lái)訪(fǎng)問(wèn)PCI總線(xiàn)上的網(wǎng)卡。
PCI9054工作時(shí)需要一個(gè)配置芯片E?2PROM,以便在PCI卡上電的時(shí)候配置PCI 9054,主要配置PCI卡的VendorID和DeviceID,這是系統用來(lái)標識PCI卡的。另外,還需要了其他寄存器,主要起到了對PCI 9054初始化的作用。其中本地端寄存器也可以由本地CPU讀寫(xiě),直接進(jìn)行配置。
2RTL8029網(wǎng)卡簡(jiǎn)介
?RTL8029是符合Ne2000標準的32位PCI總線(xiàn)網(wǎng)卡,遵循IEEE802.3協(xié)議。按功能可將其劃分為:接收功能模塊、CRC產(chǎn)生模塊、發(fā)送功能模塊、地址識別模塊、FIFO控制模塊、協(xié)議邏輯陣列模塊及DMA和緩沖控制模塊。對網(wǎng)卡進(jìn)行編程可以實(shí)現局域網(wǎng)內任一站點(diǎn)間的通信。熟悉網(wǎng)卡接口電路是對網(wǎng)卡編程的首要條件。網(wǎng)卡接口電路功能可以分為2部分:一是與計算機PCI總線(xiàn)相連,包括數據總線(xiàn)讀寫(xiě)、地址總線(xiàn)驅動(dòng)、中斷控制信號的產(chǎn)生、存儲器讀寫(xiě)信號以及I/O端口信號的引入等;二是對網(wǎng)卡內部的操作,包括對緩沖SRAM的讀寫(xiě)、對RTL8029AS芯片的控制、讀站地址PROM及讀自舉ROM等。通過(guò)網(wǎng)卡工作原理的分析,可以將接口信號線(xiàn)減至最少。
以太網(wǎng)相當于一個(gè)鏈路層連接,因此可以把以太網(wǎng)的傳輸單元稱(chēng)為幀(Frame)。10 Mb以太網(wǎng)的Frame長(cháng)度為64~1 518 b。其格式如表2所示。
其中前導碼是網(wǎng)絡(luò )適配器發(fā)送MAC幀的時(shí)候為了使接收適配器辨別出MAC幀開(kāi)始而加入的碼,高層的用戶(hù)不必考慮。32位CRC,即冗余校檢碼,是以太網(wǎng)使用的校檢機制,現在CRC的生成與檢測都可以由網(wǎng)絡(luò )適配器完成,因此用戶(hù)也不必考慮這一字段。幀類(lèi)型,這一字段決定了以太網(wǎng)幀數據使用的是什么協(xié)議,如ARP是0x0806,IP是0x0800等。從另一個(gè)角度看,這一字段也可以看作以太網(wǎng)幀自己表明身份的字段。因此,在處理MAC幀時(shí),需要根據這一字段的數據來(lái)決定將數據傳送給哪個(gè)上層協(xié)議。在IEEE 802?3協(xié)議中,這一字段表示以太網(wǎng)數據的長(cháng)度。由于兩個(gè)協(xié)議在這一字段上的不同定義,所以網(wǎng)絡(luò )適配卡對這一字段是不做解釋的。程序員必須在軟件上編程處理這一字段。
3方案設計
(1)本方案設計的硬件結構如圖2所示。
系統中用到的主要芯片除了80C51單片機和PCI9054外還有MAX232(串口的電平轉換),24C02(I2C總線(xiàn)的E?2PROM),74HC373(8位鎖存),62256(32K的RAM),EPM7096(CPLD),93C46(E2PROM,用來(lái)初始化PCI9054)。其中62256(外部32K的RAM)可以不用,可以用網(wǎng)卡上的RAM來(lái)代替,但是網(wǎng)卡上的RAM的存取比較復雜,速度會(huì )比加62256慢。使用外部RAM的目的是提高單片機的數據傳輸速度和處理復雜的TCP/IP協(xié)議。由于以太網(wǎng)的數據包最大可以有1500多字節,80C51單片機是無(wú)法存儲這么大的包的,只有放到外部的RAM里。同時(shí)外部的RAM也用作串行口的輸入輸出緩沖,以使單片機具有高速的吞吐數據的能力。24C02是I2C總線(xiàn)的E2PROM,用來(lái)存儲用戶(hù)的一些設置,比如IP地址、網(wǎng)關(guān)等。本方案使用CPLD的目的是,將80C51單片機的8位數據與16位地址轉換成32位的數據和地址,因為PCI9054工作在初始化器模式時(shí),他要求本地端的總線(xiàn)是32位的。在這里,用CPLD實(shí)現這樣一個(gè)外部邏輯非常簡(jiǎn)單。MAX232為串口電平轉換電路。數據可以從串口輸入到單片機,單片機再把數據通過(guò)網(wǎng)卡傳出去。
(2) 軟件設計
對網(wǎng)卡編程就是對網(wǎng)絡(luò )接口控制芯片RTL8029AS中各種寄存器進(jìn)行編程控制,從而完成數據分組的正確發(fā)送和接收。所有單片機程序采用C51語(yǔ)言編制,具有可讀性強、移植性好、開(kāi)發(fā)周期短的特點(diǎn)。代碼的使用效率也比較高。
主程序可以分為PCI9054芯片初始化、網(wǎng)絡(luò )通訊和串行通訊2部分:PCI9054芯片初始化過(guò)程就是對PCI9054芯片的PCI端配置寄存器和本地端配置寄存器進(jìn)行正確的編程配置,以實(shí)現本地端單片機與PCI端網(wǎng)卡的無(wú)縫連接,對這2個(gè)寄存器既可以通過(guò)對93C46燒寫(xiě)編程的方式,也可以通過(guò)本地CPU直接編程的方式來(lái)完成初始化。網(wǎng)絡(luò )通訊過(guò)程又可分為網(wǎng)卡初始化、發(fā)送控制和接受控制3部分。主程序框圖如圖3所示。PCI9054芯片初始化過(guò)程就是對PCI9054芯片的相關(guān)寄存器進(jìn)行初始化,這些寄存器包括DMRR、DMLBAM、PCICR、CNTRL等。
(1) PCICR[2∶0]=111B。允許PCI初始化器(本地端)訪(fǎng)問(wèn)PCI總線(xiàn)。PCI9054能夠響應I/O訪(fǎng)問(wèn)。
(2) DMPBAM[1∶0]=11。允許PCI初始化器訪(fǎng)問(wèn)PCI9054存儲器和I/O端口。
(3) DMRR = FFF00000H。設定PCI初始化器端
(4) 可訪(fǎng)問(wèn)的存儲器范圍是1MB。
(5) DMLBAI = 40000000H。為PCI InitiatortoPCI I/O Configuration寄存器設定本地端基地址
(6) DMPBAM[1]=1。允許本地端I/O端口訪(fǎng)問(wèn)PCI InitiatortoPCI I/O Configuration寄存器
DMCFGA[23∶0]=005010,DMCFGA[31]=1。
網(wǎng)卡初始化過(guò)程對網(wǎng)卡的初始化就是對網(wǎng)卡相關(guān)寄存器進(jìn)行初始化。這些寄存器包括CR,DCR,RBCR PSTART,PSTOP,ISR,IMR,PAR0~PAR5,MAR0~MAR5D等。PSTART接收緩沖區的起始頁(yè)的地址。PSTOP接收緩沖區的結束頁(yè)地址(該頁(yè)不用于接收)。BNRY指向最后一個(gè)已經(jīng)讀取的頁(yè)(讀指針)CURR當前的接收結束頁(yè)地址(寫(xiě)指針)。
(1) CR=0x21:選擇頁(yè)0寄存器,將RTL8029芯片處于離線(xiàn)狀態(tài);
(2) DCR=0x8:32位內存訪(fǎng)問(wèn);
(3) RBCR0=0,RBCR1=0:遠程DMA操作時(shí)傳遞字節數清零;
(4) RCR=0xc0,接受到的幀存入緩沖區;
(5) TCR=oxe2:環(huán)路測試狀態(tài);
(6) PSTART=0x4C,PSTOP=0x80;構造緩沖區;
(7) ISR=0xff;中斷寄存器清零;
(8) CR=0x61:選擇頁(yè)1;
(9) 設置網(wǎng)卡地址PAR0~PAR5
(10) 設置多址寄存器MAR0~ MAR5;
(11) CURR=0x4d:初始化當前頁(yè)寄存器;
(12) TCR=0xE0:發(fā)送器正常工作狀態(tài)。
發(fā)送控制過(guò)程在網(wǎng)絡(luò )中,幀傳輸的過(guò)程就是發(fā)送方將待發(fā)送數據按幀格式要求封裝成幀,然后通過(guò)網(wǎng)卡發(fā)送到網(wǎng)絡(luò )的傳輸線(xiàn)上的工程。發(fā)送程序框圖如圖4所示。
接收控制過(guò)程幀的接收過(guò)程分為2步[3]:
第1步有本地DMA將幀存入接收緩沖區中;
第2步由遠程DMA將接收緩沖區中的幀讀入內存。即將網(wǎng)絡(luò )上的數據幀接收并存在網(wǎng)卡的接收緩沖區中,然后由主機程序將緩存區中的幀讀走并存入內存中。幀的接收工作由網(wǎng)卡自動(dòng)完成,只需對相關(guān)的寄存器和PSTART,PSTOP,CURR和BNRY進(jìn)行適當的初始化即可。幀讀入之前,必須初始化相應的寄存器RSAR,RBCR,然后再啟動(dòng)遠程DMA讀操作和主機程序的讀端口操作。為了獲得數據長(cháng)度,先讀入18 B的數據,然后根據有效數據的長(cháng)度將幀完整的讀入。啟動(dòng)遠程DMA讀操作,應該令CR=0AH,遠程DMA將從接收緩沖區的DMA地址處讀入1 B并送往I/O數據端口,由主機程序讀入內存。
這一過(guò)程將一直持續到RBCR寄存器為0。
4結語(yǔ)
本文提出了一種用8位單片機80C51和PCI總線(xiàn)主控I/O加速器芯片9054來(lái)驅動(dòng)PCI總線(xiàn)網(wǎng)卡,實(shí)現RS232串行設備與以太網(wǎng)的連接以傳送控制信令和數據文件,實(shí)現單片機上網(wǎng)的設計方案,設計了相關(guān)硬件,編制了相應的驅動(dòng)程序。整個(gè)方案結構簡(jiǎn)單,實(shí)現方便,縮短了開(kāi)發(fā)周期,降低了系統開(kāi)發(fā)成本。
評論