徐軍濤,許化龍
摘 要:介紹基于FPGA的PC/104-CAN通訊板的設(shè)計(jì)與實(shí)現(xiàn)方案,采用SJA1000T作為CAN控制器,82C250作為CAN收發(fā)器,并在通信通道上采用光電隔離技術(shù),提高了系統(tǒng)可靠性。重點(diǎn)論述了應(yīng)用FPGA實(shí)現(xiàn)從PC/104總線到CAN總線的數(shù)據(jù)和地址信號(hào)傳輸,時(shí)序邏輯控制信號(hào)的轉(zhuǎn)換,以及驅(qū)動(dòng)程序的設(shè)計(jì)和CAN多幀數(shù)據(jù)傳遞時(shí)打包和解包的方法,應(yīng)用一種簡單實(shí)用的CAN數(shù)據(jù)包格式,有效地簡化了數(shù)據(jù)通訊并提高了總線的有效傳輸速率。
關(guān)鍵詞:PC/104;CAN;FPGA;打包;解包
中圖分類號(hào):TP366文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2009)19-083-03
Design of PC/104-CAN Communication Board Based on FPGA
XU Juntao,XU Hualong
(The Second Artillery Engineering Institute,Xi′an,710025,China)
Abstract:The design and implementation of PC/104-CAN communication board based on FPGA are introduced.It adopts SJAl000T as the CAN controller,and 82C250 as the CAN transceiver.At the same time,photoelectric isolation technology is adopted on the channels to increase dependability of the system.The transformation of data and address signal and sequential control signal from PC/104 to CAN bus is discussed,and the design of drive and a method of CAN bus data packing and unpacking is mentioned.Using a kind of CAN data format,the data communication is simplified efficiently,and the effective transformation speed is increased.
Keywords:PC/104;CAN;FPGA;packing;unpacking
0 引 言
PC/104 嵌入式控制PC出現(xiàn)于20世紀(jì)80年代末,并于1992年形成IEEEP966.1標(biāo)準(zhǔn)。它一方面繼承了PC的所有資源,另一方面又對(duì)PC的各個(gè)方面做了優(yōu)化設(shè)計(jì),使其與IBM PC完全兼容,并具有體積小,功耗低,工作溫度寬,可靠性高等特點(diǎn)[1]。采用了獨(dú)特的“自棧式”總線連接、模塊化結(jié)構(gòu),使用起來靈活方便;采用面向?qū)ο蟮挠布O(shè)計(jì)方法,使得在PC/104 標(biāo)準(zhǔn)上開發(fā)的擴(kuò)展模塊具有更強(qiáng)的通用性和更長的生命期;它以其優(yōu)良的品質(zhì)、高可靠性及模塊化,廣泛應(yīng)用于工業(yè)控制、航空航天、軍事、醫(yī)療、消防設(shè)備、智能儀器儀表、導(dǎo)航、通訊、數(shù)控、自動(dòng)化生產(chǎn)設(shè)備、便攜式計(jì)算機(jī)等領(lǐng)域。
CAN(Controller Area Network)總線是一種有效支持分布控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò),采用多主協(xié)議,廢除了傳統(tǒng)的站地址編碼,而采用對(duì)通信數(shù)據(jù)塊進(jìn)行編碼的方法,使網(wǎng)絡(luò)內(nèi)節(jié)點(diǎn)個(gè)數(shù)在理論上不受限制。它具有總線仲裁、錯(cuò)誤檢測、自動(dòng)重發(fā)等功能。由于采用了許多新技術(shù)及獨(dú)特的設(shè)計(jì),CAN總線具有高實(shí)時(shí)性、卓越性能、高可靠性、能獨(dú)特靈活設(shè)計(jì)和低廉價(jià)格,已廣泛應(yīng)用于工業(yè)現(xiàn)場、控制、智能大廈、小區(qū)安防、交通工具、醫(yī)療儀器、環(huán)境監(jiān)控等眾多領(lǐng)域。目前,它已被公認(rèn)為是幾種最有前途的現(xiàn)場總線之一[2]。
隨著科技的發(fā)展,同一系統(tǒng)應(yīng)用多種總線技術(shù)已經(jīng)成為一種趨勢(shì)。本設(shè)計(jì)利用FPGA完成PC/104總線和CAN總線之間的相互通訊,將兩總線相結(jié)合,優(yōu)勢(shì)互補(bǔ),使兩總線有更大應(yīng)用價(jià)值和更廣闊的使用前景[3]。
1 硬件設(shè)計(jì)
1.1 系統(tǒng)硬件結(jié)構(gòu)
本設(shè)計(jì)采用PC/104模板形式,具有很強(qiáng)的方便性和可擴(kuò)展性,其系統(tǒng)的硬件結(jié)構(gòu)如圖1 所示。
由于PC/104總線采用的是地址數(shù)據(jù)總線分離的總線結(jié)構(gòu),而CAN總線協(xié)議控制器SJA1000T采用的是地址數(shù)據(jù)總線分時(shí)復(fù)用的總線結(jié)構(gòu),因此系統(tǒng)使用FPGA器件 EP20K100實(shí)現(xiàn)總線轉(zhuǎn)換和時(shí)序邏輯控制轉(zhuǎn)換。該通訊板采用I/O映射方式,其內(nèi)部寄存器地址為280H~2BFH。為了增強(qiáng)系統(tǒng)的抗干擾能力,在控制器SJA1000T與收發(fā)器82C250之間接入光電耦合器6N137。光耦6N137的上升時(shí)間典型值為30 ns,隔離電壓為3 000 V,其支持最大頻率值超過30 MHz。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
1.2 FPGA設(shè)計(jì)
Quartus Ⅱ是Altera公司在21世紀(jì)初推出的FPGA/CPLD開發(fā)環(huán)境,是Altera前一代FPGA/CPLD集成開發(fā)環(huán)境MAX+Plus Ⅱ的更新?lián)Q代產(chǎn)品,其功能強(qiáng)大,界面友好,使用便捷。Quartus Ⅱ軟件集成了Altera的FPGA/CPLD開發(fā)流程中所涉及的所有工具和第三方軟件接口[4]。Quartus Ⅱ軟件的開發(fā)流程如圖2所示。
圖2 Quartus Ⅱ軟件的開發(fā)流程
采用原理圖輸人和硬件描述語言相結(jié)合的方式,進(jìn)行編譯后寫入器件中[5];同時(shí)可在線更改寫入內(nèi)容,修改和調(diào)試簡單易行。FPGA的設(shè)計(jì)主要由兩部分組成:第一部分實(shí)現(xiàn)時(shí)序邏輯控制信號(hào)的轉(zhuǎn)換,第二部分實(shí)現(xiàn)地址譯碼和地址數(shù)據(jù)線的復(fù)用。Quartus Ⅱ圖表文件及器件管腳如圖3所示。
圖3 Quartus Ⅱ圖表文件及器件管腳圖
由于PC/104的地址總線和數(shù)據(jù)總線是各自獨(dú)立的,SJA1000T的地址總線和數(shù)據(jù)總線是分時(shí)復(fù)用的,所以它們之間不能直接相連,必須通過時(shí)序邏輯控制,再配合軟件來實(shí)現(xiàn)讀/寫操作。對(duì)SJA1000T的操作方法是:首先,對(duì)地址為CAN首地址+0(A2A1A0=000)的端口進(jìn)行寫操作(WR為低,有效),CANALE為高,有效,此時(shí)復(fù)用的地址、數(shù)據(jù)總線上的數(shù)據(jù)被視為地址信號(hào),進(jìn)入SJA1000T內(nèi)部鎖存器;然后,對(duì)地址為CAN首地址+1(A2A1A0=001)的端口進(jìn)行讀或?qū)懖僮?RD/WR為低,有效),CANALE為低,上述中的地址信號(hào)已被鎖存,此時(shí)復(fù)用的地址、數(shù)據(jù)總線上的數(shù)據(jù)被視為數(shù)據(jù)信號(hào),這樣即可完成對(duì)SJA1000T的各個(gè)寄存器和緩沖區(qū)的讀或?qū)懖僮鱗6]。
1.3 硬件電路測試
主要檢測硬件結(jié)構(gòu)及電路板設(shè)計(jì)是否正確。建立一個(gè)簡單的通訊連接,將兩個(gè)通訊板連接進(jìn)行測試,用通訊板A作為輸出,通訊板B作為輸入。編程通過通訊板A發(fā)送數(shù)據(jù),內(nèi)容為8個(gè)隨機(jī)數(shù),檢測通訊板B接收數(shù)據(jù),如果不同則作加1計(jì)數(shù)。反之將通訊板B作為輸出,通訊板A作為輸入,進(jìn)行相同測試。測試200萬次循環(huán)未見異常。
2 軟件設(shè)計(jì)
2.1 軟件流程圖
在該通訊板的設(shè)計(jì)中,控制部分的核心采用了PC/104嵌入式計(jì)算機(jī)系統(tǒng)。由于PC/104嵌入式計(jì)算機(jī)系統(tǒng)幾乎具有和一般的PC機(jī)一樣的強(qiáng)大功能,所以該通訊板的開發(fā)是在和系統(tǒng)模塊棧接在一起后,直接在嵌入式計(jì)算機(jī)上進(jìn)行的。這些工作都是采用C語言進(jìn)行編程設(shè)計(jì)的。采用C語言的優(yōu)點(diǎn)在于其快速性、高效性。在利用嵌入式計(jì)算機(jī)強(qiáng)大資源的條件下,C語言能滿足模塊的實(shí)時(shí)性要求。在系統(tǒng)軟件的設(shè)計(jì)中,采用了結(jié)構(gòu)化、模塊化的設(shè)計(jì)方法,滿足了儀器功能的要求。本接口系統(tǒng)的軟件任務(wù)基本為在CAN協(xié)議芯片SJA1000T有中斷發(fā)生時(shí),根據(jù)SJA1000T的中斷寄存器的內(nèi)容完成相應(yīng)的操作(如發(fā)送、接收數(shù)據(jù)幀等)。其流程圖如圖4所示[7]。
系統(tǒng)設(shè)計(jì)中要進(jìn)行接口驅(qū)動(dòng)程序的設(shè)計(jì),為保證操作系統(tǒng)的穩(wěn)定和安全,驅(qū)動(dòng)程序必須按一定的規(guī)范來編寫。本系統(tǒng)的驅(qū)動(dòng)程序主要考慮以下內(nèi)容:設(shè)置端口和中斷號(hào),設(shè)置通訊板通訊默認(rèn)參數(shù),通訊板內(nèi)存分配,映射I/O地址,創(chuàng)建通訊板事件和數(shù)據(jù)接收事件,初始化中斷等[8]。
SJA1000T初始化只有在復(fù)位模式下才能進(jìn)行,初始化主要包括:工作方式的設(shè)置、接收濾波方式的設(shè)置、接收屏蔽寄存器和接收代碼寄存器的設(shè)置、波特率設(shè)置和中斷允許寄存器的設(shè)置等。SJA1000T在完成初始化后就可以回到工作狀態(tài)進(jìn)行正常的通訊任務(wù)了[9]。
圖4 軟件總流程圖
2.2 CAN多幀數(shù)據(jù)通信打包和解包技術(shù)
CAN通信數(shù)據(jù)傳輸采用短幀結(jié)構(gòu),每幀最多發(fā)送8個(gè)字節(jié)的有效數(shù)據(jù),總線的有效傳輸速率很低,當(dāng)在傳輸?shù)臄?shù)據(jù)量超過8個(gè)字節(jié)有效數(shù)據(jù)時(shí),給用戶編程帶來了一定的困難。利用如圖5所示的CAN的數(shù)據(jù)包格式,只需將待傳輸?shù)臄?shù)據(jù)進(jìn)行相應(yīng)的打包和解包操作即可實(shí)現(xiàn)數(shù)據(jù)的單幀和多幀傳輸,有效地簡化了數(shù)據(jù)通信。
采用如圖5所示的CAN數(shù)據(jù)包格式,無論是單幀還是多幀傳輸,只要把數(shù)據(jù)填入相應(yīng)的發(fā)送緩沖區(qū)即可,在接收方,則將數(shù)據(jù)解包并放入接收緩沖區(qū)即可。
與上述數(shù)據(jù)包格式相對(duì)應(yīng),當(dāng)CAN總線進(jìn)行多幀傳輸時(shí),其CAN的多幀數(shù)據(jù)傳輸幀結(jié)構(gòu)如圖6所示。
圖5 發(fā)送數(shù)據(jù)包和接收數(shù)據(jù)包格式
在圖6中,當(dāng)發(fā)送的有效數(shù)據(jù)個(gè)數(shù)不超過4個(gè)時(shí),一幀數(shù)據(jù)即可傳輸;當(dāng)有效數(shù)據(jù)超過4個(gè)時(shí),則需要多幀傳輸。此處的地址變址是指從發(fā)送緩沖區(qū)所取的存
放于該幀的第一個(gè)有效數(shù)據(jù)的存儲(chǔ)地址相對(duì)于緩沖區(qū)
首地址的偏移量,如第一幀中地址變址為4,第二幀中的地址變址是10。地址變址的設(shè)置,使得對(duì)數(shù)據(jù)包的解包和打包實(shí)現(xiàn)起來較容易。
圖6 CAN多幀數(shù)據(jù)傳輸幀結(jié)構(gòu)圖
3 結(jié) 語
該通訊板設(shè)計(jì)簡單,只需一塊FPGA,一個(gè)CAN控制器SJA1000T和收發(fā)器PCA82C250,為增強(qiáng)系統(tǒng)的穩(wěn)定性,在通信通道上均采用光電隔離技術(shù),保護(hù)PC機(jī)避免因地環(huán)流而損壞,增強(qiáng)系統(tǒng)在惡劣環(huán)境中使用的可靠性。該通訊板采用的CAN數(shù)據(jù)包格式提高了總線的有效傳輸速率,經(jīng)測試達(dá)到500 Kb/s,提高了通訊板通訊的實(shí)時(shí)性。本設(shè)計(jì)方案已成功應(yīng)用于工業(yè)控制器中,效果理想。
參考文獻(xiàn)
[1]PC/104嵌入式協(xié)會(huì).PC/104規(guī)范V2.5[Z].2003.
[2]杜尚豐.CAN總線測控技術(shù)及其應(yīng)用[M].北京:電子工業(yè)出版社,2007.
[3]武芳瑛,吳滌.一種PC104總線和CAN總線的接口[J].電力自動(dòng)化設(shè)備,2004,24(8):53-55.
[4]周潤景,圖雅,張麗敏.基于Quartus Ⅱ的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例[M].北京:電子工業(yè)出版社,2007.
[5][美]Peter J Ashenden.VHDL設(shè)計(jì)指南[M].2版.葛紅,黃河,吳繼明,譯.北京:機(jī)械工業(yè)出版社,2005.
[6]Philips.SJA1000 Stand-lone CAN Controller Datasheet[Z].2000.
[7]舒志兵,袁佑新,周瑋.現(xiàn)場總線運(yùn)動(dòng)控制系統(tǒng)[M].北京:電子工業(yè)出版社,2007.
[8]鄭勇蕓,饒運(yùn)濤,鄒繼軍,等.現(xiàn)場總線CAN通信中多線程的應(yīng)用[J].東華理工學(xué)院學(xué)報(bào),2004,27(2):196-198.
[9]雷霖.現(xiàn)場總線控制網(wǎng)絡(luò)技術(shù)[M].北京:電子工業(yè)出版社,2004.
[10]Philips.Philips 82C250 CAN Controller Interface Datasheet[Z].2000.