《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > CAN總線的PCI接口通信卡設(shè)計(jì)

CAN總線的PCI接口通信卡設(shè)計(jì)

2008-07-09
作者:高 強(qiáng), 任恩恩, 張 濤

??? 摘 要: 介紹了CAN總線的PCI接口通信卡的硬件電路和通信主控程序的設(shè)計(jì)以及驅(qū)動(dòng)程序的開(kāi)發(fā),,利用PCI接口芯片" title="接口芯片">接口芯片和雙口" title="雙口">雙口RAM以及微控制器實(shí)現(xiàn)工業(yè)現(xiàn)場(chǎng)總線CAN總線節(jié)點(diǎn)與工控機(jī)之間的通信,設(shè)備驅(qū)動(dòng)程序" title="設(shè)備驅(qū)動(dòng)程序">設(shè)備驅(qū)動(dòng)程序在實(shí)時(shí)嵌入式操作系統(tǒng)Vxworks下開(kāi)發(fā),。
??? 關(guān)鍵詞: PCI? CAN總線? CPLD? Vxworks

?

???CAN總線是目前最流行的工業(yè)現(xiàn)場(chǎng)總線之一,,而PCI總線是目前應(yīng)用最廣泛的一種高速同步總線,具有32bit寬度,,總線時(shí)鐘頻率為0~33MHz,,最大傳輸速率可達(dá)132MBps,廣泛應(yīng)用于數(shù)字圖形,、圖像,、語(yǔ)音處理以及高速數(shù)據(jù)實(shí)時(shí)采集與處理等領(lǐng)域。本設(shè)計(jì)利用通用PCI接口芯片PCI9052和微控制器AVR128輔以CPLD xc9536和雙口RAM實(shí)現(xiàn)CAN總線上各節(jié)點(diǎn)與工業(yè)控制計(jì)算機(jī)之間的通信,。
1 系統(tǒng)概述
?? PCI接口通信卡主要功能是完成上位機(jī)(工業(yè)控制計(jì)算機(jī))與CAN總線上各節(jié)點(diǎn)之間的信息和數(shù)據(jù)交換,。本設(shè)計(jì)通過(guò)PCI接口芯片將來(lái)自上位機(jī)的數(shù)據(jù)信息暫時(shí)保存于雙口RAM中,由單片機(jī)控制通過(guò)CAN控制器將這些信息數(shù)據(jù)下發(fā)給CAN總線上各個(gè)節(jié)點(diǎn),,同時(shí)CAN總線上各節(jié)點(diǎn)的狀態(tài)信息上傳" title="上傳">上傳給總線控制器,,由單片機(jī)控制將其送入雙口RAM中,再經(jīng)PCI接口上傳至上位機(jī)作進(jìn)一步數(shù)據(jù)處理分析,。整個(gè)過(guò)程可看作是數(shù)據(jù)的下發(fā)和上傳過(guò)程,。而CPLD完成對(duì)接口芯片、雙口RAM以及單片機(jī)三者之間的邏輯控制,、總線仲裁等任務(wù),。
2 硬件實(shí)現(xiàn)
2.1 硬件框圖及實(shí)現(xiàn)過(guò)程

?? 系統(tǒng)框圖如圖1所示。圖中,,PCI接口芯片采用PLX公司的PCI9052,該芯片實(shí)質(zhì)上是PCI總線與局部總線設(shè)備之間的橋梁,,以保證局部總線一端的設(shè)備在符合PCI 總線的規(guī)范時(shí)連接到PCI總線上。

