670 likes | 882 Views
USB 裝置控制器. 大綱. USB 概觀 裝置組態 USB 協定 UDC 操作 UDC 暫存器定義. USB 概觀. 通用序列匯流排裝置控制器( UDC ): 遵循 USB 標準及支援所有主機發出的標準裝置請求 。 支援 16 個端點 (endpoints) 。 12 Mbps 。 半雙工 。. USB 概觀 (cont.). UDC 資料傳送欄位( Field ): 同步( Sync ) 封包識別字( PID ) 位址( Address ) 端點( Endpoint ) 訊框數目( Frame Number ) 資料( Data )
E N D
USB 裝置控制器 8- 1
大綱 • USB概觀 • 裝置組態 • USB協定 • UDC操作 • UDC暫存器定義 8-2
USB概觀 • 通用序列匯流排裝置控制器(UDC): • 遵循USB標準及支援所有主機發出的標準裝置請求。 • 支援16個端點(endpoints) 。 • 12 Mbps。 • 半雙工。 8-3
USB概觀 (cont.) • UDC資料傳送欄位(Field): • 同步(Sync) • 封包識別字(PID) • 位址(Address) • 端點(Endpoint) • 訊框數目(Frame Number) • 資料(Data) • 循環冗餘核對(CRC) 8-4
USB概觀 (cont.) • 結合欄位(Field) →封包(Packet)。 • 封包類型: • 符記(Token) • 訊框的開始(Start of Frame) • 資料(Data) • 信號交換(Handshake) 8-5
USB概觀 (cont.) • 組合封包(Packet) →交易(Transaction)。 • 交易種類: • 大量(Bulk) • 控制(Control) • 中斷(Interrupt) • 等時(Isochronous) 8-6
USB概觀 (cont.) • UDC使用雙埠(dual-port)記憶體並支援FIFO操作。 • Bulk與Isochronous端點FIFO結構為雙倍緩衝區,當端點在處理一個封包時可以同時組合另一個封包。 • 端點0只用來傳輸設定UDC組態的控制交易,負責: • 連接 • 指定位址 • 端點組態 • 匯流排計數 • 切斷連接 8-7
USB概觀 (cont.) • UDC介面專用外部腳位: • UDC+ • UDC- • USB協定在這兩個腳位上使用不同信號做半雙工資料傳輸。 8-8
USB概觀 (cont.) • 序列匯流排使用不同的信號來同時傳送多個狀態: • 閒置(Idle) • 恢復(Resume) • 封包開始(Start of Packet) • 封包結束(End of Packet) • 切斷連接(Disconnect) • 連接(Connect) • 重置(Reset) 8-9
大綱 • USB概觀 • 裝置組態 • USB協定 • UDC操作 • UDC暫存器定義 8-10
大綱 • USB概觀 • 裝置組態 • USB協定 • UDC操作 • UDC暫存器定義 8-12
USB協定 • 信號層級 • 位元編碼 • 欄位格式 • 封包格式 • 交易格式 • UDC設備需求 8-13
信號層級 (Signaling Level) • USB使用不同的信號來作資料編碼與指示不同的匯流排狀況。 • UDC+與UDC-編碼會表現出4種不同的狀態: • 1:UDC+為high、UDC-為low 。 • 0:UDC+為low、UDC-為high 。 • 其餘的兩個狀態用來表示目前USB狀態 。 8-14
USB狀態 8-15
位元編碼 • USB使用不歸零翻轉(NRZI)做位元編碼。 • 有狀態轉換:0 • 無狀態轉換:1 8-16
欄位格式 • 同步(Sync) • 每個封包的第一個欄位。 • 8位元寬(0x80)。 • 封包識別字(PID)。 • 8位元寬。 • 前四個位元表示封包類型(Token、Data、Handshake、Special)、封包格式、與錯誤偵測的類型。 • 後四個位元為確認欄位,確定傳送PID沒有發生錯誤。 • 位址(Address) • 7位元寬,允許127個獨立的裝置置於USB上。 8-17
欄位格式(cont.) • 端點(Endpoint) • 4位元寬 。 • 決定要定址到哪一個UDC端點。 • 訊框數目(Frame Number) • 11位元寬。 • 主機每一次傳送訊框會增加其值。 • 控制等時傳輸。 • 資料(Data) • 0到1023位元組寬。 8-18
欄位格式(cont.) • 循環冗餘核對(CRC) • 用來偵測符記與資料傳輸期間所發生的錯誤。 • 應用至封包內全部的欄位(PID欄位除外)。 • 符記封包使用一個5位元CRC 。 • 資料封包使用一個16位元CRC 。 8-19
封包格式 • USB支援四種封包類型: • Token • Data • Handshake • Special 8-20
封包格式 (cont.) • Token封包: • Token封包位於Frame的起端,用來識別OUT、IN、SOF、SETUP處理。 • SOF為特別的Token封包,主機每隔1ms就會發出一次,以避免UDC進入暫停模式。格式如下: 8-21
封包格式 (cont.) • Data封包: • 用來傳輸主機和UDC之間的資料。 8-22
封包格式 (cont.) • Handshake封包: • 用來描述資料交易狀態,包括:確認資料已經成功接收、流量控制以及延遲情況。 • 三種型態: • ACK:資料封包已被接收,無位元填充、無CRC或PID檢查錯誤發生。 • NAK:UDC無法從主機接收資料或沒有傳輸資料。 • STALL:UDC無法傳送/接收資料,需要主機介入來清除延遲狀況。 8-23
交易格式 • USB協定使用四個不同的交易格式: • 大量(Bulk) • 控制(Control) • 中斷(Interrupt) • 等時(Isochronous) • USB所有交易均由主機開始,主機和UDC之間同時只能有一個方向的傳輸(半雙工)。 8-24
交易格式 (cont.) • Bulk交易: • 使用封包錯誤偵測、重試,以保證在主機和UDC之間傳輸資料無錯誤。 • 由三種封包組成:Token、Data、Handshake。 8-25
交易格式 (cont.) • Isochronous交易: • 主機和UDC之間資料是以固定速率傳輸並可容忍錯誤。 • 由兩個封包組成:Token、Data。 8-26
交易格式 (cont.) • Control交易: • 用來設定端點組態,並詢問其狀態。 • 包含建立封包 、資料封包(optional)、信號交換封包。 8-27
交易格式 (cont.) • Interrupt交易: • 用來詢問設備的狀態。 • 包含建立封包 、資料封包(optional)、信號交換封包。 8-28
UDC設備請求 • UDC使用控制、狀態、資料暫存器來監控端點1~15的傳送與接收FIFO。 • 主機使用設備請求當成控制交易,經由USB送給端點0來控制UDC的組態。 • 對端點0的建立封包長度為8 bytes,指明: • 資料傳輸方向:主機到設備,設備到主機。 • 資料傳輸型態:standard、class、vendor。 • 資料接收:設備、介面、端點、其他。 • 傳輸的位元組數目。 • Index或Offset。 • 數值:用來傳送可變大小的資料參數。 • 設備需求。 8-29
UDC設備請求 (cont.) 8-30
大綱 • USB概觀 • 裝置組態 • USB協定 • UDC操作 • UDC暫存器定義 8-31
UDC操作 • Case 1:EP0控制讀取 • Case 2:含過早狀態階段的EP0控制讀取 • Case 3:含或不含過早狀態階段的EP0控制寫入 • Case 4:EP0無資料命令 • Case 5:EP1資料傳送(BULK-IN) • Case 6:EP2資料接收(BULK-OUT) • Case 7:EP3資料傳送(ISOCHRONOUS-IN) • Case 8:EP4資料接收(ISOCHRONOUS-OUT) • Case 9:EP5資料傳送(INTERRUPT-IN) • Case 10:RESET中斷 • Case 11:SUSPEND中斷 • Case 12:RESUME中斷 8-32
Case 1:EP0控制讀取 • 當軟體啟動,它會初始化軟體狀態機為EP0_IDLE。 • 主機傳送一個SETUP命令。 • UDC產生一個EP0中斷。 • 軟體判斷UDCCS0[SA]與UDCCS0[OPR]位元。這表示一個新的OUT封包在EP0緩衝區內並辨識SETUP交易。 • 當UDCCS0[RNE]位元被設定時,軟體讀取資料至緩衝區。 • 軟體分析緩衝區內命令語法,並判定其為控制讀取。 • 軟體開始載入第一個資料封包進入UDDR0暫存器。 • 在讀取與分析資料後,軟體清除UDCCS0[SA]與UDCCS0[OPR]位元,並設定UDCCS0[IPR]位元。 • 軟體清除UDC中斷位元並自中斷服務常式回復。 8-33
Case 1:EP0控制讀取(cont.) • 當UDC傳送資料回到主機後,主機發出IN封包。在主機傳送ACK至UDC之後,UDC清除UDCS0[IPR]位元並產生一個中斷。 • 軟體進入ISR常式。它決定是否必須傳輸更多的資料。如果需要的話,軟體載入下個資料量,設定UDCCS0[IPR]位元,並自中斷回復。 • 重複步驟10與11直到傳送完所有資料或最後的資料封包為短封包。 • 若最後的封包為一個短封包,則進入EP0_END_XFER狀態。若最後的資料封包在16位元組邊界上,則軟體設定UDCCS0[IPR]來傳送一個長度為0的封包而不會載入FIFO資料。在傳送長度為0的封包之後,進入EP0_END_XFER狀態。 • 當主機接收到長度為0的OUT封包時,UDC設定UDCCS0[OPR]位元,並引發一個中斷。 • 軟體進入ISR常式,並判斷UDCCS0[OPR]位元被設定且UDCCS0[SA]位元被清除,而其內部狀態機為EP0_END_XFER。軟體清除UDCCS0[OPR]位元並進入EP0_IDLE狀態。 • 軟體清除UDC中斷位元並自中斷服務常式回復。 8-34
Case 5:EP1資料傳送(BULK-IN) • 當軟體接收到SETUP 命令來建立一個EP1 BULK IN交易時: • 設定DMA引擎組態並關閉EP1中斷,允許DMA引擎處理交易。 • 啟動EP1中斷來允許Megacell直接處理交易。 8-35
軟體啟動DMA • 在SETUP命令期間,軟體啟動DMA引擎與遮蔽EP1中斷。 • 若封包大小為64位元組,軟體會傳送一個DMA敘述元內所有資料並設定第二個DMA敘述元內之UDCCS1[TSP]位元。 • 若封包大小小於64位元組,軟體會建立敘述元串,裡面的奇數之敘述元指向資料,而偶數敘述元寫入UDCCS1[TSP]位元。 • 主機傳送BULK-IN,而UDC傳送資料封包回主機PC。 • UDC產生一個中斷。 • DMA引擎填滿EP1資料FIFO(UDDR1),若資料封包為短封包則設定UDCCS1[TSP]位元。 • 重複步驟2到4直到所有的資料都被送至主機PC。 8-36
軟體啟動EP1中斷 • 在SETUP命令期間,軟體會填滿EP1資料FIFO並清除UDCCS1[TPC]位元。若資料封包為短封包,軟體也會設定UDCCS1[TSP]位元。 • 主機傳送BULK-IN,而UDC傳送資料封包回主機並產生一個EP1中斷。 • 軟體填滿EP1資料FIFO,並清除UDCCS1[TPC]位元。如果是短封包,則設定UDCCS1[TSP]位元。 • 自中斷回復。 • 重複步驟2到4直到所有的資料都被送至主機。 8-37
Case 6:EP2資料接收(BULK-OUT) • 當軟體接收到SETUP 命令來建立一個EP2 BULK OUT交易: • 啟動DMA引擎來處理交易。 • 允許Megacell直接處理交易。 8-38
軟體啟動DMA • 在SETUP命令期間,軟體會建立DMA引擎並設定UDCCS2[DME]位元。 • 若封包大小為32或64位元組,軟體會建立敘述元串,每一個都以32或64為模數(modulo)。 • 若封包大小小於32位元組,則軟體使用中斷模式。 • 主機傳送一個BULK-OUT。 • DMA引擎從EP2資料FIFO(UDDR2)讀取資料。 • 重複步驟2與3直到從主機讀取所有的資料。 • 若軟體接收到EP2中斷,則完成下列處理: • 若UDCCS2[RNE]被清除且UDCCS2[RSP]被設定,則資料封包為一個長度為0的封包。 • 若UDCCS2[RNE]被設定,則資料封包為短封包,而軟體必須使用UDCWC2計數暫存器來從EP2資料FIFO讀取適當的資料量。 • 軟體清除UDCCS[RPC]位元。 • 自中斷回復。 8-39
軟體允許Megacell處理交易 • 在SETUP命令期間,軟體會清除UDCCS2[DME]位元。 • 主機傳送BULK-OUT,而UDC產生EP2中斷。 • 若UDCCS2[RNE]被清除且UDCCS2[RSP]被設定,則資料封包為一長度為0的封包。 • 若UDCCS2[RNE]被設定,則軟體使用UDCWC2計數暫存器來從EP2資料FIFO讀取適當的資料量。 • 軟體清除UDCCS2[RPC]位元。 • 自中斷回復。 • 重複步驟2到6直到從主機讀取所有的資料。 8-40
Case 10:RESET中斷 • 系統重置之後,軟體以所需的數值載入暫存器。 • 軟體設定UDCCR[UDE]位元來啟動UDC並立即讀取UDCCR[UDA]位元來決定目前是否有USB重置在USB匯流排上。 • 若UDCCR[UDA]為0,則目前有USB重置在匯流排上,而軟體藉由寫入1至UDCCR[RSTIR]位元來清除中斷。 • 若UDCCR[UDA]為1,則目前沒有USB重置在匯流排上。軟體藉由清除UDCCR[REM]位元來啟動以後的重置中斷。 • 自中斷回復。 • 主機驅動USB重置或取消USB重置。 • UDC產生一個重置中斷。 • 軟體判斷UDCCR[RSTIR]位元,並藉由寫入1至UDCCR[RSTIR]位元來清除中斷。而後軟體檢查UDCCR[UDA]位元來決定發生的重置類型。 • 自中斷回復。 8-41
Case11:SUSPEND中斷 • 軟體啟動時,會清除UDCCR[SRM]位元來允許USB暫停中斷。 • 主機藉由停止UDC+與UDC-信號之來觸發USB暫停。 • UDC產生暫停中斷。 • 軟體判斷UDCCR[SUSIR]位元。這表示發生USB暫停,而軟體會採取任何需要的動作來關閉其他週邊、清除內部緩衝區、執行電源管理、以及執行相似功能。 8-42
Case12:RESUME中斷 • 軟體啟動時,會清除UDCCR[SRM]位元來允許USB恢復操作。 • 主機藉由恢復UDC+與UDC-信號之行動來觸發USB恢復操作。 • UDC產生恢復中斷。 • 軟體判斷UDCCR[RESIR]位元。這表示發生USB恢復操作,而OS會採取任何任何需要的動作來開啟其他週邊、初始化內部緩衝區、執行電源管理、與執行相似功能。 8-43
大綱 • USB概觀 • 裝置組態 • USB協定 • UDC操作 • UDC暫存器定義 8-44
UDC暫存器定義 • UDC控制暫存器 • UDC端點0控制/狀態暫存器(UDCCS0) • UDC端點x控制/狀態暫存器(UDCCSx),x = 1、6、11 • UDC端點x控制/狀態暫存器(UDCCSx),x = 2、7、12 • UDC端點x控制/狀態暫存器(UDCCSx),x=3、8、13 • UDC端點x控制/狀態暫存器(UDCCSx),x = 4、9、14 • UDC端點x控制/狀態暫存器(UDCCSx),x = 5、10、15 • UDC中斷控制暫存器0(UICR0) • UDC中斷控制暫存器1(UICR1) • UDC狀態/中斷暫存器0(USIR0) • UDC狀態/中斷暫存器1(USIR1) 8-45
UDC暫存器定義(Cont.) • UDC訊框數目高位暫存器(UFNHR) • UDC訊框數目低位暫存器(UFNLR) • UDC位元組計數暫存器x(UBCRx),x = 2、4、7、9、12、14 • UDC端點0資料暫存器(UDDR0) • UDC資料暫存器x(UDDRx),x = 1、6、11 • UDC資料暫存器x(UDDRx),x = 2、7、12 • UDC資料暫存器x(UDDRx),x = 3、8、13 • UDC資料暫存器x(UDDRx),x = 4、9、14 • UDC資料暫存器x(UDDRx),x = 5、10、15 • UDC暫存器位置 8-46
UDC控制暫存器(UDCCR) 8-47