基于DWC2的USB驅動開發(fā)-0x02 DWC2 USB2.0 IP 功能特征介紹 (qq.com)
前言
DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內核源碼驅動中就帶DWC2的驅動(新思官方維護),可以看出其使用的非常多。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/dwc2?h=v6.4-rc1
本文先對其功能特征進行簡介,以便有一個整體概念的理解。內容基本都是參考自文檔《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG)Databook》
DWC2的特征介紹
組件
DWC2的IP目前是版本4,其IP基本的組件是DWC USB 2.0 HS OTG Controller v4,
還有其他幾個是需要單獨購買license才能添加的,前兩個都是低功耗相關的,從此也可以看出要達到某些極致的性能(比如低功耗)肯定是要付出更高代價的。這就是技術壁壘帶來的高附加值,需要額外購買也是理所當然,別人開發(fā)肯定技術投入也是更高的。感嘆一下什么時候我們的各行各業(yè)的技術水平能做到這樣的按功能點和特征收費就好了,只能說努力吧。
DWC USB HSOTG Hibernate
DWC USB HSOTG HSIC-LPM
DWC USB UTMI-to-UTMI Bridge
框架
整體框架如下圖,淺藍色部分是根據配置決定,黑色部分是所有配置都有的:
對于軟件編寫來說也要了解下其架構
DMA 部分
如圖的上面部分,
可以選擇內部的DMA控制器,此時內部DMA控制器(AHB主控器)使控制器能夠充當AHB上的主控器,以便在AHB之間傳輸數據,即在AHB左側的Memory和SPRAM之間搬運數據。即對應的接口AHB Master I/F。
內部DMA控制器與外部DMA控制器只能二選一(如圖標示的Either or none),當然也可以沒有DMA那就只能CPU通過AHB總線進行數據搬運。
如果選擇外部DMA控制器則可以選擇DesignWare 的DW_ahb_dmac或者ARM DMA控制器PrimeCell之類的DMA控制器連接到DWC_otg控制器。專用傳輸FIFO操作(Dedicated Transmit FIFO,IP配置OTG_EN_DED_TX_FIFO=1)時不能選擇外部DMA。
DMA是軟件編程需要重點理解的內容。
AHB總線部分
如圖左邊部分,這一部分主要是CPU和DWC交互。
AHB SlaveI/F:AHB從接口,即DWC控制器是從設備,CPU通過該接口對DWC的控制和狀態(tài)寄存器(CSR)、數據FIFO和隊列進行讀寫訪問。
AHB Master I/F:在上面的DMA部分描述, 使能DMA時,DMA是主設備,負責在系統(tǒng)的memory和內部的RAM之間搬運數據。
RAM部分
如圖下面部分,對于軟件角度來說就是DWC和軟件圍繞著RAM在進行數據交互。
外部單端口FIFO RAM(SPRAM)用于事務數據存儲,可配置,32至32768x 35位寬(32個數據位加3個控制位)。
DataFIFO RAM/IF:數據緩存FIFO RAM接口,DWC_otg控制器上的發(fā)送和接收FIFO接口用于將數據移入和移出數據FIFO RAM。
這些傳輸分為周期性傳輸(用于等時傳輸ISO和中斷傳輸)或非周期傳輸(用于批量傳輸和控制傳輸).
所有主機輸入和設備輸出傳輸使用一個單口接收FIFO。
非周期性主機OUT傳輸公用一個Tx FIFO。
周期性主機OUT傳輸,可以選擇一個獨立周期傳輸FIFO。
設備模式下IN端點可選公用非周期性Tx FIFO,和多個周期性TxFIFO
用于周期性/非周期性設備IN傳輸的每個IN端點可選專用Tx FIFO
主機模式中斷OUT和設備模式中斷IN(僅在Shared FIFO 操作模式)傳輸可以編程為通過非周期傳輸FIFO或周期傳輸FIFO。
注:在Shared FIFO模式,對于采用Control-Bulk-Interrupt (CBI)協(xié)議的大容量存儲設備,中斷IN端點不使用周期端點(通常用于批量數據傳輸結束時的狀態(tài)更新)。當單個大容量存儲設備連接后,且軟件可以預測何時接收到IN中斷,則可以通過非周期性傳輸FIFO控制器發(fā)送該IN中斷,節(jié)省一個周期FIFO和相關內存。
接口部分
如圖右邊是接口部分,可以配置支持至少一個或者同時支持多個接口,注意這里的配置是指的IP的配置,而不是軟件的編程配置。
支持UTMI+ Level 3 PHY 接口 (Revision 1.0 or HSIC)
UTMI+PHY可以是單向或雙向的,可以配置為8-、16-或8/16位數據總線,IP配置為8/16位數據總線時軟件可以通過寄存器動態(tài)配置選擇8位還是16位。
UTMI+接口可以配置為與符合修訂版1.0的PHY或符合HSIC的PHY一起工作。
ULPI PHY 接口 (Revision 1.1)
ULPI PHY可以是單向或雙向的,具有8位SDR或4位DDR總線(軟件可動態(tài)配置)
這里順便提一下:ULPI接口引腳少,一般用于外置PHY的情況或者FPGA原型驗證階段,而UTMI接口引腳多,一般PHY集成在SOC內時使用。
USB 1.1全速串行收發(fā)器接口
USB 1.1全速串行收發(fā)器可以具有專用接口,也可以在芯片外PHY的UTMI+或ULPI接口上共享引腳(軟件可配)
IP配置使能了IC_USB時,全速串行收發(fā)器接口可以配置為USB 1.1 6P/3P接口或IC_USB接口。
IC_USB接口是一個額外的專用接口。此接口不能和UTMI+或ULPI的引腳共享。無論FS引腳共享選項如何,IC_USB一旦配置使能,接口總是可用的。IC_USB接口是一個附加功能,需要額外的DWC-HSOTGFS-ICUSB許可證。
DWC_otg控制器可以支持兩個并行端口(例如,與專用FS 1.1并行的UTMI+)。但是,兩個端口不能同時運行。在任何給定的時間,只有一個端口處于活動狀態(tài)。從一個端口切換到另一個端口時,應用程序必須提供軟件復位(這里編程需要注意,不過一般也不會做切換,實際一般都是固定一個接口)。
其他可選接口
供應商控制接口可以訪問ULPI和UTMI+ PHY寄存器
I2C接口,用于USB 1.1 FS模式下的OTG控制
通用I/O (GPIO)接口
SOF更新翻轉接口(不用于DWC otg)
SOF輸入計數接口(不用于DWC otg)
用于設備和主機模式的基于描述符的分散/聚集DMA控制器(Descriptor-Based Scatter/Gather DMA)。(不支持Descriptor-BasedCongruent-Sequential DMA)。
這里有必要提一下Descriptor-Based Scatter/Gather DMA就是DMA界的上乘武功,一般的MDA只能一次搬運一處區(qū)域,而它則能按照鏈表的形式處理一系列區(qū)塊,這在USB做大數據量傳輸時非常方便,可以大大解放CPU提高效率,尤其是在UVC等需要ISO傳輸尤其是大帶寬的ISO傳輸處理時更能體現其威力,可以大大提高性能。但是Host Scatter Gather DMA不支持hubs (split transfers),Split transfers只支持Host Buffer DMA (Internal DMA) 。
作為設備模式時的多處理器中斷
此功能支持端點相關中斷屏蔽寄存器和來自于控制器的端點相關的中斷信號。此功能可以在多處理器環(huán)境中使用,每個端點都可以由不同的處理器控制。
特征
一般特征
支持OTG2.0和OTG1.3,軟件可配.OTG2.0支持ADP (Attach detection Protocol)。
OTG2.0和OTG1.3的區(qū)別是前者支持Attach Detection Protocol (ADP) ,后者不支持
前者支持Accessory Charger Adapter (ACA) (需要配置使能BC Support =1)。
支持High-Speed (HS, 480-Mbps),Full-Speed (FS, 12-Mbps),Low-Speed (LS, 1.5-Mbps)。
諸多低功耗相關配置選項。
支持多種DMA和非DMA操作方式。
MAC-Phy之間支持多種接口。
AHB和PHY接口支持使用不同的時鐘,以簡化集成。
包括控制端0在內,一共最多支持16個雙向端點。
DWC_otg作為設備使用UTMI+ PHY時不支持低速。
支持Session Request Protocol (SRP)。
支持Host Negotiation Protocol (HNP)。
最多支持16個主機通道。在主機模式下,當需要支持的設備的端點數量大于支持的主機通道數,軟件可以重新編程通道來支持多達127個設備,每個設備有32個端點(IN + OUT),最多4,064個端點。
Host Buffer DMA模式, Slave 模式, External DMA模式支持外部HUB連接。
注意:DWC_otg 在Host Scatter Gather DMA模式不支持split transfers。只有Buffer DMA模式支持通用根集線器。
包括自動ping功能。
支持低速模式下的Keep-Alive和高速/全速模式下的SOFs。
配置特征
使用coreConsultant實用程序根據用戶需求配置控制器
能夠為低功耗模式選擇多個電源軌
多種DMA操作模式的選擇
選擇所需的Mac-Phy接口類型
應用接口特征
通過AHB的應用程序接口:AHB從接口,用于訪問控制和狀態(tài)寄存器(CSRs)、數據FIFO和隊列??蛇x的AHB主接口,內部DMA使能時給Data FIFO訪問使用。特定配置下AHB時鐘最高可達270MHz。
AHB總線上只支持32位數據。
支持通過pin配置小端或者大端模式。
AHB從接口支持INCR4, INCR8, INCR16, INCR和SINGLE傳輸。
AHB主接口支持拆分、重試和錯誤AHB響應。AHB從機接口上不產生拆分和重試響應。
DMA模式AHB主接口支持軟件配置AHB Burst類型。選擇INCR4則控制器使用INCR/INCR4, 或Single。選擇INCR8則控制器一般使用INCR8,但是傳輸的開始和最后根據大小可能使用INCR 和Single。選擇INCR16則控制器一般使用INCR16,但是傳輸的開始和最后根據大小可能使用INCR 和Single。
只能處理固定的burst address對齊,比如INCR16則地址的位[5:0]都要是0。注意:這里INCR16單位是WORD(4B),所以16x4=64B,即低6位為0。
在AHB主接口上可生成AHB忙周期。
可處理1KB的邊界。
MAC-PHY接口特征
MAC-PHY接口接控制器訪問PHY芯片的接口。
支持以下接口
UTMI 8/16,ULPI,HSIC,IC_USB (Low/Full速),FS 和UTMI共享。
支持UTMI+ Level 3 接口(Revision 1.0, February 25th, 2004). 8-, 16-, 和 8/16-位數據總線。
支持ULPI接口 (Revision 1.1rc, September 1st, 2004), 8-位 SDR, 4-bit DDR, 6-pin Serial, 3-pin Serial 和 Carkit。
UTMI+ L3 和 ULPI可同時存在,由軟件選擇,或者直接配置只使用一種。
只有在選擇了UTMI+的情況下,才能選擇HSIC接口。否則無法選擇HSIC接口。HSIC需要額外的DWC-HSOTG-HSIC授權。
I2C接口(用于支持Mini USB Analog Carkit Interface Specification, CEA-936, Revision 2)。不適用于其他設備。
支持UTMI-to-UTMI Bridge。
系統(tǒng)Memory特征
支持Slave, 外部DMA 控制器接口, 或者內部DMA 模式。
使用內部DMA模式時還支持Descriptor-Based Scatter/Gather DMA。
與外部DMA控制器的接口可選;數據通過AHB從機接口傳輸。
Non-DWORD對齊支持
主機模式:
Scatter Gather DMA模式,IN和OUT傳輸,支持緩沖區(qū)的Non-DWORD對齊。
Buffer DMA 和Slave 模式,IN和OUT傳輸,不支持緩沖區(qū)的Non-DWORD對齊。
設備模式:
Scatter Gather DMA模式,IN和OUT傳輸,支持緩沖區(qū)的Non-DWORD對齊。
Buffer DMA 和Slave 模式,IN和OUT傳輸,不支持緩沖區(qū)的Non-DWORD對齊。
注意:對Non-DWORD對齊的支持是針對緩沖區(qū)的,不是描述符,描述符必須WORD對齊。
內部Memory特征
在Slave和DMA模式,可以配置支持每個設備的IN端點都使用一個固定的傳輸FIFO。每個FIFO可以保存多個包。
包括一個可選的接口支持Remote Memory,用于向控制器發(fā)出系統(tǒng)上DMA寫入完成事件的信號。
支持給端點進行包級別的動態(tài)FIFO分配,以支持小FIFO,和靈活高效利用FIFO。
利用單端口RAM替代雙端口RAM以減少面積和功耗。
支持傳輸時動態(tài)修改端點FIFO的大小。
支持端點FIFO可不是2的指數倍對齊,以利用連續(xù)的存儲位置。
在主機和設備模式下共享硬件寄存器,以減少門數。
設備模式時如果選擇dedicated Tx FIFO,DMA模式收發(fā)都支持閾值。閾值可以通過全局寄存器配置,支持閾值AHB時鐘必須60MHz以上。
所謂的Dedicated FIFO即設備模式的每個IN端點都有自己獨立的傳輸FIFO。
Shared FIFO 即非周期IN端點共享一個TX FIFO ,周期端點有獨立的FIFO。
軟件特征
為了減少門數和提供靈活性,一些特征由軟件去實現
軟件協(xié)助硬件進行設備模式非周期IN排序(僅適用于SharedFIFO操作)。
軟件處理USB命令(檢測SETUP事務,并將其命令有效載荷轉發(fā)給應用程序進行解析)。
軟件處理USB錯誤。
功耗優(yōu)化特征
有源時鐘門控功能:允許控制器通過在USB和AHB數據流之間的IDLE時段內,在控制器的模塊內門控AHB和PHY時鐘,來降低動態(tài)功耗。同樣也可以在SPRAM未使用時門控RAM的時鐘輸出。
支持Link Power Management (LPM)(需要額外的DWC-HSOTG-LPM授權)。以增加在面向USB Audio Class 3.0目標的Audio數據流處理L1請求時的靈活性。
幾個節(jié)能功能,包括兩個用于高級電源管理的電源軌??梢愿鶕约旱囊筮x擇以下任何節(jié)能選項:
時鐘門控
部分斷電
休眠:在休眠(當OTG_EN_PWROPT=2或3時啟用)中,包含大約95%門數的DWC_OTG_core模塊可以在掛起Suspend期間在主機和設備模式下進行電源門控。DWC_otg_pmu能夠在掛起期間檢測恢復、遠程喚醒、SRP或連接,并在控制器處于休眠狀態(tài)時喚醒應用程序。
擴展休眠:在擴展休眠(當OTG_EN_PWROPT=3時啟用)中,DWC_OTG_wpc_slv、DWC_OTG_power_dn和DWC_oting_pmu模塊被電源門控,此功能僅在設備模式下受支持。DWC_otg_piu模塊能夠檢測Resume,并可以通過NAK握手響應IN/OUT令牌,并存儲一個Setup數據包,直到應用程序上電。此功能在整個SoC和CPU被電源門控并且USB模塊的一部分上電的情況下,從主機檢測活動非常有效。
休眠和擴展休眠都需要額外的DWC-HSOTG-HIBERNATION授權。
USB Suspend, LPM, 和Session-Off模式支持PHY時鐘門控。
USB Suspend和Session-Off模式支持AHB時鐘門控。
USB Suspend和Session-Off模式支持部分掉電。
層次結構支持多個電源軌,以便在掛起期間啟用休眠功能。
輸入信號需要powered-off的塊驅動到安全的0.
Data FIFO RAM不使用的時關閉片選。
Data FIFO RAM支持時鐘門控。
設備和主機模式都支持在USB Suspend, LPM, 和 Session-Off 模式時切換到32-KHz低頻時鐘。
總結
這一篇先對控制器的特征有一個大致的整體了解,對這些整體的框架了解也有助于后續(xù)的各模塊部分的了解,對軟件開發(fā)也有一些參考意義。
審核編輯:湯梓紅
-
usb
+關注
關注
60文章
7936瀏覽量
264456 -
USB2.0
+關注
關注
2文章
186瀏覽量
46083 -
USB驅動
+關注
關注
1文章
136瀏覽量
20191 -
DWC2
+關注
關注
0文章
35瀏覽量
125
發(fā)布評論請先 登錄
相關推薦
評論