????????????????????????????
?? 在設(shè)計(jì)中,,PCI9052的局部總線設(shè)計(jì)是較為復(fù)雜的環(huán)節(jié),。PCI9052內(nèi)部提供了兩種配置寄存器" title="配置寄存器">配置寄存器:PCI configuration registers 和local configuration registers。PCI9052本地端提供了26根地址線(27:2),、32根數(shù)據(jù)線和4根LBE線(可以翻譯成不同的地址線),,本卡用的LOCAL端是8位數(shù)據(jù),在這種模式下,,LBE1和LBE0提供地址線[1:0],。PCI配置寄存器提供了6個(gè)基地址寄存器,這些基地址是在系統(tǒng)中的物理地址,其中,,BASE1和BASE2都是用來(lái)訪問(wèn)LOCAL 配置寄存器的基地址,,BASE1是映射到內(nèi)存的基地址,BASE2是映射到I/O的基地址,,所以可以通過(guò)內(nèi)存和I/O來(lái)訪問(wèn)LOCAL 配置寄存器。BASE2~5四個(gè)空間提供了訪問(wèn)本地端所接的四個(gè)芯片,,它們將本地的芯片映射到系統(tǒng)的內(nèi)存或I/O口,。本設(shè)計(jì)使用的是內(nèi)存映射,如果本地端的芯片地址是0x0cc000,本卡設(shè)計(jì)中將此地址放入local配置寄存器的相應(yīng)位置space0,,同時(shí)配置此空間的大小,,這樣在PCI總線端,系統(tǒng)會(huì)根據(jù)這個(gè)大小分配相應(yīng)的內(nèi)存空間(或I/O空間)供PCI9052使用,,以映射LOCAL上所接的芯片,,且系統(tǒng)分配的內(nèi)存空間的信息會(huì)寫入PCI配置寄存器中,讀出即可,。PCI9052工作時(shí)需一片配置芯片EEPROM,,本設(shè)計(jì)中選用93CS46。EEPROM會(huì)在PCI卡上電的時(shí)候配置PCI9052,,主要配置PCI卡的vendorID和deviceID(實(shí)質(zhì)上是對(duì)該通信卡的標(biāo)識(shí))LOCAL端的四個(gè)space的LOCAL基地址和大小,,以及每個(gè)space的其他一些參數(shù)。
??? 在該通信卡中,,CPLD完成的主要功能包括:地址控制,、譯碼以及地址數(shù)據(jù)線的分離,雙口RAM操作權(quán)的獲取和釋放控制,。當(dāng)有信息數(shù)據(jù)從PCI接口下發(fā)時(shí),,CPLD的控制邏輯首先讓PCI9052 取得雙口RAM的控制權(quán)(在這之前,雙口RAM已映射為PCI9052的某一內(nèi)存空間),,數(shù)據(jù)存入雙口RAM的過(guò)程可看成對(duì)PCI本身內(nèi)存空間的操作,。數(shù)據(jù)下發(fā)完畢后,PCI9052則釋放控制權(quán),,由CPLD通知AVR128獲取雙口RAM控制權(quán),,AVR128與雙口RAM的連接采用地址數(shù)據(jù)復(fù)用方式,由CPLD控制其地址數(shù)據(jù)的分離,,AVR128將下發(fā)數(shù)據(jù)首先搬移至自己內(nèi)存空間,,并將這些數(shù)據(jù)按照CAN通信協(xié)議打包,從SJA1000發(fā)送至各節(jié)點(diǎn),。
??? 當(dāng)各種狀態(tài)信息數(shù)據(jù)從CAN 總線上各節(jié)點(diǎn)上傳時(shí),,其功能與數(shù)據(jù)下發(fā)過(guò)程中CPLD所起的作用基本相同,不過(guò)應(yīng)注意一個(gè)問(wèn)題:對(duì)于雙口RAM的操作,PCI9052和AVR128都有可能要執(zhí)行,。但雙口RAM的同一個(gè)地址單元不能同時(shí)進(jìn)行寫操作,,為解決地址競(jìng)爭(zhēng)問(wèn)題,需要CPLD附加上總線仲裁功能,。CAN總線上各節(jié)點(diǎn)的信息中有可能包括某節(jié)點(diǎn)的故障信息,,一般情況下,應(yīng)該是信息數(shù)據(jù)的上傳優(yōu)先,。采用VHDL語(yǔ)音較易實(shí)現(xiàn)該邏輯功能,。
2.2 地址空間分配問(wèn)題
??? 從整個(gè)系統(tǒng)來(lái)看,雙口RAM要同時(shí)映射為PCI9052和AVR128的內(nèi)存空間,,而AVR128要同時(shí)將雙口RAM和兩片SJA1000映射進(jìn)自己的可尋址空間,,所以:(1)在數(shù)據(jù)下發(fā)過(guò)程中又突然有數(shù)據(jù)上傳時(shí),應(yīng)由CPLD保證總線不沖突,。(2)映射到AVR128的可尋址空間的三塊地址,,最好分配時(shí)留有一定的間隔,以避免沖突,。
3 軟件設(shè)計(jì)
??? 軟件設(shè)計(jì)包括單片機(jī)數(shù)據(jù)收發(fā)主控程序設(shè)計(jì),、工控機(jī)的PCI總線設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)以及CPLD的邏輯控制程序設(shè)計(jì)。
3.1 設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)
??? 設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)是軟件設(shè)計(jì)中比較復(fù)雜的工作,。Vxworks中設(shè)備驅(qū)動(dòng)程序有查詢方式和中斷方式兩種,。中段方式下,事件發(fā)生是由中斷信號(hào)確定的,,在中斷信號(hào)沒(méi)有出現(xiàn)時(shí),,驅(qū)動(dòng)程序處于空閑狀態(tài);查詢方式下,,驅(qū)動(dòng)程序需生成一個(gè)任務(wù)不斷地查詢相關(guān)寄存器以確定事件的發(fā)生,。但無(wú)論在何種方式下,設(shè)備驅(qū)動(dòng)程序的基本流程是相同的,。首先應(yīng)獲取硬件接口參數(shù),,包括內(nèi)存映射地址、端口和系統(tǒng)中斷控制器的輸入(IRQ),。而獲取參數(shù)的方法由硬件接口方式?jīng)Q定PCI作為一種即插即用的總線結(jié)構(gòu),,在BIOS和操作系統(tǒng)支持下,可自動(dòng)為設(shè)備分配合適的硬件接口參數(shù),。本設(shè)計(jì)中基于PCI總線的系統(tǒng)采用內(nèi)存映射訪問(wèn)寄存器,,接口函數(shù)中實(shí)現(xiàn)中斷服務(wù)子程序,且該子程序不能有運(yùn)行時(shí)間過(guò)長(zhǎng)的代碼,,以避免死鎖而且應(yīng)該盡快返回,。驅(qū)動(dòng)程序框架如下:
??? //定義常量和全局變量
????????? #define VENDOR_ID xxx
??? //定義信息數(shù)據(jù)結(jié)構(gòu)
????????? Typedef struct xxx_info
???????? {
????????? UNIT pciBus,pciDevice
????????? Char irq;
    }XXX_INFO;
