摘 要: 針對傳統(tǒng)CAN總線設備存在的系統(tǒng)規(guī)模大、功耗高、成本高等問題,提出并實現(xiàn)了一種高性價比CAN適配" title="適配">適配卡系統(tǒng)。介紹了系統(tǒng)總體結構,闡述了軟硬件組成及其功能,并給出硬件具體設計方案及驅動程序的實現(xiàn)方法。經實踐證明,該適配卡系統(tǒng)完全可滿足實際需要且結構簡單、能耗低、穩(wěn)定性能好。
關鍵詞: CAN總線; 適配卡; 驅動程序; 動態(tài)鏈接庫
?
CAN總線是眾多現(xiàn)場總線中的一種,因其廉價高效的特點在工業(yè)生產的各個領域得到極廣泛的應用。目前市場上有很多型號的CAN總線設備,大多數(shù)使用并行總線器件和可編程邏輯器件,從而增加了規(guī)模和復雜程度,提高了系統(tǒng)功耗和成本。針對以上問題,本文提出一種高性價比CAN適配卡設計方案。該方案采用廉價高性能的16位ARM芯片LPC2212為核心控制器,以低能耗的SPI接口器件MCP2515代替?zhèn)鹘y(tǒng)的并行接口器件作為CAN總線控制器,以帶PCI總線控制器的128KB雙口RAM 芯片CY7C09449PV-AC作為上位機" title="上位機">上位機與局部總線" title="局部總線">局部總線的連接中介,免去復雜的時序設計,有效地降低了系統(tǒng)的功耗,縮小了系統(tǒng)的規(guī)模,實現(xiàn)了高性價比。
1 系統(tǒng)總體結構
圖1為適配卡系統(tǒng)結構圖。系統(tǒng)由上位機總線接口和CAN總線接口兩大模塊組成,選擇PCI為與上位機接口的總線。如圖1所示,PCI總線接口由PCI接口控制器和EEPROM組成, PCI接口控制器完成將PCI信號轉換成局部總線信號的功能,EEPROM則存儲PCI總線和局部總線的配置信息,系統(tǒng)上電時,PCI接口控制器會自動讀取完成配置過程[1]。CAN總線接口由微處理器、CAN控制器、CAN收發(fā)器和光電隔離器四部分組成[2]。CAN控制器是CAN總線的核心單元,完成CAN通信協(xié)議的全部要求。CAN收發(fā)器提供對總線的差動發(fā)送能力和對控制器的差動接收能力。光電隔離器則實現(xiàn)收發(fā)器與控制器之間的電氣隔離,保護控制系統(tǒng)電路。系統(tǒng)采用16位微處理器LPC2212為控制器,主要功能是對CAN控制器的初始化和上行傳輸數(shù)據(jù)(CAN總線向上位機傳送數(shù)據(jù))、下行傳輸數(shù)據(jù)(CAN總線向下位機傳送數(shù)據(jù))的預處理。
?

?
2 系統(tǒng)硬件設計
2.1 PCI總線接口芯片的選擇
PCI總線功能強大,具有良好的兼容性。但同時它的協(xié)議十分復雜,設計上有一定的難度。其接口芯片的選擇最簡單有效的方法就是使用芯片廠商制造的專用PCI總線接口芯片。選擇帶PCI總線控制器的128KB雙口SRAM存儲器CY7C09449PV-AC作為PCI總線和局部總線的橋接芯片。
CY7C09449PV-AC包含有128KB的共享存儲空間,能提供滿足PCI 2.2規(guī)范的主、從模式接口,且具有與局部總線微處理器兼容的接口,是一款優(yōu)質廉價的PCI總線控制器[3]。
除了完成將兩種總線連接的基本功能外,CY7C09449PV-AC的使用還能夠避免冗余復雜的時序設計。因其含有一個可供PCI總線和局部總線共享的雙口RAM,在需要進行通信時,將通信發(fā)起方待發(fā)送信息存儲到共享RAM中,再由通信的接收方讀取存儲在RAM中的內容,從而實現(xiàn)通信,避免了CPLD、FPGA等可編程邏輯器件的使用,大大簡化了系統(tǒng)的復雜程度。
2.2 CAN總線接口的實現(xiàn)
采用16位ARM微處理器芯片LPC2212、獨立CAN控制器MCP2515、高速CAN收發(fā)器TJA1050以及光電隔離器6N137共同完成CAN總線接口電路的實現(xiàn)。MCP2515是一款獨立CAN協(xié)議控制器,它因帶有兩個驗收屏蔽寄存器和六個驗收濾波寄存器而可以過濾掉不滿足條件的報文,減少微處理器的開銷。此外,它不同于一般的并行總線控制器,MCP2515與微控制器的數(shù)據(jù)傳輸是通過SPI接口來實現(xiàn)的,大大節(jié)省了I/O" title="I/O">I/O口和降低系統(tǒng)功耗[4]。高速CAN收發(fā)器TJA1050是傳統(tǒng)CAN總線收發(fā)器PCA82C250的后繼產品,能夠實現(xiàn)CAN控制器和通信線路的物理連接,提高CAN總線的驅動能力和穩(wěn)定性。為了進一步提高系統(tǒng)的抗干擾能力,將MCP2515的TXCAN、RXCAN引腳通過高速光電隔離器6N137后與TJA1050相連,這樣可以使適配卡不受地面環(huán)流的影響,有效地實現(xiàn)電氣隔離,確保系統(tǒng)穩(wěn)定性。
圖2為CAN接口硬件連接圖。需要特別指出的是:(1)MCP2515的片選信號直接連接到LPC2212任一標準I/O口引腳,在進行數(shù)據(jù)傳輸時須通過編程將該I/O口引腳的電平拉低,以確保MCP2515時刻被選中,否則傳輸將被終止; (2)同一時刻系統(tǒng)只允許一個主機操作總線,系統(tǒng)配置LPC2212為 SPI主機,根據(jù)其使用規(guī)則,SSEL引腳必須保持高電平,才能真正執(zhí)行主機功能[3];(3)圖2(a)是MCP2515的復位電路。MCP2515有兩種復位方式:硬件復位和SPI復位,系統(tǒng)采用在RESET引腳上連一個RC電路實現(xiàn)MCP2515的硬件復位。電路中二極管的作用是在VDD5掉電時幫助電容快速放電。R2的作用是限制從電容流入RESET引腳的電流,以避免RESET引腳因靜電放電或過度電性應力而擊穿,其阻值選取在1kΩ~10kΩ之間。
?

