沈曉紅,李 凱,張艷婷
SHEN Xiao-hong, LI Kai, ZAHNG Yan-ting
(北京工商大學 材料與機械工程學院,北京 100048)
USB接口依靠其高速、支持熱插拔等特性,在外設接口類型中迅速崛起,逐漸成為PC機以及一些智能儀器與外設連接的普遍標準。同時,這也使得目前許多采用并口連接外設的專用測控儀器的使用受到了限制。因此,為這類儀器擴展USB接口勢在必行。另外,USB技術規(guī)范將USB進行數(shù)據(jù)傳輸?shù)碾p方分成兩種角色:主(Host)和從(Slave),并且規(guī)定數(shù)據(jù)只能在Host和Slave之間傳輸[1]。但在目前絕大多數(shù)的設備以及研究中,Host功能被集成在計算機上,基于USB的設備大部分都只集成了Slave功能,這樣USB設備必須依賴于PC機操作。為了脫離這種以計算機為核心的數(shù)據(jù)傳輸結構,使得USB設備應用于專業(yè)測控儀器,必須在這些儀器中實現(xiàn)USB主機功能。
基于此,本文作者采用Atmel公司的AVR系列單片機ATmega8和南京沁恒公司的USB接口芯片CH375設計了一款并口轉USB接口的轉接模塊,從而實現(xiàn)了上述的功能,使傳統(tǒng)測控設備能與USB主機系統(tǒng)高速通信。該模塊可以方便地移植進各種智能儀器中,為儀器擴展USB接口。
系統(tǒng)采用AVR高速單片機ATmega8作為單片機主控模塊。ATmega8是一款采用低功耗CMOS工藝生產(chǎn)的基于AVR RISC(精簡指令集)結構的8位單片機[2]。AVR單片機的核心是將32個工作寄存器和豐富的指令集連接在一起,所有的工作寄存器都與ALU(算術邏輯單元)直接相連,可在一個時鐘周期內(nèi)用一條指令同時訪問(讀寫)2個獨立的寄存器。這種結構可提高代碼效率,使得大部分指令的執(zhí)行時間僅為一個時鐘周期,故可達到將近1MIPS/MHZ的性能,運行速度比普通單片機高出10倍。
本系統(tǒng)選用南京沁恒公司生產(chǎn)的CH375芯片作為USB控制器。CH375是一個USB總線的接口芯片,具有接口簡單、價格低廉的優(yōu)點。專用USB總線接口芯片內(nèi)部不帶處理器,而僅僅負責處理USB通信,必須有一個外部的處理器來完成協(xié)議處理和數(shù)據(jù)交換。由于這些接口芯片依賴于外部的微處理器實現(xiàn)USB接口的全部功能,所以可以在保持原有硬件平臺基本不變的情況下,通過更改軟件模塊對原有設備進行維護或升級,因而可擴展性更強[3]。CH375支持USB-HOST主機方式和USB-DEVICE/SLAVE設備方式。在本地端,CH375具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機/DSP/MCU/MPU等控制器的系統(tǒng)總線上。在USB主機方式下,CH375還提供了串行通訊方式,通過串行輸入、串行輸出和中斷輸出與單片機/DSP/MCU/MPU等相連接。
系統(tǒng)硬件整體結構框圖如圖1所示。
圖1 硬件整體結構框圖
系統(tǒng)的硬件設計主要是單片機主控模塊設計和USB主控制器模塊設計。
下面以連接打印外設為例,介紹系統(tǒng)的工作原理:測控儀器將打印數(shù)據(jù)通過自身的并口傳送給單片機模塊,并暫存在單片機內(nèi)部的數(shù)據(jù)緩沖區(qū)中,等待USB主控芯片模塊發(fā)出中斷請求,收到USB主控芯片發(fā)送的打印數(shù)據(jù)的中斷請求后,單片機把數(shù)據(jù)傳送給USB主控芯片,USB主控芯片再將打印數(shù)據(jù)通過USB總線發(fā)送給打印機,并在打印語言的控制下按要求格式打印出數(shù)據(jù)。系統(tǒng)總原理圖如圖2所示。
并口的信號、BUSY信號、ACK信號分別連接 ATmega8的 PD3、PC5和 PC4,8位數(shù)據(jù)線分別連接ATmega8的 PB0~PB3、PC0~PC3。USB接口芯片CH375在本地端采用串行接口與ATmega8通信,串口信號線包括:串行數(shù)據(jù)輸出引腳TXD、串行數(shù)據(jù)輸入引腳RXD和中斷輸出引腳INT#。通過串行接口,CH375可以用最少的連線與單片機進行較遠距離的點對點連接。CH375芯片的RXD和TXD可以分別連接到單片機的串行數(shù)據(jù)輸出引腳和串行數(shù)據(jù)輸入引腳。INT#輸出的中斷請求是低電平有效,用于通知單片機。ATmega8可以通過查詢或中斷的方式獲得中斷信號。數(shù)據(jù)線D+、D-用于收發(fā)USB總線傳輸?shù)臄?shù)據(jù)差分信號。
圖2 系統(tǒng)原理圖
單片機與CH375的通信主要靠單片機給CH375發(fā)命令和數(shù)據(jù)來完成,而CH375給出了許多常用命令以及操作狀態(tài)的代碼,比如:從USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊命令CMD_RD_USB_DATA,向USB主機端點的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊命令CMD_WR_USB_DATA7等。因此,可以將這些命令做成函數(shù),即通過函數(shù)實現(xiàn)該命令;然后在編寫其他函數(shù)時就可以直接調(diào)用這些命令函數(shù)。
系統(tǒng)軟件設計主要包括ATmega8及CH375的初始化、CH375與ATmega8的通信程序設計、USB外設的枚舉初始化、數(shù)據(jù)傳送等。本設計采用了ICCAVR編譯器來進行程序設計。
ATmega8的初始化主要是指其I/O口初始化和USART(通用同步和異步串行接收器和轉發(fā)器)的初始化。
I/O口的初始化程序如下:
USART(通用同步和異步串行接收器和轉發(fā)器)的初始化程序如下:
CH375的初始化主要是CH375復位并通過函數(shù)SET_USB_MODE(6)來設置其主機模式。
本設計中ATmega8采用USART(通用同步和異步串行接收器和轉發(fā)器)與CH375進行通信。CH375的串行數(shù)據(jù)格式是1個起始位、9個數(shù)據(jù)位、1個停止位,其中前8個數(shù)據(jù)位是一個字節(jié)數(shù)據(jù),最后1個數(shù)據(jù)位是命令標志位。第9位為0時,前8位的數(shù)據(jù)被寫入CH375芯片中,第9位為1時,前8位被作為命令碼寫入CH375芯片中。
根據(jù)此串行數(shù)據(jù)格式,ATmega8采用9位數(shù)據(jù)位的幀格式。如果發(fā)送9位數(shù)據(jù)的數(shù)據(jù)幀(UCSZ=7),應先將數(shù)據(jù)的第9位寫入寄存器UCSRB的TXB8,然后再將低8位數(shù)據(jù)寫入發(fā)送數(shù)據(jù)寄存器UDR。接收數(shù)據(jù)時,在從UDR讀取低8位之前必須首先讀取寄存器UCSRB的RXB8以獲得第9位數(shù)據(jù)。據(jù)此編寫的向CH375寫命令、寫數(shù)據(jù)以及從CH375讀數(shù)據(jù)的程序如下:
向CH375寫命令子程序:
向CH375寫數(shù)據(jù)子程序:
在USB設備首次連接到主機上之后,要接受主機的枚舉。其具體過程如下:
1)主機檢測設備的連接,發(fā)出復位信號:當USB外設連接到主機之后,通過CH375提供的命令代碼CMD_GET_STATUS來獲取CH375的中斷狀態(tài),如果返回狀態(tài)代碼USB_INT_CONNECT,則表明檢測到USB外設的連接。檢測到后,主機等待100ms以使設備的接入過程順利完成,并使供電穩(wěn)定,并向USB信號線的D+和D-輸出低電平,復位USB外設。
2)USB外設缺省狀態(tài):集線器在設備接入的端口上保持復位命令10ms,這時設備處于缺省狀態(tài),并通過地址0與主機通信。
3)讀取設備描述符:主機獲取USB外設的設備描述符,獲得缺省管道的最大數(shù)據(jù)長度等一系列信息,并確認USB設備的屬性。此過程主要通過CH375提供的命令代碼CMD_GET_DESCR(1)來獲取設備描述符,數(shù)據(jù)傳輸完成后,將獲取的描述符數(shù)據(jù)從CH375中讀出到單片機的RAM緩沖區(qū)中,并返回描述符的長度。
4)地址分配:主機給設備分配一個總線上的惟一地址,使設備進入地址態(tài)。以后,設備就將使用這個新地址。此過程主要通過命令代碼CMD_SET_ADDRESS和CMD_SET_USB_ADDR分別對USB設備端和主機端設置地址。
5)讀取配置描述符:主機通過命令代碼CMD_GET_DESCR(2)獲取USB外設的配置描述符,將獲取的描述符數(shù)據(jù)從CH375中讀出到單片機的RAM緩沖區(qū)中,并返回描述符的長度。
6)配置USB設備:在得到配置描述符等一系列信息后,主機就給該設備分配配置值。此過程通過命令代碼CMD_SET_CONFIG來實現(xiàn)。
USB外設枚舉初始化的程序如下:
USB的數(shù)據(jù)同步通過切換DATA0和DATA1實現(xiàn);在設備端,USB外設可以自動切換;在主機端,必須由CMD_SET_ENDP6和CMD_SET_ENDP7命令控制CH375切換DATA0與DATA1實現(xiàn)。主機端的程序處理方法是為設備端的各個端點分別提供一個全局變量,初始值均為DATA0,每執(zhí)行一次成功事務后取反,每執(zhí)行一次失敗事務后將其復位為DATA1。
根據(jù)USB批量傳輸協(xié)議,在進行數(shù)據(jù)批量傳輸前,先判斷數(shù)據(jù)長度len是否大于端點尺寸endp_out_size;如果大于,則此次發(fā)送的數(shù)據(jù)長度為endp_out_siae;反之為len。每次成功發(fā)送數(shù)據(jù)后,需要計算剩余的數(shù)據(jù)長度,并與端點尺寸進行比較,從而決定要發(fā)送的數(shù)據(jù)長度,直到全部數(shù)據(jù)發(fā)送完成。
數(shù)據(jù)批量傳輸部分程序如下:
本設計采用AVR高速單片機ATmega8作為USB主機處理器,采用國產(chǎn)芯片CH375作為USB主控芯片,實現(xiàn)了并口到USB接口的轉換,從而實現(xiàn)與USB主機系統(tǒng)的高速通信,為測控儀器擴展了USB接口。該轉接模塊抗干擾能力強、可靠性高、連接靈活、使用方便,已成功應用在諸如便攜式數(shù)字化超聲波探傷儀等專用測控儀器中,并取得了良好的效果。
[1]Universal Serial Bus Specification Revision 1.1 [S].http∶ //www.usb.Org, 1998.
[2]馬潮, 等.ATmega8原理及應用手冊[M].清華大學出版社, 2003.
[3]李肇慶, 廖峰, 劉建存.USB接口技術[M].國防工業(yè)出版社, 2004.
[4]CH375中文手冊.南京沁恒公司.
[5]馬偉.計算機USB系統(tǒng)原理及其主/從機設計[M].北京航空航天大學出版社, 2004.
[6]梁建均.32位視窗系統(tǒng)串行通訊的串口設置[J].安陽師范學院學報, 2002.
[7]馮星華, 張海洪.PLC與個人計算機間串行通訊及程序設計[J].機電一體化, 2000.
[8]王芙蓉, 黃載祿.一種可擴展的移動通訊系統(tǒng)HLR設計方案.[J].華中科技大學學報, 2001.
[9]羅耀華, 劉昕.用于DSP的多串口擴展通訊模塊設計[J].一重技術, 2007.
[10]張文超, 盧可義, 劉振方.幾種可用于測控儀器的串行總線研究和應用選擇原則[J].測控技術, 2005.