??? //獲取硬件接口參數(shù)
????????? Void xxxInit()
????????? {
????????? //利用PCIdeviceID,VavdorID及總線號(hào)功能號(hào)
???? //查找設(shè)備
????????? for ( i=0;i????????????? { if (pciFindDevice()=error)
??????????????????? {
???????????????????? 重新查找
???????????????????? }
??????????????? Else
???????????????????? {確定出映射到系統(tǒng)中的設(shè)備的基地址}
?????????????? }
?????????????? //確定設(shè)備的IRQ
??????????? pciConfigInbyte(busNo,deviceNo,funcNo,PCI_
????CFG_DEV_INT_LINE,&irq);?
?????????? }
?????? //中斷服務(wù)子程序
?????????? Void xxxIntr()
????????????????? {
       }
?????? //設(shè)備初始化子程序
??????????? {
????????????? //初始化設(shè)備
????????????? //連接中斷服務(wù)程序
3.2 單片機(jī)數(shù)據(jù)收發(fā)主控程序設(shè)計(jì)
??? 主控程序由兩大模塊構(gòu)成:上位機(jī)的控制信息數(shù)據(jù)的下發(fā)模塊和各節(jié)點(diǎn)的狀態(tài)信息數(shù)據(jù)的上傳模塊。整個(gè)通信功能的實(shí)現(xiàn)須嚴(yán)格按照CAN通信協(xié)議,兩大模塊均須完成與雙口RAM通信接口的初始化和SJA1000的初始化,。雙口RAM通信接口初始化指的是AVR128接到CPLD通知后獲取對(duì)雙口RAM的操控權(quán),,而SJA1000初始化需要將SJA1000的內(nèi)部寄存器編程,且須按如下順序初始化:檢測(cè)接口→復(fù)位→輸出模式及時(shí)鐘分頻設(shè)置→通信對(duì)象設(shè)置→波特率設(shè)置→命令寄存器及終端使能寄存器設(shè)置→退出復(fù)位→工作模式,。通信程序流程圖如圖2所示,。

???????????????????????????????
??? 本通信卡設(shè)計(jì)采用主流芯片及總線技術(shù),充分利用了PCI總線的優(yōu)點(diǎn),,使其能在工業(yè)控制以及數(shù)字領(lǐng)域得到廣泛應(yīng)用,。利用嵌入式技術(shù)的高性能、硬件電路采用的雙路邏輯,,并結(jié)合CAN總線的高可靠性及安全性,使工業(yè)控制設(shè)備的性能大為改善,。將該通信卡應(yīng)用于鐵路交通領(lǐng)域,、智能交通等的通信系統(tǒng)中,完全可滿足實(shí)時(shí)性以及安全可靠性的要求,,其應(yīng)用前景廣闊,。
參考文獻(xiàn)
[1] PLX Technology Inc. PCI9052 data book. 1997.
[2] Philips Semiconductors. SJA1000 Stand-alone CAN controller. 2000.
[3] Integrated Device Technology Inc. IDT7005. 1998.
[4] 姚利民,孫逢春.用雙端口RAM實(shí)現(xiàn)與PCI總線接口的數(shù)據(jù)通訊.電子技術(shù)應(yīng)用,,2006,32(8).
[5] 王軍,,燕永田,白海威.基于CAN 總線車站信號(hào)微機(jī)連鎖系統(tǒng)的實(shí)現(xiàn).鐵路計(jì)算機(jī)應(yīng)用,2001,(2).

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。