2.3 PCI_CAN總線互連設計
因CY7C09449PV-AC提供了與局部微處理器兼容的接口,故可直接與LPC2212連接。CY7C09449PV-AC與LPC2212的連接電路圖如圖3所示。READ和WRITE分別是存儲器的讀、寫信號線,LPC2212沒有專門的引腳提供讀寫信號,采用兩個I/O口連接到外部存儲器的讀寫引腳,通過編程產生讀寫信號時序。RDY_IN和RDY_IN是局部總線引腳,表明局部微處理器已準備好進行數(shù)據(jù)操作,將兩引腳分別上拉和下拉,表示總是有效。IRQ_IN和IRQ_OUT分別是數(shù)據(jù)存儲器的中斷輸入和中斷輸出引腳,IRQ_IN可以接收來自LPC2212的中斷信息,并通過PCI控制器傳遞到INTA引腳,進而到達上位機;IRQ_OUT可將中斷信息傳送到局部微處理器以便進行數(shù)據(jù)操作。如圖3所示,將IRQ_OUT連接到LPC2212的P0.3外部中斷1輸入引腳,而配置P1.16為標準I/O口連接到CY7C09449PV-AC的IRQ_IN,并編程實現(xiàn)中斷信號的輸出。RDY_OUT為CY7C09449PV-AC的準備好應答信號,當此引腳電平有效時,說明存儲器已準備進行數(shù)據(jù)操作,將其與LPC2212的已配置為標準I/O口的P1.17相連,編程查詢存儲器的狀態(tài)。MCP2515的片選信號是由LPC2212的部分地址線通過DPLD(地址解碼PLD)邏輯處理后產生。其優(yōu)點是地址解碼PLD電路不僅提供CY7C09449PV-AC的片選信號還可以提供其他器件的片選信號,給系統(tǒng)留下充分的擴展空間。

?
3 系統(tǒng)軟件設計
3.1 適配卡程序設計
適配卡程序調度微處理器完成MCP2515的初始化、上行數(shù)據(jù)傳輸和下行數(shù)據(jù)傳輸三大功能。MCP2515的初始化主要包括:設置模式、總線時序、中斷使能、標識符表格等,這些設置均通過向其對應的寄存器賦值來完成。進行下行數(shù)據(jù)傳輸時,由CY7C09449PV-AC接收來自上位機的數(shù)據(jù)并向LPC2212發(fā)出中斷信號,LPC2212讀取共享存儲器中的數(shù)據(jù)并將其通過CAN控制器MCP2515發(fā)送到CAN總線上。進行上行數(shù)據(jù)傳輸時,MCP2515接收到來自CAN總線的數(shù)據(jù)并向LPC2212發(fā)出中斷信號,LPC2212將存儲在MCP2515接收緩沖器中的數(shù)據(jù)傳送到共享存儲器,并通過CY7C09449PV-AC向PCI總線發(fā)出中斷,上位機程序讀取數(shù)據(jù)。
CY7C09449PV-AC作為兩種總線的中介部分,該雙口RAM有16KB的共享空間。以上位機為參照把它分成單個容量為8KB的兩個區(qū)間,如圖4所示。0x4000H~0x5fff為發(fā)送幀空間,0x6000H~0x7fffH為接收幀空間,0x4E8H是上位機對局部處理器的郵箱HLDATA的地址,0x4F8H是局部處理器對上位機的郵箱LHDATA的地址。把發(fā)送空間和接收空間設計成兩個循環(huán)分別用兩個指針來控制,在HLDATA中存放上位發(fā)送幀地址指針和上位接收幀地址指針,在LHDATA中存放局部發(fā)送幀地址指針和局部接收幀地址指針。上位機每接收一個幀,上位接收幀地址加1;每發(fā)送一個幀,上位發(fā)送幀地址加1。LPC2212每接收一個幀,局部接收幀地址加 1;每發(fā)送一個幀,局部發(fā)送幀地址加1。這樣能有效直觀地控制共享區(qū)間,簡單實用。
?

