沈曉紅,李 凱,張艷婷
SHEN Xiao-hong, LI Kai, ZAHNG Yan-ting
(北京工商大學 材料與機械工程學院,北京 100048)
USB接口依靠其高速、支持熱插拔等特性,在外設接口類型中迅速崛起,逐漸成為PC機以及一些智能儀器與外設連接的普遍標準。同時,這也使得目前許多采用并口連接外設的專用測控儀器的使用受到了限制。因此,為這類儀器擴展USB接口勢在必行。另外,USB技術規范將USB進行數據傳輸的雙方分成兩種角色:主(Host)和從(Slave),并且規定數據只能在Host和Slave之間傳輸[1]。但在目前絕大多數的設備以及研究中,Host功能被集成在計算機上,基于USB的設備大部分都只集成了Slave功能,這樣USB設備必須依賴于PC機操作。為了脫離這種以計算機為核心的數據傳輸結構,使得USB設備應用于專業測控儀器,必須在這些儀器中實現USB主機功能。
基于此,本文作者采用Atmel公司的AVR系列單片機ATmega8和南京沁恒公司的USB接口芯片CH375設計了一款并口轉USB接口的轉接模塊,從而實現了上述的功能,使傳統測控設備能與USB主機系統高速通信。該模塊可以方便地移植進各種智能儀器中,為儀器擴展USB接口。
系統采用AVR高速單片機ATmega8作為單片機主控模塊。ATmega8是一款采用低功耗CMOS工藝生產的基于AVR RISC(精簡指令集)結構的8位單片機[2]。AVR單片機的核心是將32個工作寄存器和豐富的指令集連接在一起,所有的工作寄存器都與ALU(算術邏輯單元)直接相連,可在一個時鐘周期內用一條指令同時訪問(讀寫)2個獨立的寄存器。這種結構可提高代碼效率,使得大部分指令的執行時間僅為一個時鐘周期,故可達到將近1MIPS/MHZ的性能,運行速度比普通單片機高出10倍。
本系統選用南京沁恒公司生產的CH375芯片作為USB控制器。CH375是一個USB總線的接口芯片,具有接口簡單、價格低廉的優點。專用USB總線接口芯片內部不帶處理器,而僅僅負責處理USB通信,必須有一個外部的處理器來完成協議處理和數據交換。由于這些接口芯片依賴于外部的微處理器實現USB接口的全部功能,所以可以在保持原有硬件平臺基本不變的情況下,通過更改軟件模塊對原有設備進行維護或升級,因而可擴展性更強[3]。CH375支持USB-HOST主機方式和USB-DEVICE/SLAVE設備方式。在本地端,CH375具有8位數據總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機/DSP/MCU/MPU等控制器的系統總線上。在USB主機方式下,CH375還提供了串行通訊方式,通過串行輸入、串行輸出和中斷輸出與單片機/DSP/MCU/MPU等相連接。
系統硬件整體結構框圖如圖1所示。

圖1 硬件整體結構框圖
系統的硬件設計主要是單片機主控模塊設計和USB主控制器模塊設計。
下面以連接打印外設為例,介紹系統的工作原理:測控儀器將打印數據通過自身的并口傳送給單片機模塊,并暫存在單片機內部的數據緩沖區中,等待USB主控芯片模塊發出中斷請求,收到USB主控芯片發送的打印數據的中斷請求后,單片機把數據傳送給USB主控芯片,USB主控芯片再將打印數據通過USB總線發送給打印機,并在打印語言的控制下按要求格式打印出數據。系統總原理圖如圖2所示。
并口的信號、BUSY信號、ACK信號分別連接 ATmega8的 PD3、PC5和 PC4,8位數據線分別連接ATmega8的 PB0~PB3、PC0~PC3。USB接口芯片CH375在本地端采用串行接口與ATmega8通信,串口信號線包括:串行數據輸出引腳TXD、串行數據輸入引腳RXD和中斷輸出引腳INT#。通過串行接口,CH375可以用最少的連線與單片機進行較遠距離的點對點連接。CH375芯片的RXD和TXD可以分別連接到單片機的串行數據輸出引腳和串行數據輸入引腳。INT#輸出的中斷請求是低電平有效,用于通知單片機。ATmega8可以通過查詢或中斷的方式獲得中斷信號。數據線D+、D-用于收發USB總線傳輸的數據差分信號。

圖2 系統原理圖
單片機與CH375的通信主要靠單片機給CH375發命令和數據來完成,而CH375給出了許多常用命令以及操作狀態的代碼,比如:從USB中斷的端點緩沖區讀取數據塊命令CMD_RD_USB_DATA,向USB主機端點的發送緩沖區寫入數據塊命令CMD_WR_USB_DATA7等。因此,可以將這些命令做成函數,即通過函數實現該命令;然后在編寫其他函數時就可以直接調用這些命令函數。
系統軟件設計主要包括ATmega8及CH375的初始化、CH375與ATmega8的通信程序設計、USB外設的枚舉初始化、數據傳送等。本設計采用了ICCAVR編譯器來進行程序設計。
ATmega8的初始化主要是指其I/O口初始化和USART(通用同步和異步串行接收器和轉發器)的初始化。
I/O口的初始化程序如下:

