董文華 趙倩 程志華
(上海大學,上海 200722)
一種基于FPGA的ISA總線轉(zhuǎn)CAN總線設計與實現(xiàn)
董文華 趙倩 程志華
(上海大學,上海 200722)
本設計采用FPGA芯片及其技術實現(xiàn)了智能CAN通訊卡的設計和開發(fā)。本設計主要包括:ISA總線、主控制器模塊、緩沖區(qū)模塊、CAN協(xié)議控制器模塊、以及CAN總線驅(qū)動器模塊。本設計已在實際工程中得到運用。實踐結(jié)果表明數(shù)據(jù)傳輸穩(wěn)定,可靠性高。
CAN總線 FPGA VHDL 循環(huán)存儲
ISA(Industry Standard Architecture,工業(yè)標準體系結(jié)構)總線是Intel/IEEE/和EISA在62線PC總線基礎上經(jīng)過擴展36根線而開發(fā)出的一種系統(tǒng)總線。IS A具有16位數(shù)據(jù)線,最高工作頻率為8MHz,數(shù)據(jù)傳輸速率達16Mb/s。24根地址線,可尋址16Mb。使用ISA總線的外部設備不需要具有非常快的吞吐速率。
CAN(Controller Area Network)即控制器局域網(wǎng)絡,是一種全數(shù)字化、多主和雙向的現(xiàn)場總線。CAN總線數(shù)據(jù)通信具有很高的可靠性、實時性和靈活性,越來越廣泛地應用于各種工業(yè)現(xiàn)場。
隨著計算機應用技術的迅速發(fā)展,對高性能/高效率板卡的需求將會越來越大,微機中低性能的ISA總線必將被淘汰。但是在現(xiàn)實應用中仍有數(shù)量眾多的支持ISA總線的板卡在使用。因此,CAN到ISA總線橋在一定時期內(nèi)將扮演一種特殊的角色。
C A N模塊共由四個部分組成:主控制器模塊、緩沖區(qū)模塊、CAN協(xié)議控制器模塊、以及CAN總線驅(qū)動器。見圖1。
主控制器是整個模塊的控制中心,通過訪問CAN協(xié)議控制器來實現(xiàn)對CAN總線的訪問;同時控制緩沖區(qū),減少數(shù)據(jù)的丟失率、增加C PU的工作效率。
圖1 系統(tǒng)總體設計
為了增加模塊的數(shù)據(jù)吞吐量,減少數(shù)據(jù)丟失率,同時減少CPU的工作負擔,在設計時增加了數(shù)據(jù)接收和發(fā)送緩沖器。該緩沖器應該同時滿足CPU對其的讀寫,及CAN協(xié)議控制器對其的讀寫。
雙口R A M有時會發(fā)生共享沖突問題。因此,將雙口R A M作為緩沖區(qū)使用,利用FPGA控制程序,它不僅保證了數(shù)據(jù)的先后次序,也保證了數(shù)據(jù)流通的速度。
CAN協(xié)議控制器實現(xiàn)CA N協(xié)議的數(shù)據(jù)鏈路層和物理層功能,對外具有與主控制器和總線接收器的接口。通過對其編程,主控制器可以設置它的工作方式,控制它的工作狀態(tài),進行數(shù)據(jù)的發(fā)送和接收,把應用層建立在它的基礎之上。
CAN控制器SJA1000并不能直接與總線連接,還要通過總線收發(fā)器才能接于總線上。CA N總線收發(fā)器提供CA N協(xié)議控制器與物理總線的接口,總線收發(fā)器的性能決定了總線接口、總線終端、總線長度和節(jié)點數(shù),是影響整個總線網(wǎng)絡通信性能的關鍵因素之一。
程序可分為三個部分:(1)控制雙口RAM。(2)控制SJA1000。(3)寫SJA1000命令寄存器程序流程如圖2所示。
圖2 程序流程圖
由流程圖可看出在發(fā)送C A N總線數(shù)據(jù)幀時,必須先從雙口RAM中讀出數(shù)據(jù),所以需使雙口RAM的片選信號、讀信號有效:同時根據(jù)前兩個字節(jié)中的信息獲取數(shù)據(jù)幀信息;然后將讀取的數(shù)據(jù)依次寫入SJA1000發(fā)送緩沖區(qū);最后寫SJA1000命令寄存器,通知SJA1000可以發(fā)送CAN數(shù)據(jù)。
如果模塊未向CPU發(fā)中斷以申明某路8KRAM已滿,則CPU可以將數(shù)據(jù)寫入該通道。每次最多只能寫10個數(shù)據(jù)。CPU可以根據(jù)數(shù)據(jù)長度來寫數(shù)據(jù)。當需要發(fā)送的數(shù)據(jù)寫完后,CPU必須發(fā)寫結(jié)束命令以終止寫操作。這樣可以節(jié)約CPU的操作時間。寫數(shù)據(jù)過程為(以下以寫第一通道為例):(1)查詢數(shù)據(jù)狀態(tài)寄存器(基址+2),看1通道是否能寫。(2)向通道1命令口(基址+00)寫入寫操作開始命令(0x01)。(3)向通道1數(shù)據(jù)口(基址+01)連續(xù)寫入1幀的數(shù)據(jù)(小于等于10字節(jié))。(4)向通道1命令口(基址+00)寫入寫操作結(jié)束命令(0x00)。(5)其他通道的寫操作與此類同。
CPU可以采用掃描方式查詢各個通道的狀態(tài),當某個通道內(nèi)有數(shù)據(jù)時CPU可讀取這些數(shù)據(jù)。CPU可以根據(jù)ID1和ID2的數(shù)據(jù)長度來讀取數(shù)據(jù)。當讀數(shù)據(jù)結(jié)束后,CPU必須發(fā)讀結(jié)束命令以告訴CAN終止讀操作。這樣CPU可以盡早結(jié)束讀操作,節(jié)約CPU的CAN操作時間。讀數(shù)據(jù)過程為(以下以寫第二通道為例):(1)查詢數(shù)據(jù)狀態(tài)寄存器(基址+10),看2通道是否有數(shù)據(jù),如果沒有數(shù)據(jù)結(jié)束操作,如果有數(shù)據(jù)則向通道2命令口(基址+04),寫入讀操作開始命令(0x02)。(2)從通道2數(shù)據(jù)口(基址+05),連續(xù)的讀出1幀的數(shù)據(jù)(小于等于10字節(jié)),讀完指定長度的數(shù)據(jù)后,向通道2命令口(基址+04),寫入讀操作結(jié)束命令(0x00)。
[1]徐偉業(yè).基于FPGA的CPU核及其虛擬平臺的設計與實現(xiàn)[D].河海大學,2007年.
[2]賈曉宇.基于ISA總線的嵌入式智能型張力控制系統(tǒng)[D].武漢理工大學,2002年.
[3]安磊,梁尚軍,邴洋海.一種基于FPGA的ISA航空總線設計方法[J].飛機設計,2012(4).
董文華,1987年04月,女,上海大學碩士研究生,主要研究方向是FPGA的應用。