USB2.0接口IP核的開發(fā)與設(shè)計
系統(tǒng)結(jié)構(gòu)設(shè)計
本文所設(shè)計的USB 2. 0 接口完全依據(jù)于USB 2. 0的協(xié)議,可以完成協(xié)議的處理和數(shù)據(jù)的交換。整個系統(tǒng)采用了MCU 固件和硬件電路相結(jié)合的設(shè)計方法,根據(jù)不同的功能以及軟硬件實現(xiàn)的難易程度,進行了相應(yīng)的模塊劃分。從圖1 中可以看出,硬件電路分成4 個模塊:收發(fā)器,USB 協(xié)議控制器,工作模式控制器和緩存控制器。這些模塊將在下面具體介紹。
根據(jù)協(xié)議可知,USB 定義了四種傳輸類型:控制傳輸、批量傳輸、中斷傳輸和同步傳輸。 其中控制傳輸是用于支持在設(shè)備和主機之間關(guān)于設(shè)置信息、命令信息和狀態(tài)信息的傳送,是必不可少的,而其他三種傳輸方式是真正有用的數(shù)據(jù)傳輸,是可選的。MCU 作為固件,其功能是協(xié)助完成USB 的控制傳輸,這可使設(shè)計簡單,因為如果這部分功能使用硬件電路來實現(xiàn)將會變得非常復(fù)雜。雖然單片機的速度很慢,遠遠低于硬件電路,但是對于整個系統(tǒng)來說,控制傳輸只發(fā)生在主機和設(shè)備連接的開始階段和其他傳輸之前,因此速度稍慢一些對整個系統(tǒng)的在傳輸速度方面的性能影響不大;但是對于其他傳輸方式,尤其是同步傳輸和批量傳輸來說,這樣會降低USB 2. 0 高速傳輸?shù)男阅?是不能容忍的,所以這就決定了其不能參與USB 其他方式的數(shù)據(jù)傳輸。
模塊設(shè)計
收發(fā)器( Transceiver)
根據(jù)UTMI(USB Transceiver Macrocell Interface) ①可知,USB 2. 0 接口的收發(fā)器主要負責(zé)時鐘和數(shù)據(jù)的恢復(fù)、位填充和位剝離、NRZI(非歸零反轉(zhuǎn)) 的編碼和解碼、串并和并串的轉(zhuǎn)換、同步字段和包結(jié)束碼的檢測和生成等功能,同時支持高速和全速傳輸,提供30 MHz(16 位并行數(shù)據(jù)) 時鐘和60 MHz(8位并行數(shù)據(jù)) 時鐘。
因為這部分是USB 2. 0 接口的模擬前端,并且是高速(480 MHz) 的串行信號處理,為了降低設(shè)計難度和減小開發(fā)周期,本文直接采用了CYPRESS 公司的CY7C 68000 芯片。
工作模式控制器( Work Mode Controller)
根據(jù)協(xié)議可知,從USB 設(shè)備連接到主機的USB 接口的過程中,USB 設(shè)備有多種可能的狀態(tài)。不同的狀態(tài)實現(xiàn)不同的功能。特別注意的是,如果USB 設(shè)備在一段特定的時間內(nèi)探測不到總線活動時,必須進入掛起態(tài),此時USB 設(shè)備保持當前的狀態(tài)、地址及配置,這樣可以有效地降低功耗。當檢測到總線上任何非空閑信號時,設(shè)備必須被喚醒,回到原來的工作狀態(tài)。
該模塊主要負責(zé)USB 設(shè)備的狀態(tài)轉(zhuǎn)換,包括設(shè)備與主機的高速握手信號檢測、主機復(fù)位信號檢測、掛起和喚醒狀態(tài)檢測等功能。具體的狀態(tài)轉(zhuǎn)化過程如圖2 所示。
當USB 設(shè)備剛剛和主機建立連接時,工作在全速狀態(tài),主機發(fā)送復(fù)位信號,在復(fù)位過程中,設(shè)備發(fā)送Chirp K 信號給主機,支持USB 2. 0 的主機接收到此信號后發(fā)送3 組交替的Chirp K和Chirp J信號。設(shè)備探測到此信號后,在復(fù)位信號結(jié)束后就工作在高速(480Mbps) 工作狀態(tài),否則USB 設(shè)備工作在全速(12 Mbps) 狀態(tài).當設(shè)備工作在高速模式下時,直接使用收發(fā)器提供的30MHz 的時鐘;當設(shè)備工作在全速模式下時,此模塊要對收發(fā)器提供的時鐘進行40分頻,然后再供給USB 的其他模塊單元。這是因為在全速工作模式時,數(shù)據(jù)傳輸?shù)拇兴俾适?2Mbps ,僅為高速傳輸?shù)?/ 40。檢測總線狀態(tài),當接收到來自主機的軟復(fù)位信號時,此模塊負責(zé)產(chǎn)生復(fù)位信號給整個USB 接口電路。處在任何一種狀態(tài)的設(shè)備都必須接收主機的復(fù)位信號。
檢測總線狀態(tài),當USB設(shè)備發(fā)現(xiàn)總線上的連續(xù)空閑(高速時總線狀態(tài)為SE0 ,全速時總線狀態(tài)為J ) 時間超過3 ms 時,該模塊產(chǎn)生掛起(suspend) 信號給整個USB 2. 0 接口電路,使之進入掛起狀態(tài),所有模塊都不工作,此時整個電路的功耗會變得很低;處在掛起狀態(tài)的設(shè)備,探測到總線上的非空閑(總線狀態(tài)一般為K態(tài)) 信號時則產(chǎn)生喚醒信號,使整個電路在一定時間內(nèi)回到全速或高速工作狀態(tài)。
USB協(xié)議控制器( USB Protocol Controller)
這部分是USB 2. 0 接口電路的核心單元,處理大部分USB2. 0 的協(xié)議請求,完成數(shù)據(jù)的通信。USB總線是一種輪訊方式的總線,主機控制端口初始化所有的數(shù)據(jù)傳輸。每一次傳輸可以由多個事務(wù)構(gòu)成,每一個事務(wù)最多可以傳送3個數(shù)據(jù)包,分別為標記包(Token Packet) 、數(shù)據(jù)包(Data Packet) 和握手包(Handshake Packet)。傳輸開始時,由標志包來標志數(shù)據(jù)的傳輸方向,然后發(fā)送端開始發(fā)送包含有用信息的數(shù)據(jù)包或者零數(shù)據(jù)的數(shù)據(jù)包(根據(jù)傳輸?shù)牟煌A段而有所不同) ,接收端則要相應(yīng)地發(fā)送一個握手包表明傳送。
該模塊的具體工作流程如圖3 所示,在接收數(shù)據(jù)時,首先對包標識符( PID) 進行解析,如果是標記包(Token Packet) ,則用5 位CRC 進行校驗; 如果校驗錯誤,則忽略該信息包,校驗正確后將數(shù)據(jù)送入USB 邏輯控制器,針對不同的PID 進行相應(yīng)的處理。如果是數(shù)據(jù)包(Data Packet) ,則用16 位CRC 校驗,然后將有效數(shù)據(jù)送入緩存控制器進行緩存,再根據(jù)傳輸類型,分別送入不同的模塊; 在控制傳輸方式下, 則將數(shù)據(jù)傳送給MCU ,利用MCU 完成主機對設(shè)備相應(yīng)的配置工作以及完成和主機配置方面的數(shù)據(jù)交換,在其他傳輸方式下,則直接通過DMA 總線將數(shù)據(jù)傳送到SDRAM 中存儲。
如果是握手包(handshake Packet) ,則不需要CRC 校驗,因為其已經(jīng)包含自身反碼的校驗字段,直接將解析后的PID 送入USB 邏輯控制器。在發(fā)送數(shù)據(jù)時,如果是數(shù)據(jù)包,首先從緩存控制器模塊得到所需數(shù)據(jù),然后生成16 位CRC 校驗碼和相應(yīng)數(shù)據(jù)包的PID ,傳送到收發(fā)器中進行發(fā)送;如果是握手包,則直接生成相應(yīng)握手包(ACK,NAK,STALL) 的PID ,然后送到收發(fā)器中發(fā)送.同時,USB 協(xié)議是通過切換從屬于數(shù)據(jù)發(fā)送器和接收器的時序位來實現(xiàn)高速數(shù)據(jù)傳輸同步的。僅在接收器接受到帶有正確的數(shù)據(jù)PID的無錯數(shù)據(jù)包時,接收器時序位才切換;而僅在數(shù)據(jù)發(fā)送器收到合法的ACK握手PID 時,發(fā)送器時序位才切換。如果同步失敗,則根據(jù)具體情況重傳或丟棄該數(shù)據(jù)包,這樣可以保證數(shù)據(jù)傳輸?shù)恼_性。
USB 邏輯控制器負責(zé)將設(shè)備的地址和端點號放入狀態(tài)寄存器,只有標記包中的地址(先使用缺省地址,然后更改為主機配置的地址) 正確時才接受相應(yīng)的數(shù)據(jù)包,然后根據(jù)標記包中的端點號來區(qū)分不同的傳輸模式:控制傳輸是雙向端口,只有一個端點號,一般將編號為0 的端點作為控制端點以響應(yīng)控制事務(wù)的輸入輸出;其他傳輸模式是單向端口,輸入和輸出方向都定義為不同的端點號。
pid控制相關(guān)文章:pid控制原理
pid控制器相關(guān)文章:pid控制器原理
評論