USART(通用同步和異步串行接收器和轉發器)的初始化程序如下:

CH375的初始化主要是CH375復位并通過函數SET_USB_MODE(6)來設置其主機模式。
本設計中ATmega8采用USART(通用同步和異步串行接收器和轉發器)與CH375進行通信。CH375的串行數據格式是1個起始位、9個數據位、1個停止位,其中前8個數據位是一個字節數據,最后1個數據位是命令標志位。第9位為0時,前8位的數據被寫入CH375芯片中,第9位為1時,前8位被作為命令碼寫入CH375芯片中。
根據此串行數據格式,ATmega8采用9位數據位的幀格式。如果發送9位數據的數據幀(UCSZ=7),應先將數據的第9位寫入寄存器UCSRB的TXB8,然后再將低8位數據寫入發送數據寄存器UDR。接收數據時,在從UDR讀取低8位之前必須首先讀取寄存器UCSRB的RXB8以獲得第9位數據。據此編寫的向CH375寫命令、寫數據以及從CH375讀數據的程序如下:
向CH375寫命令子程序:

向CH375寫數據子程序:

在USB設備首次連接到主機上之后,要接受主機的枚舉。其具體過程如下:
1)主機檢測設備的連接,發出復位信號:當USB外設連接到主機之后,通過CH375提供的命令代碼CMD_GET_STATUS來獲取CH375的中斷狀態,如果返回狀態代碼USB_INT_CONNECT,則表明檢測到USB外設的連接。檢測到后,主機等待100ms以使設備的接入過程順利完成,并使供電穩定,并向USB信號線的D+和D-輸出低電平,復位USB外設。
2)USB外設缺省狀態:集線器在設備接入的端口上保持復位命令10ms,這時設備處于缺省狀態,并通過地址0與主機通信。
3)讀取設備描述符:主機獲取USB外設的設備描述符,獲得缺省管道的最大數據長度等一系列信息,并確認USB設備的屬性。此過程主要通過CH375提供的命令代碼CMD_GET_DESCR(1)來獲取設備描述符,數據傳輸完成后,將獲取的描述符數據從CH375中讀出到單片機的RAM緩沖區中,并返回描述符的長度。
4)地址分配:主機給設備分配一個總線上的惟一地址,使設備進入地址態。以后,設備就將使用這個新地址。此過程主要通過命令代碼CMD_SET_ADDRESS和CMD_SET_USB_ADDR分別對USB設備端和主機端設置地址。
5)讀取配置描述符:主機通過命令代碼CMD_GET_DESCR(2)獲取USB外設的配置描述符,將獲取的描述符數據從CH375中讀出到單片機的RAM緩沖區中,并返回描述符的長度。
6)配置USB設備:在得到配置描述符等一系列信息后,主機就給該設備分配配置值。此過程通過命令代碼CMD_SET_CONFIG來實現。
USB外設枚舉初始化的程序如下:



USB的數據同步通過切換DATA0和DATA1實現;在設備端,USB外設可以自動切換;在主機端,必須由CMD_SET_ENDP6和CMD_SET_ENDP7命令控制CH375切換DATA0與DATA1實現。主機端的程序處理方法是為設備端的各個端點分別提供一個全局變量,初始值均為DATA0,每執行一次成功事務后取反,每執行一次失敗事務后將其復位為DATA1。
根據USB批量傳輸協議,在進行數據批量傳輸前,先判斷數據長度len是否大于端點尺寸endp_out_size;如果大于,則此次發送的數據長度為endp_out_siae;反之為len。每次成功發送數據后,需要計算剩余的數據長度,并與端點尺寸進行比較,從而決定要發送的數據長度,直到全部數據發送完成。
數據批量傳輸部分程序如下:


本設計采用AVR高速單片機ATmega8作為USB主機處理器,采用國產芯片CH375作為USB主控芯片,實現了并口到USB接口的轉換,從而實現與USB主機系統的高速通信,為測控儀器擴展了USB接口。該轉接模塊抗干擾能力強、可靠性高、連接靈活、使用方便,已成功應用在諸如便攜式數字化超聲波探傷儀等專用測控儀器中,并取得了良好的效果。
[1]Universal Serial Bus Specification Revision 1.1 [S].http∶ //www.usb.Org, 1998.
[2]馬潮, 等.ATmega8原理及應用手冊[M].清華大學出版社, 2003.
[3]李肇慶, 廖峰, 劉建存.USB接口技術[M].國防工業出版社, 2004.
[4]CH375中文手冊.南京沁恒公司.
[5]馬偉.計算機USB系統原理及其主/從機設計[M].北京航空航天大學出版社, 2004.
[6]梁建均.32位視窗系統串行通訊的串口設置[J].安陽師范學院學報, 2002.
[7]馮星華, 張海洪.PLC與個人計算機間串行通訊及程序設計[J].機電一體化, 2000.
[8]王芙蓉, 黃載祿.一種可擴展的移動通訊系統HLR設計方案.[J].華中科技大學學報, 2001.
[9]羅耀華, 劉昕.用于DSP的多串口擴展通訊模塊設計[J].一重技術, 2007.
[10]張文超, 盧可義, 劉振方.幾種可用于測控儀器的串行總線研究和應用選擇原則[J].測控技術, 2005.