3.2 上位機軟件設計
系統(tǒng)上位機軟件包括CAN適配卡驅動程序和應用程序動態(tài)鏈接庫" title="動態(tài)鏈接庫">動態(tài)鏈接庫兩大部分。
3.2.1 CAN適配卡驅動程序設計
驅動程序主要完成的功能包括:列舉設備、找到所需設備、列舉設備所有資源、鎖定設備資源、訪問設備資源、解鎖設備資源和釋放設備。具體完成如下工作:(1)幫助上位機獲取CAN適配卡上的資源;(2)CAN適配卡的I/O口控制,包括上位機對適配卡的讀寫;(3)CAN適配器的中斷控制,系統(tǒng)只對接收中斷開放,當MCP2515收到來自CAN網絡的數(shù)據(jù)時通過LPC2212產生中斷信號,驅動程序立即進行中斷處理,將收到的數(shù)據(jù)放入接收緩沖區(qū)。
采用Windriver開發(fā)系統(tǒng)驅動程序,該軟件主要開發(fā)ISA、USB、PCI接口的硬件設備驅動,并包含有Windriver Wizard、Windriver發(fā)行包、多個公用程序等資源,完全能夠達到設計要求[5]。開發(fā)過程如下:(1)使用自帶的Driver Wizard工具查找需要編寫驅動程序的適配卡,并用CREATE INF FILE產生INF文件,然后添加新硬件;(2)設置適配卡上的配置寄存器;(3)對適配卡上的I/O空間、內存空間、中斷資源進行配置,以便驅動程序能獲得這些資源;(4)自動生成源代碼,并人為進行功能代碼的添加,如中斷服務程序等。
3.2.2 動態(tài)鏈接庫的設計
動態(tài)鏈接庫是上層應用程序與底層驅動程序的接口,被應用程序調用并借助驅動程序對物理硬件進行數(shù)據(jù)操作[6]。由于Windows具有與設備無關的特性,如果直接用Windows的API函數(shù)或I/O讀寫指令進行訪問和操作,程序運行時往往會產生保護模式錯誤甚至死機,更嚴重的情況會導致系統(tǒng)崩潰。用動態(tài)鏈接庫技術可以方便地解決上述問題。將Windows的API函數(shù)或I/O讀寫指令的訪問和操作封裝成一個DLL,用CreateFile( )函數(shù)打開設備,用I/O管理器構造一個IRP傳送給總線驅動程序,由驅動程序完成該請求或者請求進一步傳送給端口驅動程序,然后返回執(zhí)行狀態(tài)。本系統(tǒng)的動態(tài)鏈接庫主要包含以下四個功能函數(shù):(1)PCICAN_Actv:獲取一個用于對適配卡進行讀寫操作的指針;(2)PCICAN_TrnsDat:用于向CAN總線上的節(jié)點發(fā)送信息;(3)PCICAN_RecvDat:用于接收來自CAN總線上的信息;(4)PCICAN_Deactv:用以關閉CAN通信卡,釋放設備資源。
本文在充分研究了市場上的CAN總線適配卡的基礎上,成功地設計了一款基于PCI的CAN總線適配卡。將適配卡插在PC機上與一自制CAN總線節(jié)點進行通信,該卡在長時間的測試中能保持正常運轉、性能穩(wěn)定、通信速度快、發(fā)熱量低、占用CPU時間少,有較好的可靠性和實時性。且結構簡單、規(guī)模小、性價比高,符合當今電子設備的發(fā)展趨勢。
參考文獻
[1] ?李貴山,戚得虎. PCI局部總線開發(fā)者指南[M]. 西安:西安電子科技大學出版社,2000.
[2] ?鄔寬明.CAN總線原理和應用系統(tǒng)設計[M].北京:北京航空航天大學出版社,1996.
[3] ?Cypress Semiconductor Corporation, CY7C09449PV-AC?data book[S]. 2002.
[4] ?Microchip Technology Inc. MCP2515 data book[S].2005.
[5] ?張熙,王悠. PCI總線高速數(shù)據(jù)傳輸系統(tǒng)設計[J].微計算機信息,2007,(1):34,142-143.
[6] ?CANT C著.Windows WDM設備驅動程序開發(fā)指南[M].孫義,馬莉波,國雪飛,等譯.北京:機械工業(yè)出版社,1999.
