LPC2294是PHILIPS公司推出的一款功能強大,、超低功耗且具有ARM7TDMI內(nèi)核的32位微控制器。它具有豐富的片上資源,,完全可以滿足一般的工業(yè)控制需要,,同時還可以減少系統(tǒng)硬件設(shè)計的復(fù)雜度,提高系統(tǒng)的穩(wěn)定性,。
CAN(“Controller Area Network”)總線控制器局域網(wǎng)是一種能有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),。CAN總線以其高性能、高可靠性,、廉價等特性,,越來越受到人們的重視和青睞。為了有效的管理工業(yè)現(xiàn)場的CAN節(jié)點,,充分發(fā)揮CAN總線的性能,,通信卡的設(shè)計與研究十分必要。但目前市場上類似產(chǎn)品存在著兩點不足,。
首先是一般工業(yè)現(xiàn)場中可能擁有不止1條CAN總線,,而目前設(shè)計的通信卡上的CAN的接口太少,因而會給設(shè)備的集中管理帶來困難,。
二是目前兩條CAN網(wǎng)段問的通信主要通過一對一CAN總線網(wǎng)橋來實現(xiàn),,但這種方式解決不了工業(yè)現(xiàn)場中同時在幾條CAN網(wǎng)段問傳輸數(shù)據(jù)的需求,,也容易導(dǎo)致組網(wǎng)混亂。
為此,,本設(shè)計選用的ARM控制器LPC2294內(nèi)部集成有四路CAN控制器,,完全符合CAN規(guī)范CAN2.0B標(biāo)準(zhǔn)和ISO11989-1標(biāo)準(zhǔn)。全局驗收過濾器可識別幾乎所有總線的11位和29位Rx標(biāo)識符,。作為本設(shè)計的核心部件,,LPC2294的使用能夠很好地解決上述2個問題,它不僅能擔(dān)起主控制器的工作,,同時還可作為CAN網(wǎng)絡(luò)的數(shù)據(jù)傳輸控制器,,來與網(wǎng)絡(luò)中的節(jié)點實現(xiàn)數(shù)據(jù)交換。
1 硬件設(shè)計方案
目前計算機的發(fā)展,,除了少數(shù)專門的工控機還在使用ISA總線以外,,PC機上使用最為普遍的就是PCI總線了。PCI總線是Intel公司推出的一種高性能32/64位PC機局部總線,,可能同時支持多組外圍沒備而不受制于處理器,,其數(shù)據(jù)吞吐量很大(33 MHz總線頻率、32位傳輸時,,其峰值可高達132 MB/s),,PCI總線依靠其優(yōu)越的性能必將取代ISA總線。因此,,本文基于PCI總線來設(shè)計一個帶有4個CAN總線網(wǎng)段的智能通信卡,。圖1是該通信卡的整體硬件結(jié)構(gòu)圖。
1.1 PCI總線接口的實現(xiàn)
PCI總線具有非常嚴(yán)格的規(guī)范,,也具有良好的兼容性,。但是PCI總線協(xié)議也比較復(fù)雜。本設(shè)計選用專用的PCI總線接口芯片PCI9030來實現(xiàn)網(wǎng)關(guān)的PCI總線接口,。PCI9030是PLX公司開發(fā)的低價格PCI總線從模式接口芯片,。該芯片功耗低,符合PCI2.2規(guī)范,,用戶設(shè)計時只需考慮局部總線一側(cè)的邏輯控制電路和用于配置的外部EEP-ROM,,而不必考慮PCI協(xié)議的具體實現(xiàn)方法,,這樣就大大簡化了設(shè)計難度,,縮短了開發(fā)周期。
PCI9030要求有一塊EEPROM作為初始化存儲器,。在系統(tǒng)加載時,,PCI9030先從該EEPROM中加載初始數(shù)據(jù),進行初始設(shè)置,,因此,,EEP-ROM中的信息是否正確決定了PCI卡的加載和運行是否正常,。本設(shè)計選用ST93CS56作為PCI9030的初始化存儲器,其結(jié)構(gòu)方案如圖2所示,。
1.2 CAN總線接口的實現(xiàn)
該通信卡中CAN總線接口部分實現(xiàn)有以下兩種常用的方法:
(1) 獨立CAN總線控制芯片實現(xiàn)
即采用飛利浦公司的SJA1000獨立CAN控制器來實現(xiàn)CAN協(xié)議,。這種方法的優(yōu)點是能實現(xiàn)較復(fù)雜的功能,靈活性也不錯,,但由于它是獨立的控制器,,設(shè)計通信卡擁有4個CAN網(wǎng)段就需要4片SJA1000,這樣會造成資源冗余,,系統(tǒng)會比較龐大,,而且穩(wěn)定性也會受影響,設(shè)計難度也較大,。
(2) 帶CAN接口的微控制器實現(xiàn)
該方法具有代表性的有飛利浦公司的ARM芯片LPC2294,,它集成有4路片上CAN總線控制器,能很方便地實現(xiàn)多路CAN總線接口,,減小系統(tǒng)規(guī)模,,提高系統(tǒng)穩(wěn)定性。
比較上述兩種方法,,在傳統(tǒng)的SJA1000中,,接收過濾只能滿足一些規(guī)律性較高的ID篩選過濾,或?qū)€數(shù)較少的ID (一般小于10~15個)進行任意篩選過濾,,而難以實現(xiàn)更復(fù)雜的任意ID進行篩選過濾,,這無疑增加了系統(tǒng)軟件設(shè)計及運行負擔(dān)。
而第二種設(shè)計方法相對較為簡便,。由于LPC2294微控制器中為所有CAN控制器提供了全局的接收標(biāo)識符查詢功能,,因而能容易地設(shè)計較復(fù)雜的ID接收過濾,其工作的重點主要在ARM芯片的軟件設(shè)計上,。本文采用第二種方法來實現(xiàn)CAN總線接口,,并采用PCA82C250作為CAN總線驅(qū)動器,同時將6N137連入CAN控制器和CAN驅(qū)動器之間以降低CAN總線對網(wǎng)關(guān)卡的電磁干擾,。圖3所示是LPC2294中一個CAN接口的連接圖,,其它接口與之類似。
1.3 微控制器與PCI9030之間的硬件接口設(shè)計
微控制器與PCI9030之間的硬件設(shè)計是該通信卡的核心控制部分,。本設(shè)計采用ALTERA公司的FPGA EPlC6來實現(xiàn)微控制器與PCI9030之間的接口,。EPlC6是ALTERA公司的一款FPGA芯片,它內(nèi)部集成了20塊128×36 bits的RAM模塊,,可以方便地將它編程為所需要的“雙口RAM”,,然后將上行數(shù)據(jù)(CAN節(jié)點發(fā)往PC機的數(shù)據(jù))和下行數(shù)據(jù)(PC機發(fā)往CAN節(jié)點的數(shù)據(jù))通過該“雙口RAM”緩存轉(zhuǎn)發(fā)。由于EPlC6擁有豐富的I/O口,,故可靈活選擇數(shù)據(jù)格式(32位/16位/8位)以及傳輸方法,,本文采用16位復(fù)用傳輸模式,。
EPlC6還要編程實現(xiàn)PCI9030與ARM之間的邏輯控制時序轉(zhuǎn)換。由于PCI9030與ARM的控制信號不完全一致,,所以需要進行邏輯控制時序轉(zhuǎn)換,。同時,本文PCI9030的局部總線一側(cè)采用的是地址/數(shù)據(jù)復(fù)用模式,,而ARM控制器采用的是非復(fù)用模式,,因此也需要EPlC6進行模式轉(zhuǎn)換:在PCI9030的地址周期內(nèi)可利用LALE將16位地址鎖存到EPlC6內(nèi)部寄存器,等到PCI9030的數(shù)據(jù)周期來臨時,,再與數(shù)據(jù)一起送到ARM的地址口與數(shù)據(jù)口上,,以方便ARM取用。
2 軟件設(shè)計
2.1 通信卡軟件設(shè)計
通信卡上的軟件主要指的是ARM控制器上的軟件程序,。本文選用ARM控制器LPC2294來實現(xiàn)智能數(shù)據(jù)傳輸路徑選擇,。LPC2294是通信卡的控制核心。它集成有4路CAN控制器,,每個CAN控制器都與獨立CAN控制器SJA1000有著相似的寄存器結(jié)構(gòu),,它只是對器件寄存器訪問由原來的8bit字節(jié)訪問轉(zhuǎn)變?yōu)榱?2 bit的雙字訪問。LPC2294可實現(xiàn)CAN網(wǎng)段與上位機之間的數(shù)據(jù)傳輸控制(包括上行數(shù)據(jù)傳輸和下行數(shù)據(jù)傳輸)以及不同CAN網(wǎng)段間的數(shù)據(jù)傳輸控制(平行數(shù)據(jù)傳輸),。
LPC2294為所有CAN控制器提供了全局接收標(biāo)識符查詢功能,。它包含一個512×32 (2 k字節(jié))的RAM,可通過軟件處理在RAM中存放1~5個標(biāo)識符表格,。整個接收濾波RAM可容納1024個標(biāo)準(zhǔn)標(biāo)識符或512個擴展標(biāo)識符,,或兩種類型的混合標(biāo)識符。由于允許的表格范圍有2 k字節(jié),,故能容易地滿足復(fù)雜的ID接收過濾要求,。LPC2294在FullCAN模式下能自動接收并選定網(wǎng)段的標(biāo)準(zhǔn)幀,但本文不采用FullCAN模式,。
若在EPlC6的“雙口RAM”中設(shè)置一個狀態(tài)與控制寄存器組(SOR),,那么,上位機便可通過訪問該寄存器組查詢通信卡的運行狀態(tài),。為了有效管理數(shù)據(jù)傳輸,,防止傳輸過程中的數(shù)據(jù)丟失,本設(shè)計在ARM內(nèi)部的靜態(tài)RAM區(qū)開辟了一個全局?jǐn)?shù)據(jù)收發(fā)緩存區(qū)(GRTB),,其示意圖如圖4所示,。
圖4中,對于標(biāo)準(zhǔn)幀來說,,它只有11位標(biāo)識符,,因此,,圖中的標(biāo)識符字節(jié)3和4保留不用,。而幀格式用來區(qū)別此幀是標(biāo)準(zhǔn)幀(0)還是擴展幀(1),。當(dāng)RTR為1時,表示此幀是遠程幀,。圖中的源段號和目的段號用于表明此幀來自哪個網(wǎng)段以及將要送往哪個網(wǎng)段(此處將上位機也作為其中一段來處理),。DLC表明傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)目。
2.2 通信卡的運行流程
系統(tǒng)上電復(fù)位后,,系統(tǒng)將首先運行初始化程序,。LPC2294的初始化主要是初始化全局接收和發(fā)送緩沖區(qū)以及清除狀態(tài)寄存器中的值等;PCI9030的初始化主要是從EEPROM中加載初始數(shù)據(jù)以進行初始設(shè)置,,CAN初始化包括設(shè)置模式,、總線時序、中斷使能,、標(biāo)識符表格,,這些設(shè)置均可通過給CAN芯片的內(nèi)部寄存器賦值來實現(xiàn)。初始化成功之后,,通信卡將進行自檢,,并在確定啟動正常之后進入工作狀態(tài)。這一部分的程序流程圖如圖5的A部分所示,。
系統(tǒng)進入工作狀態(tài)后(圖5中的B部分)將等待中斷產(chǎn)生,,如有,則進人相應(yīng)的中斷服務(wù)程序,。如果是數(shù)據(jù)傳輸,,則轉(zhuǎn)入數(shù)據(jù)傳輸子程序,數(shù)據(jù)傳輸子程序主要包括3個部分:
(1) 下行數(shù)據(jù)傳輸
下行數(shù)據(jù)傳輸指的是上位機向CAN網(wǎng)段發(fā)送數(shù)據(jù),。即上位機把數(shù)據(jù)寫入到“雙口RAM”中以等待LPC2294將數(shù)據(jù)取走,。LPC2294將上位機發(fā)來的數(shù)據(jù)暫時存放在全局?jǐn)?shù)據(jù)收發(fā)緩存區(qū)(GRTB)中,然后檢查匹配的目的段是否有空閑的發(fā)送區(qū)(CANSR中的TBS位為1),,若有則將數(shù)據(jù)分別寫入每個網(wǎng)段的發(fā)送區(qū)并發(fā)送,。如果匹配網(wǎng)段的3個發(fā)送緩沖器全為忙,則循環(huán)等待,,直到有一個以上的發(fā)送緩沖器為空再進行發(fā)送,。
(2) 上行數(shù)據(jù)傳輸
上行數(shù)據(jù)傳輸指的是CAN網(wǎng)段向上位機發(fā)送數(shù)據(jù)。當(dāng)程序檢測到某個網(wǎng)段X的CAN中斷/捕獲寄存器(CANICR)中的接收中斷位(RI)置位后,,它將進入接收中斷服務(wù)程序,。此時程序?qū)⒌綐?biāo)識符表格中查找匹配的標(biāo)識符,CAN控制器會在接收時自動搜索接收濾波器的RAM中的表格并進行匹配,,只要找到匹配值則產(chǎn)生接收中斷并通知用戶保留信息,,否則自動放棄這一幀信息而不產(chǎn)生接收中斷,如果它只找到一個匹配值(源網(wǎng)段中),,則說明此數(shù)據(jù)是只傳輸給上位機的,,此時程序會將接收到的數(shù)據(jù)信息按上面介紹的格式保存到全局?jǐn)?shù)據(jù)收發(fā)緩沖區(qū)(GRTB),,以等待LPC2294將其發(fā)送給EPlC6的“雙口RAM”,以便上位機讀取,。
(3) 平行數(shù)據(jù)傳輸
當(dāng)出現(xiàn)接收中斷時,,程序也會到標(biāo)識符表格中查找匹配的標(biāo)識符,如果找到一個以上的匹配值,,則說明還有其他網(wǎng)段需要這些數(shù)據(jù),。此時程序會將接收到的數(shù)據(jù)信息讀入到全局?jǐn)?shù)據(jù)收發(fā)緩沖區(qū)(GRTB)中去,然后把數(shù)據(jù)發(fā)往匹配網(wǎng)段,。
在調(diào)用相應(yīng)的數(shù)據(jù)傳輸子程序后,,程序?qū)⒅脴?biāo)志位并返回。如果是其它一些中斷,,則轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序,。若沒有中斷產(chǎn)生,則檢查PC機是否有參數(shù)配置需要,,最后進行系統(tǒng)自檢,。本系統(tǒng)會在系統(tǒng)閑暇時進行自檢并上傳狀態(tài)報表,這樣可以使用戶隨時了解通信卡的工作情況,,對于提高系統(tǒng)的工作可靠性以及出現(xiàn)故障時的查錯效率具有重要的意義,。
2.3 上位機程序設(shè)計
本設(shè)計中,上位機軟件設(shè)計程序主要包括通信卡底層驅(qū)動程序和用戶服務(wù)程序,。其設(shè)計框圖圖6所示,。
通信卡底層驅(qū)動程序的功能主要是配置CAN總線接口、收發(fā)CAN總線上的數(shù)據(jù),、對CAN總線進行實時監(jiān)測,、執(zhí)行用戶程序的收發(fā)命令等。CAN總線和PCI總線錯誤均采用中斷處理,,并通過事件(Event)內(nèi)核對象直接通知給用戶程序,。
PCI的用戶服務(wù)程序則通過PCI通信程序與系統(tǒng)PCIDI (PCI device interface)進行通信,并由系統(tǒng)完成PCI協(xié)議的處理與數(shù)據(jù)傳輸,。用戶可以在設(shè)計好的上位機界面上方便的設(shè)定節(jié)點參數(shù),,查詢節(jié)點狀態(tài)信息。
3 結(jié)束語
本文設(shè)計的CAN/PCI智能通信卡采用功能強大的ARM芯片LPC2294作為核心控制芯片,,因此,,該通信卡能夠同時處理4路CAN總線向上位機的數(shù)據(jù)傳輸。對于CAN網(wǎng)段之間的通信需求,,本通信卡也能夠很好地滿足,,并可使工業(yè)現(xiàn)場的CAN網(wǎng)絡(luò)組網(wǎng)更為簡單。