基于ARM控制器LPC2294的CAN/PCI智能通信卡設計
LPC2294是PHILIPS公司推出的一款功能強大、超低功耗且具有ARM7TDMI內核的32位微控制器。它具有豐富的片上資源,完全可以滿足一般的工業控制需要,同時還可以減少系統硬件設計的復雜度,提高系統的穩定性。
本文引用地址:http://www.j9360.com/article/163617.htmCAN(“Controller Area Network”)總線控制器局域網是一種能有效支持分布式控制或實時控制的串行通信網絡。CAN總線以其高性能、高可靠性、廉價等特性,越來越受到人們的重視和青睞。為了有效的管理工業現場的CAN節點,充分發揮CAN總線的性能,通信卡的設計與研究十分必要。但目前市場上類似產品存在著兩點不足。
首先是一般工業現場中可能擁有不止1條CAN總線,而目前設計的通信卡上的CAN的接口太少,因而會給設備的集中管理帶來困難。
二是目前兩條CAN網段問的通信主要通過一對一CAN總線網橋來實現,但這種方式解決不了工業現場中同時在幾條CAN網段問傳輸數據的需求,也容易導致組網混亂。
為此,本設計選用的ARM控制器LPC2294內部集成有四路CAN控制器,完全符合CAN規范CAN2.0B標準和ISO11989-1標準。全局驗收過濾器可識別幾乎所有總線的11位和29位Rx標識符。作為本設計的核心部件,LPC2294的使用能夠很好地解決上述2個問題,它不僅能擔起主控制器的工作,同時還可作為CAN網絡的數據傳輸控制器,來與網絡中的節點實現數據交換。
1 硬件設計方案
目前計算機的發展,除了少數專門的工控機還在使用ISA總線以外,PC機上使用最為普遍的就是PCI總線了。PCI總線是Intel公司推出的一種高性能32/64位PC機局部總線,可能同時支持多組外圍沒備而不受制于處理器,其數據吞吐量很大(33 MHz總線頻率、32位傳輸時,其峰值可高達132 MB/s),PCI總線依靠其優越的性能必將取代ISA總線。因此,本文基于PCI總線來設計一個帶有4個CAN總線網段的智能通信卡。圖1是該通信卡的整體硬件結構圖。
1.1 PCI總線接口的實現
PCI總線具有非常嚴格的規范,也具有良好的兼容性。但是PCI總線協議也比較復雜。本設計選用專用的PCI總線接口芯片PCI9030來實現網關的PCI總線接口。PCI9030是PLX公司開發的低價格PCI總線從模式接口芯片。該芯片功耗低,符合PCI2.2規范,用戶設計時只需考慮局部總線一側的邏輯控制電路和用于配置的外部EEP-ROM,而不必考慮PCI協議的具體實現方法,這樣就大大簡化了設計難度,縮短了開發周期。
PCI9030要求有一塊EEPROM作為初始化存儲器。在系統加載時,PCI9030先從該EEPROM中加載初始數據,進行初始設置,因此,EEP-ROM中的信息是否正確決定了PCI卡的加載和運行是否正常。本設計選用ST93CS56作為PCI9030的初始化存儲器,其結構方案如圖2所示。
1.2 CAN總線接口的實現
該通信卡中CAN總線接口部分實現有以下兩種常用的方法:
(1) 獨立CAN總線控制芯片實現
即采用飛利浦公司的SJA1000獨立CAN控制器來實現CAN協議。這種方法的優點是能實現較復雜的功能,靈活性也不錯,但由于它是獨立的控制器,設計通信卡擁有4個CAN網段就需要4片SJA1000,這樣會造成資源冗余,系統會比較龐大,而且穩定性也會受影響,設計難度也較大。
(2) 帶CAN接口的微控制器實現
該方法具有代表性的有飛利浦公司的ARM芯片LPC2294,它集成有4路片上CAN總線控制器,能很方便地實現多路CAN總線接口,減小系統規模,提高系統穩定性。
比較上述兩種方法,在傳統的SJA1000中,接收過濾只能滿足一些規律性較高的ID篩選過濾,或對個數較少的ID (一般小于10~15個)進行任意篩選過濾,而難以實現更復雜的任意ID進行篩選過濾,這無疑增加了系統軟件設計及運行負擔。而第二種設計方法相對較為簡便。由于LPC2294微控制器中為所有CAN控制器提供了全局的接收標識符查詢功能,因而能容易地設計較復雜的ID接收過濾,其工作的重點主要在ARM芯片的軟件設計上。本文采用第二種方法來實現CAN總線接口,并采用PCA82C250作為CAN總線驅動器,同時將6N137連入CAN控制器和CAN驅動器之間以降低CAN總線對網關卡的電磁干擾。圖3所示是LPC2294中一個CAN接口的連接圖,其它接口與之類似。
1.3 微控制器與PCI9030之間的硬件接口設計
微控制器與PCI9030之間的硬件設計是該通信卡的核心控制部分。本設計采用ALTERA公司的FPGA EPlC6來實現微控制器與PCI9030之間的接口。EPlC6是ALTERA公司的一款FPGA芯片,它內部集成了20塊128×36 bits的RAM模塊,可以方便地將它編程為所需要的“雙口RAM”,然后將上行數據(CAN節點發往PC機的數據)和下行數據(PC機發往CAN節點的數據)通過該“雙口RAM”緩存轉發。由于EPlC6擁有豐富的I/O口,故可靈活選擇數據格式(32位/16位/8位)以及傳輸方法,本文采用16位復用傳輸模式。
EPlC6還要編程實現PCI9030與ARM之間的邏輯控制時序轉換。由于PCI9030與ARM的控制信號不完全一致,所以需要進行邏輯控制時序轉換。同時,本文PCI9030的局部總線一側采用的是地址/數據復用模式,而ARM控制器采用的是非復用模式,因此也需要EPlC6進行模式轉換:在PCI9030的地址周期內可利用LALE將16位地址鎖存到EPlC6內部寄存器,等到PCI9030的數據周期來臨時,再與數據一起送到ARM的地址口與數據口上,以方便ARM取用。
2 軟件設計
2.1 通信卡軟件設計
通信卡上的軟件主要指的是ARM控制器上的軟件程序。本文選用ARM控制器LPC2294來實現智能數據傳輸路徑選擇。LPC2294是通信卡的控制核心。它集成有4路CAN控制器,每個CAN控制器都與獨立CAN控制器SJA1000有著相似的寄存器結構,它只是對器件寄存器訪問由原來的8bit字節訪問轉變為了32 bit的雙字訪問。LPC2294可實現CAN網段與上位機之間的數據傳輸控制(包括上行數據傳輸和下行數據傳輸)以及不同CAN網段間的數據傳輸控制(平行數據傳輸)。
LPC2294為所有CAN控制器提供了全局接收標識符查詢功能。它包含一個512×32 (2 k字節)的RAM,可通過軟件處理在RAM中存放1~5個標識符表格。整個接收濾波RAM可容納1024個標準標識符或512個擴展標識符,或兩種類型的混合標識符。由于允許的表格范圍有2 k字節,故能容易地滿足復雜的ID接收過濾要求。LPC2294在FullCAN模式下能自動接收并選定網段的標準幀,但本文不采用FullCAN模式。
評論