隨著PC機和外圍設備的發展,傳統的并行接口和串行接口RS-232在易用性(即插即用) 和端口擴展等方面存在著一定的缺陷,這就使之越來越成為通信的瓶頸,因此通用串行總線(universal serial bus,USB)接口也就應運而生。1994年Compaq,IBM,Intel,Microsoft ,NEC 等公司共同提出了USB 協議規范,1996 年制定出了比較成熟的USB 1.1協議標準,最高傳輸速度為12Mbps。隨著通信的發展,其速度明顯不能滿足需求,因此2000年提出了USB 2.0標準,增加了高速模式,使傳輸速度提高了40倍,達到了480 Mbps.憑借價格低廉、使用簡單、協議靈活,接口標準化和易于端口擴展等優點,USB 接口被越來越多的外圍設備所應用。
系統結構設計
本文所設計的USB 2. 0 接口完全依據于USB 2. 0的協議,可以完成協議的處理和數據的交換。整個系統采用了MCU 固件和硬件電路相結合的設計方法,根據不同的功能以及軟硬件實現的難易程度,進行了相應的模塊劃分。從圖1 中可以看出,硬件電路分成4 個模塊:收發器,USB 協議控制器,工
根據協議可知,USB 定義了四種傳輸類型:控制傳輸、批量傳輸、中斷傳輸和同步傳輸。 其中控制傳輸是用于支持在設備和主機之間關于設置信息、命令信息和狀態信息的傳送,是必不可少的,而其他三種傳輸方式是真正有用的數據傳輸,是可選的。MCU 作為固件,其功能是協助完成USB 的控制傳輸,這可使設計簡單,因為如果這部分功能使用硬件電路來實現將會變得非常復雜。雖然單片機的速度很慢,遠遠低于硬件電路,但是對于整個系統來說,控制傳輸只發生在主機和設備連接的開始階段和其他傳輸之前,因此速度稍慢一些對整個系統的在傳輸速度方面的性能影響不大;但是對于其他傳輸方式,尤其是同步傳輸和批量傳輸來說,這樣會降低USB 2. 0 高速傳輸的性能,是不能容忍的,所以這就決定了其不能參與USB 其他方式的數據傳輸。
模塊設計
收發器( Transceiver)
根據UTMI(USB Transceiver Macrocell InteRFace) ①可知,USB 2. 0 接口的收發器主要負責時鐘和數據的恢復、位填充和位剝離、NRZI(非歸零反轉) 的編碼和解碼、串并和并串的轉換、同步字段和包結束碼的檢測和生成等功能,同時支持高速和全速傳輸,提供30 MHz(16 位并行數據) 時鐘和60 MHz(8位并行數據) 時鐘。
因為這部分是USB 2. 0 接口的模擬前端,并且是高速(480 MHz) 的串行信號處理,為了降低設計難度和減小開發周期,本文直接采用了CYPRESS 公司的CY7C 68000 芯片。
工作模式控制器( Work Mode Controller)
根據協議可知,從USB 設備連接到主機的USB 接口的過程中,USB 設備有多種可能的狀態。不同的狀態實現不同的功能。特別注意的是,如果USB 設備在一段特定的時間內探測不到總線活動時,必須進入掛起態,此時USB 設備保持當前的狀態、地址及配置,這樣可以有效地降低功耗。當檢測到總線上任何非空閑信號時,設備必須被喚醒,回到原來的工作狀態。
USB協議控制器( USB Protocol Controller)
這部分是USB 2. 0 接口電路的核心單元,處理大部分USB2. 0 的協議請求,完成數據的通信。USB總線是一種輪訊方式的總線,主機控制端口初始化所有的數據傳輸。每一次傳輸可以由多個事務構成,每一個事務最多可以傳送3個數據包,分別為標記包(Token Packet) 、數據包(Data Packet) 和握手包(Handshake Packet)。傳輸開始時,由標志包來標志數據的傳輸方向,然后發送端開始發送包含有用信息的數據包或者零數據的數據包(根據傳輸的不同階段而有所不同) ,接收端則要相應地發送一個握手包表明傳送。
該模塊的具體工作流程如圖3 所示,在接收數據時,首先對包標識符( PID) 進行解析,如果是標記包(Token Packet) ,則用5 位CRC 進行校驗; 如果校驗錯誤,則忽略該信息包,校驗正確后將數據送入USB 邏輯控制器,針對不同的PID 進行相應的處理。如果是數據包(Data
如果是握手包(handshake Packet) ,則不需要CRC 校驗,因為其已經包含自身反碼的校驗字段,直接將解析后的PID 送入USB 邏輯控制器。在發送數據時,如果是數據包,首先從緩存控制器模塊得到所需數據,然后生成16 位CRC 校驗碼和相應數據包的PID ,傳送到收發器中進行發送;如果是握手包,則直接生成相應握手包(ACK,NAK,STALL) 的PID ,然后送到收發器中發送.同時,USB 協議是通過切換從屬于數據發送器和接收器的時序位來實現高速數據傳輸同步的。僅在接收器接受到帶有正確的數據PID的無錯數據包時,接收器時序位才切換;而僅在數據發送器收到合法的ACK握手PID 時,發送器時序位才切換。如果同步失敗,則根據具體情況重傳或丟棄該數據包,這樣可以保證數據傳輸的正確性。
USB 邏輯控制器負責將設備的地址和端點號放入狀態寄存器,只有標記包中的地址(先使用缺省地址,然后更改為主機配置的地址) 正確時才接受相應的數據包,然后根據標記包中的端點號來區分不同的傳輸模式:控制傳輸是雙向端口,只有一個端點號,一般將編號為0 的端點作為控制端點以響應控制事務的輸入輸出;其他傳輸模式是單向端口,輸入和輸出方向都定義為不同的端點號。
緩存控制器( Buffer Controller)
緩存控制器負責暫時存儲接收或發送的數據,這些數據來自設備端的外部SDRAM或者主機。考慮到USB 2. 0 高速數據的傳輸要求,減小存儲或讀取數據的等待時間,本文采用了雙緩沖區的緩存結構,硬件電路可以自動在兩個緩沖區間進行轉換,這樣就可以同時對不同RAM分別讀寫,減少等待時間,提高了傳輸效率。不同的傳輸方式應該有不同的專用緩沖區(主要是區別控制傳輸和其他傳輸方式) ,但是為了節省RAM的硬件開銷,本文采用了控制傳輸和其他傳輸方式緩沖區復用的結構。這種緩存結構也是整個USB 2. 0 接口硬件設計電路的特點之一。如圖4 所示,在控制傳輸時,使用每個RAM地址為00H—31H 的存儲空間,因為控制傳輸的最大數據包容量為32 ×16 位;在其他傳輸方式時,使用每個RAM地址為00H—FFH的存儲空間,數據包的最大容量為256 ×16 位。由此可知,每個RAM的大小為4 種傳輸方式中最大數據包的容量———512 字節。
本文設計的緩存結構要求緩存控制器對不同的傳輸方式加以區分,相應增加了一些控制邏輯的復雜度。對于控制傳輸,數據是在USB 協議控制器和MCU 之間傳輸;對于其他傳輸方式,數據則是在USB 協議控制器和DMA(Direct Memory Access) 之間傳輸。總體來說,這種緩存結構是非常合理且有效的:節省硬件開銷,而且保證傳輸速度。
MCU(Micro Control Unit)
MCU 采用的是51 系列的89C52 ,這部分是固件程序,負責協助完成控制傳輸,即USB 設備功能與設置配置的工作,利用MCU 可以降低硬件復雜度和硬件開銷。在控制傳輸中,利用MCU 的中斷程序來及時處理相應的數據交換,在批量傳輸時,MCU 幾乎不參與工作,這是因為其工作速度較慢,不能滿足大量數據傳輸對速度傳輸要求,影響傳輸效率。因為這部分不是硬件電路設計,所以就不再贅述了。
該模塊主要負責USB 設備的狀態轉換,包括設備與主機的高速握手信號檢測、主機復位信號檢測、掛起和喚醒狀態檢測等功能。具體的狀態轉化過程如圖2 所示。
當USB 設備剛剛和主機建立連接時,工作在全速狀態,主機發送復位信號,在復位過程中,設備發送Chirp K 信號給主機,支持USB 2. 0 的主機接收到此信號后發送3 組交替的Chirp K和Chirp J信號。設備探測到此信號后,在復位信號結束后就工作在高速(480Mbps) 工作狀態,否則USB 設備工作在全速(12 Mbps) 狀態.當設備工作在高速模式下時,直接使用收發器提供的30MHz 的時鐘;當設備工作在全速模式下時,此模塊要對收發器提供的時鐘進行40分頻,然后再供給USB 的其他模塊單元。這是因為在全速工作模式時,數據傳輸的串行速率是12Mbps ,僅為高速傳輸的1/ 40。檢測總線狀態,當接收到來自主機的軟復位信號時,此模塊負責產生復位信號給整個USB 接口電路。處在任何一種狀態的設備都必須接收主機的復位信號。
檢測總線狀態,當USB設備發現總線上的連續空閑(高速時總線狀態為SE0 ,全速時總線狀態為J ) 時間超過3 ms 時,該模塊產生掛起(suspend) 信號給整個USB 2. 0 接口電路,使之進入掛起狀態,所有模塊都不工作,此時整個電路的功耗會變得很低;處在掛起狀態的設備,探測到總線上的非空閑(總線狀態一般為K態) 信號時則產生喚醒信號,使整個電路在一定時間內回到全速或高速工作狀態。
測試方案及測試結果測試電路
設計了一個測試電路來驗證USB 2. 0 接口電路功能的正確性,如圖5 所示。在原USB 2. 0 接口電路的基礎上,添加了MCU 接口、DMA(Direct Memory Access) 、EPP(Enhanced Parallel Port) 和SDRAM。MCU 負責控制整個電路系統中各個模塊的協調工作。這個測試電路實際上基于數碼相機電路系統,USB 為該系統與主機的接口電路。
在測試USB 上傳數據給主機時,主機先通過EPP 將數據下載到SDRAM中,然后緩存控制器通過DMA總線將數據從SDRAM中讀出來,傳送給USB 協議控制器,經過USB 協議控制器的打包處理,數據通過收發器傳送給主機。通過上傳到主機的數據和原數據的對比,就可以驗證傳送數據的正確性。
下傳數據則和上傳數據的驗證過程類似. 或者直接通過USB 先下傳然后再上傳來驗證數據的正確性。值得一提的是,MCU 接口、DMA ,EPP 和SDRAM這幾個模塊沒有使用收發器芯片提供的30 MHz 時鐘,而是使用了
測試結果
上述硬件電路使用ISE 軟件綜合后下載到Xilinx 的SPARTAN2XC2S2002PQ208AFP0049 ,其規模大小為20 萬門,該FPGA 芯片的工作電壓為3. 3 V。綜合結果為:硬件邏輯開銷為1670 Slices ,RAM開銷為1 KB ,時鐘最快可達45 MHz ,這完全能夠滿足整個USB 2. 0 接口電路30 MHz 的工作頻率要求。利用邏輯分析儀和Bus Hound 軟件進行相應的邏輯功能分析,通過仔細的測試工作可知,在和主機建立連接后,整個USB 2. 0 接口電路可以和主機正常通信。因為整個電路主要應用于數碼相機的專用集成電路中,所以著重測試了控制傳輸和批量傳輸這兩種數據傳輸方式。
相應的測試結果為:USB 2. 0 接口電路功能正確,在高速,全速和掛起狀態下的功耗(包括收發器以及其他的輔助模塊EPP , SDRAM 等) 分別為:584 ,254 ,102 mw。批量傳輸的有效數據傳輸速率可以達到100 Mbps ,沒有達到當然也不可能達到USB 2. 0 協議所規定的480 Mbps ,這是傳輸帶寬的限制和數據包中冗余信息(包開始符、包結束符、同步字段以及校驗碼) 的存在所導致的,同時在USB 接口電路內部緩存通過DMA總線和SDRAM交互數據的時候,由于DMA 總線速度的限制,緩存也增加了一定的等待時間??傮w來講,100Mbps 的批量傳輸速率還是令人滿意的。
本文提出的USB 2. 0 接口電路系統,兼顧了軟硬件的優缺點,硬件電路與單片機有效結合使用,硬件實現簡單,造價低廉. 同時為了實現較高的傳輸速率,滿足USB 2. 0 高速傳輸的要求,并有效節省RAM,電路采用了不同傳輸方式緩沖區復用的雙緩沖區的緩存結構。在FPGA 的驗證過程中,為了實現測試的方便性,部分電路采用了異步的工作模式。整個模塊已經通過FPGA 驗證,功能正確?,F在FPGA 的驗證工作已經完成,下一步的任務就是在此基礎上實現USB 2. 0 接口電路的芯片設計。
評論
查看更多