USB OTG的IP Core設計與FPGA驗證
繼USB協議公布后,USB憑借其占用系統資源少、廉價、通用、可熱插拔等優點,成為通用的串行接口總線。當前,絕大部分計算機外圍設備(如打印機、MP3、移動硬盤等)均采用USB接口。但隨著USB接口應用的普及,基于USBl.x和USB2.O規范的USB接口逐漸暴露其缺點。由于USB總線是主從式結構,且設備的主從特性在設備設計時就已經固定,這樣就很不利于設備間點對點的數據傳輸。這種以計算機為核心的數據傳輸結構,非常不利于USB總線在嵌入式行業的應用,因為這些設備一般都要求具有與計算機通信的USB設備功能,同時也要求具有連接其他USB設備的主機功能。為了解決這一問題,USB OTG規范作為USB2.O規范的補充出臺了。本文介紹一款USB OTG IP核的設計與實現,該設備控制器可作為IP核用于SoC系統中,完成與主機控制器的通信,并能與普通的USB從設備進行通信。
1 USB OTG的工作原理
OTGl.Oa補充規范對USB2.O進行的最重要擴展是其更具節能性、電源管理,并允許設備以主機和外設2種形式工作。OTG有兩種設備類型:兩用OTG設備(dual―role 0TG device)和外設式OTG設備(peripher一al_only 0TG device)。兩用0TG設備完全符合USB2.O規范,同時提供有限的主機能力和一個Mini―AB插座,支持主機流通協議(IIost Negotiation Protocol,HNP)”。,且同外設式OTG設備一樣支持事務請求協議(SessionRequest Protocol,SRP)。當作為主機工作時,兩用0TG設備可在總線上提供8 mA的電流,而以往標準主機則需要提供100~500 mA的電流。2個兩用OTG設備連接在一起時可交替以主機和從機的方式工作,這個特點兼容了現有USB規范主機/外設的結構模型。OTG主機負責初始化數據通信,比如總線復位、獲取各種USB描述符和配置設備。這些配置完成后,2個OTG設備便可分別以主機和從機方式傳輸信息,2個設備主從角色交換的過程由主機流通協議定義。
2 IP設計原理和IP模塊設計
USB 0TG控制器芯片按結構分類,通常分為以下2種:
①專為USB OTG設計的芯片。這類芯片集成了微控制器,是完全按照協議設計的,而不是在舊的結構上增加功能。其結構不同于其他常用控制芯片,開發者需要較長的學習時間,但是它能夠達到最優化。
②需要外部微處理器的接口芯片。有些USB控制器只處理USB通信,而且必須由外部微處理器來控制。這種實現接口的標準組件使得使用者可以在各種不同類型的微控制器中選擇一種最適合的微控制器,通過使用已有的結構和減少固件上的投資來縮短開發時間,減少開發風險和費用。但由于外接一個處理器,增加了電路的復雜性。
本文設計的USB OTG IP核采用第2種方式,所采用的處理器是Nios。根據對USB OTG規范的理解,USB0TG控制器應該具有以下的功能:HNP和SRP協議的實現,主機工作模式和設備工作模式。系統結構框圖如圖1所示。
UTMI+接口需要外接一個符合USB 2.0 UTMI+協議的收發器。該芯片用作USB2.O接口的模擬前端,處理由USB2.O接口發出的高速和模擬信號,對其發出的用NRZI方式編碼的數據進行解碼、位填充等,并將串行數據轉換成并行數據;反之,該芯片對由本控制器發出的并行數據通過其內部的差分驅動電路進行串行化、位填充和NRZI編碼,并輸出到USB電纜上。該接口模塊主要用于緩存發送和接收的數據,確保與外圍收發芯片的無縫結合,以及掛起、恢復和復位的檢測。
OTG控制器實現USB OTG補充協議的功能。該模塊主要負責HNP、SRP的硬件實現,以及連接狀態的檢測。
主機控制器實現IP核工作在主機模式的功能。該模塊主要產生掛起、恢復、復位信號,主動發送get_descip―tor、set_address、set_configuration等標準請求,并把請求變成對應的USB數據包格式(比如TOKEN包加入PID、地址、端點和5位的CRC校驗碼等);隔固定的時間向從設備發送SOF標志,并根據配置的結果產生對應的主機中斷。
設備控制器實現IP核工作在設備模式的功能。該模塊主要負責接收標準的USB請求,比如接收SOF標志、IN標志、OUT標志等,并根據這些請求作出正確的響應以及檢測復位、掛起信號。
控制狀態寄存器完成對IP核控制器內部狀態的設置。它分成2種類型:一種是基本的控制狀態寄存器,比如控制狀態寄存器(指定USB的速率模式、掛起模式、連接狀態、主從模式),設備地址寄存器(存放主機分配給USB設備的地址),中斷屏蔽寄存器(使能對應中斷)和中斷源寄存器(Nios控制器通過讀此寄存器來判斷中斷類型);另一種是端點寄存器控制狀態寄存器,如中斷源寄存器、中斷屏蔽寄存器、緩沖區的指針寄存器和大小寄存器,模塊中實現時根據輸入的地址和讀寫信號來對某一個寄存器進行相應的讀寫操作。
存儲器接口實現IP核內部數據與Nios控制器數據的之間的仲裁。當Nios控制器和IP核內部同時對外部存儲器SRAM進行讀寫訪問時,必須對它們進行數據的仲裁。默認的優先級為IP核內部數據優先級高于Nios控制器的數據優先級。
Nios控制器接口實現USB IP核與外部微控制器(Nios)的數據通信。該接口符合Avalon總線規范,通過輸入地址的最高位來判斷Nios是對內部寄存器進行訪問還是對SRAM存儲器進行訪問,并完成地址、數據和相關信號的處理。
評論