文獻標識碼: B
文章編號: 0258-7998(2010)11-0086-05
目前國內外在解決儀器GPIB接口與RS-232或USB接口的轉接問題時能常遵循“微處理器+專用接口控制芯片”和“微處理器+FPGA”的設計思路,其中微處理器主要為單片機、ARM、PowerPC 和 MIPS等硬核處理器;FPGA的作用主要是用來實現專用接口芯片的功能,方法是在FPGA內部編寫專用接口芯片的IP核。“微處理器+專用接口控制芯片”的設計方案雖然成本較低,技術門檻也不高,但是不利于系統的功能擴展與性能升級;而“微處理器+FPGA”的設計方案中,IP核的編寫難度較大,開發周期太長;如果購買IP核,價格又過于昂貴。綜合分析以上方法的優缺點,本文提出一種基于Nios II軟核處理器的SoPC解決方案,利用Nios II軟核處理器的優異性能以及uC/OS-II嵌入式實時操作系統在執行效率、占用內存、實時性能以及可擴展性等方面的優勢,設計了GPIB、RS-232和USB接口協議轉換器,實現了GPIB-USB、GPIB-UART及UART-USB協議之間的轉換[1,2]。該方案具有設計靈活、可重構、集成度高、實現風險低、開發周期短的優點。1 總體設計方案
設計選用Altera公司的低成本SoPC平臺——Cyclone II系列FPGA。Cyclone II提供百萬級門陣列資源,包含4 608~68 416個邏輯單元;提供1個全局時鐘網絡與4個鎖相環;支持的存儲器類型包括雙端口及單口RAM、ROM和FIFO緩沖器,存儲器的數據總線最大可達36 bit,頻率可達250 MHz。Cyclone II系列提供最高622個用戶自定義I/O引腳,為接口協議轉換器的設計提供了充裕的接口資源。圖1給出了基于Cyclone II平臺的儀器接口協議轉換器的總體設計方案。
圖1中的Nios II微處理器、存儲器接口、片上存儲器、定時器以及各類接口控制器都是由FPGA內部的邏輯單元和RAM資源提供的。方案中RS-232接口協議的實現相對比較簡單,可以根據Altera公司提供的UART軟核配置獲得,而USB和GPIB協議部分均選用專用接口芯片來完成。Nios處理器通過Avalon Switch Fabric總線將Nios II處理器、存儲器和接口控制器等系統組件橋接在一起,形成一個接口統一的高性能SoPC系統[3]。其中,Nios II處理器主要完成協議之間的轉換,并將?滋C/OS-II操作系統內核移植到Nios II處理器上。開發中使用的工具包括Quartus II(含有集成的SoPC Builder工具包)、Nios II IDE以及仿真軟件ModelSim,利用Verilog語言進行硬件設計,利用C語言進行軟件開發。
2 接口硬件電路設計
2.1 GPIB接口電路設計
GPIB接口芯片選用NI公司的標準GPIB控制芯片NAT9914,它能夠完成IEEE488.2標準協議中所有接口功能,并且在軟件上與TI公司的TMS9914A及NEC公司的?滋PD7120兼容,具有可編程時鐘和波特率,直接存儲器存取等功能。NAT9914配套使用數據轉換器75160以及握手線和控制線轉換器75162完成GPIB接口的設計。GPIB接口電路設計如圖2所示。
2.2 USB接口電路設計
ISP1362是飛利浦公司推出的OTG(On-The-Go)產品,在單芯片上集成了一個OTG控制器、一個高級主控制器(PSHC)和一個基于飛利浦公司ISP1181的外設控制器。ISP1362的OTG控制器完全兼容USB2.0及OTG Suppliment 1.0協議,主機和設備控制器兼容USB 2.0協議,支持12 Mb/s的高速傳輸和1.5 Mb/s的低速傳輸。本設計中USB接口目前主要用來完成設備的功能,但考慮到以后繼續開發中功能升級的需要,所以選用ISP1362芯片來完成USB接口的設計,它可以實現繼續開發中USB的主機和OTG功能。
2.3 RS-232接口電路設計
SoPC Builder的標準組件庫中提供了UART組件,使用這個組件可以方便地實現UART接口功能。為了保證UART的電氣相容性,使用了一片MAX232來實現UART的電平轉換。
圖3為RS-232接口系統框圖,具有Avalon接口的通用UART核在FPGA上的Nios II處理器和外設之間實現了一種串行字符流通信方式,然后通過MAX232芯片實現電平轉換,從而實現了RS-232接口功能。可以根據需要對其硬件進行配置,改變其波特率、奇偶校驗位、停止位、傳輸的數據位以及其他可選的RTS-CTS流控制信號等。
3 SoPC Builde中總體架構設計
設計中的Nios II微處理器內核、onchip_mem IP核、timer IP核、 JTAG調試模塊jtag_uart、Flash控制器cfi_flash、SDRAM控制器sdram、UART組件uart以及用于液晶屏顯示的組件lcd等均使用SoPC Builder工具在標準組件庫中定制,而用于實現Avalon總線與片外NAT9914芯片和ISP1362芯片連接的接口控制器組件是通過自己編寫Verilog代碼來自定制的。在SoPC Builder中通過Avalon Switch Fabric總線將各組件互連起來。
Nios II嵌入式處理器是基于哈佛結構的RISC通用嵌入式處理器軟核,能與用戶邏輯相結合,編程至Altera的FPGA中。處理器具有32位指令集,32位數據通道和可配置的指令以及數據緩沖。它針對可編程邏輯進行了優化設計,也為可編程單芯片系統設計了一套綜合解決方案[2]。Nios II處理器系列包括三種內核:高性能的內核Nios II/f、低成本內核Nios II/e及性能/成本折中的標準內核Nios II/s。本系統采用高性能的內核Nios II/f以獲得最強的處理器性能。
4 接口協議轉換器軟件開發
4.1 軟件總體框架
軟件部分需要完成的任務主要包括:GPIB接口功能的開發、RS-232接口功能的開發和USB接口功能的開發;μC/OS-II嵌入式操作系統在Nios II處理器上的移植;在Nios II處理器上實現接口協議的轉換,完成各個接口之間的相互通信。Nios II系統下的軟件分層架構如圖4所示。
Nios II 處理器硬件系統是軟件開發的基礎,同時也是整個分層架構的核心。
設備驅動軟件是實現處理器與設備通信的特殊程序,它相當于硬件的接口,操作系統只有通過這個接口才能控制硬件設備的工作,如果設備沒有對應的驅動軟件便不能正常工作。
硬件抽象層應用程序接口HAL API(Application Program Interface),是由HAL系統庫提供的,它常與NewLib C標準庫集成在一起,為用戶訪問外設提供了標準的接口,開發人員可以非常方便地使用這些接口來與底層硬件通信。
μC/OS-II內核在Nios II的HAL系統庫之上進行操作,它可以訪問所有的HAL服務,并且能夠調用HAL的API函數。μC/OS-II提供信號量、消息郵箱、消息隊列、事件標志、消息傳遞、存儲管理、時間管理等函數。本設計中主要用它來完成接口協議轉換時的多任務調度。
GPIB組件、USB組件和RS-232組件分別實現了Nios II微處理器和GPIB、USB、RS-232外設之間的通信。
系統初始化部分用于初始化μC/OS-II、GPIB組件、USB組件和RS-232組件,實現所有應用程序的任務、信號量、隊列和事件標志的實時操作系統任務之間通信資源的創建。
最外一層包含發送GPIB命令和數據任務、接收GPIB數據和命令任務、發送USB命令和數據任務、接收USB命令和數據任務、發送RS-232命令和數據任務、接收RS-232命令和數據任務等。同時,該層通過信號量、隊列和事件標志實現任務之間的通信。
4.2 GPIB接口的軟件開發
GPIB數據通信部分的代碼編程方式主要有查詢方式和中斷方式兩種。盡管查詢方式也能較好地實現數據通信的基本要求,但其功能單一、系統資源利用率低,不適合系統功能的維護和擴展。因此,本設計中主要采用了中斷方式完成GPIB數據通信部分的代碼編程。引起NAT9914向處理器發出中斷信號的事件主要有發送數據事件(BO)、接收數據事件(BI)、接收數據結束事件(END)、接收GET命令事件和接收DCAS命令事件。一旦這些事件發生,NAT9914就會觸發Nios II處理器的外部中斷,Nios II終止正常工作,將現場數據壓入堆棧保護,并調用外部中斷處理函數,響應NAT9914芯片的中斷申請[3-4]。中斷處理服務流程圖如圖5所示。
4.3 UART接口的軟件開發
在 Nios II 下,由于HAL的存在,UART編程已經變成標準的文件操作了。Nios II 把對UART的流操作當成了一種文件操作。操作一個UART時,只需要對它相應的設備驅動讀寫數據。Altera提供的UART驅動程序是一個集成到HAL系統中的HAL字符模式設備驅動程序,可以采用標準輸入/輸出流的方式使用UART。使文件指針指向打開的UART設備,即可通過標準C庫函數fwrite、fread、fprintf、fget等來進行串口的讀/寫操作了。
在寫設備程序時需要通過寄存器直接訪問UART。altera_avalon_uart_reg.h定義了UART核的寄存器映像,提供訪問底層硬件的符號常量,該文件的符號僅被設備驅動程序使用。altera_avalon_uart.h、altera_avalon_uart.c為HAL庫提供了UART核設備的驅動程序。
4.4 USB接口的軟件開發[5]
ISP1362在設計中作為USB設備使用。USB設備與Nios II系統通信的原理框圖如圖6所示。系統上電后,Nios II首先自身進行初始化,初始化完成后,通過發送相關指令,完成對ISP1362芯片的初始化。ISP1362芯片初始化完成后,主機就會給設備分配地址,并根據設備提供的描述符完成對設備的配置,從而實現USB設備的一般功能。
USB接口控制器的軟件結構如圖7所示。軟件包括信息處理和中斷服務例程兩部分。硬件抽象層用于將數據從硬件傳輸到將要被主循環處理的存儲器空間中。HAL4SYS.C、HAL4D13.C、ISR.C、CHAP_9.C、D13BUS.C和MAINLOOP.C是實現USB設備控制器功能的六個主要的程序文件。其中,HAL4SYS.C和HAL4D13.C程序文件作為硬件抽象層,ISR.C程序文件作為中斷服務例程,CHAP_9.C和D13BUS.C作為協議層,MAINLOOP.C用于主循環控制。
ISP1362在Nios II系統中采用中斷的方法進行任務處理。當ISP1362收到包含設備地址的輸出或設置事務時,通過軟件控制將接收到的數據存儲在適當的端點位置,然后觸發一個中斷。設備的中斷服務例程處理接收到的數據。當設備收到包含設備地址的輸入事務時,如果ISP1362有準備傳給主機的數據,它從指定的端點送出數據,然后觸發一個中斷,設備的中斷服務例程做適當的處理,然后準備下一個輸入事務。
4.5 μC/OS-II實時操作系統
根據多功能儀器接口協議轉換器的特點,設計需滿足實時性和并發性的要求,以便更好地支持多種接口協議運行時的多任務環境的調度,所以應用軟件應該基于嵌入式實時操作系統。考慮到?滋C/OS-II的規模較小、實時性和可靠性較高,以及Nios II IDE開發環境對?滋C/OS-II的良好支持,故操作系統選擇?滋C/OS-II。它通過為每個任務分配單獨的任務堆棧來保存任務工作環境,提供任務管理與調度,任務間的同步、互斥與通信,時間和中斷管理、內存的動態分配等多種系統服務。設計中?滋C/OS-II主要完成任務的管理與調度,通過創建消息郵箱、信號量實現任務與任務之間、任務與中斷服務程序之間的同步與互斥,以保證它們協調運行[6]。
5 系統功能驗證
5.1 RS-232與GPIB接口通信功能測試
通過UART數據線將計算機的UART接口與接口轉換器的UART接口連接,將接口轉換器的GPIB接口與Aglient 33250A連接。
運行串口調試助手,并在串口調試助手中進行如下設置:串口設置為COM1,波特率設置為57 600,校驗位為NONE,數據位為8,停止位為1。設置完成后,在串口調試助手中手動發送GPIB接口的SCPI命令。
以發送*IDN?命令為例,串口調試助手下方輸入*IDN?,之后點擊發送,觀察串口調試助手接收窗口的顯示變化,這時會顯示Received String: Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2,其中Agilent Technologies,33250A,0,2.04-1.01-2.00-03-2是33250A接收到來自計算機串口的識別查詢命令后,要將自己的標識發往的計算機串口號。
5.2 RS-232與USB接口通信功能測試
分別通過USB接口線和RS-232接口線將計算機主機USB接口與接口轉換器USB接口相連,同時通過UART數據線將計算機的UART接口與接口轉換器的UART接口連接。
運行USB調試助手和串口調試助手,同時觀察USB接口發送數據到串口的情況。主機通過USB調試助手向協議轉換器發送8 B數據“6e 69 68 61 6f 6d 61 00”,這8 B數據ASCII碼對應的字符串為“nihaoma”,觀察USB調試助手接收區和串口調試助手的接收區,這時USB調試助手接收區顯示“6e 69 68 61 6f 6d 61 00”,串口調試助手的接收區顯示“usb received 8 bytes data is:nihaoma”。
系統基于SoPC平臺,采用軟硬件協同設計的方法完成了GPIB、UART和USB接口協議轉換器的設計。實現了RS-232接口的收發功能、USB設備控制器功能、GPIB接口的控者、聽者、講者、源方掛鉤、受方掛鉤五大功能,以及通過RS-232接口控制GPIB接口功能和通過USB接口控制RS-232接口功能。
參考文獻
[1] 吳杲,顧亞平,陳光礻禹 . USB-GPIB控制器設計[J].測控技術,2004,23(3):59-61.
[2] 李蘭英. Nios II 嵌入式軟核SoPC設計原理及應用[M]. 北京:航空航天大學出版社,2006.
[3] 黃君凱,吳延軍. RS232-GPIB控制器的設計[J]. 電子技術應用,2006,32(3):90-92.
[4] National Instruments Corp. Nat9914 Reference Manual[Z]. 1995.
[5] Philips Semiconductors. ISP1362 Embedded Programming Guide Rev: 0.9[Z]. 2002.
[6] [美] Jean J. Labrosse. 嵌入式實時操作系統?滋C/OS-II [M]. 邵貝貝,等譯. 第2版. 北京:北京航空航天大學出版社,2003.