基于DWC2的USB驅(qū)動開發(fā)-0x08 ULPI接口協(xié)議概覽 (qq.com)
一. ULPI(協(xié)議概覽)
1.1 前言
前面我們介紹了GLPI接口,ULPI即基于GLPI接口的UTMI協(xié)議的實現(xiàn)。ULPI用于USB中LINK和PHY的通訊,主要應(yīng)用于外置PHY的場景。了解ULPI接口對整個USB驅(qū)動開發(fā)也有一些幫助,掌握USB也需要掌握USB整個鏈路的數(shù)據(jù)流,PHY到LINK這一層的數(shù)據(jù)流至關(guān)重要,雖然對于編程來說這一層對軟件可見度幾乎為0,但是了解其有利于解決分析問題,尤其是一些疑難雜癥.
1.2 概述
ULPI是LPI接口規(guī)范應(yīng)用于UTMI+協(xié)議的一個具體實現(xiàn), 相對于UTMI,使用ULPI減少了引腳數(shù)量,適合于外接USB收發(fā)器(PHY)的場景,支持OTG,主機,設(shè)備的應(yīng)用。
一般外接USB收發(fā)器比如原型驗證階段時采用ULPI接口,因為ASIC或者SOC的引腳數(shù)是比較受限的;而如果USB收發(fā)器集成封裝在ASIC,SOC內(nèi),則使用UTMI接口,因為在芯片內(nèi)部,不占用芯片的引腳。
UTMI才是LINK-PHY之間的標準接口,ULPI只是為了外置PHY等場景有低引腳需求才增加的實現(xiàn)。所以即使使用ULPI接口, LINK內(nèi)部實際也是有一個UTMI-ULPI的橋轉(zhuǎn)換為UTMI接口的,而PHY封裝在芯片內(nèi)部直接使用UTMI就不需要UMTI-ULPI的橋了,避免了橋接性能等方面的損失,這也是為什么PHY集成在芯片內(nèi)部都是直接使用UTMI接口的一個原因。
ULPI規(guī)范詳細說明了對UTMI+Level 3的支持,但PHY實現(xiàn)者可以選擇支持UTMI+中定義的任何級別。
ULPI定義了LINK到PHY之間的信號8個或者12個,即4個DATA或者8個DATA+nxt,stp,dir,clock。ULPI對UTMI+的引腳縮減,是通過對相對靜態(tài)的信號通過寄存器配置,數(shù)據(jù)線改為雙向,提供了一種訪問ULPI收發(fā)器上寄存器數(shù)據(jù)的方法來實現(xiàn)的。
如下圖所示:ULPI規(guī)格建議使用ULPI Link Wrapper和ULPI PHY Wrapper在原來的UTMI+ IP上封裝,這樣可以保持原來的UTMI+部分不變, 但是根據(jù)實現(xiàn)而定,也可以不要這個橋直接就使用ULPI接口。
WDC2控制器同時支持UTMI和ULPI的,可以配置為同時支持,軟件動態(tài)選擇,其PHY Interface Unit (PIU)框圖如下:
1.3 結(jié)構(gòu)
首先要從整體上了解下ULPI接口所處的層次以及其作用,這樣有利于后面的理解。
ULPI是LINK和PHY之間的接口,結(jié)構(gòu)圖下
所以有必要先了解下LINK和PHY分別是做什么的:
PHY:
即物理層設(shè)備Physical Layer ,也就是收發(fā)器Transceiver,比如USB334x就是用的比較多的MicroChip的PHY芯片。在PHY芯片的手冊中一般用收發(fā)器Transceiver的稱呼。而在描述UBS協(xié)議的規(guī)格書等中一般稱為PHY(Physical Layer),兩者說的是同一個東西,只是不同場景側(cè)重點不一樣,前者側(cè)重一個具體的東西所以叫做收發(fā)器,后者側(cè)重一個抽象的概念所以叫做PHY。
PHY即數(shù)字部分和模擬部分的橋梁, PHY的一邊通過ULPI接口和LINK通訊,這邊都是數(shù)字部分。PHY另一邊就是直接的總線信號比如USB的D+,D-這邊是模擬部分。
PHY的技術(shù)含量是比較高的,涉及到模擬的或者是模數(shù)的技術(shù)都有一定門檻,所以你可以看到國產(chǎn)很多企業(yè)能做控制器LINK,MAC這部分(雖然很可能大概也是買的IP),但是基本沒有能做PHY的,前者是數(shù)字部分,設(shè)計驗證相對來說更簡單,后者則更復(fù)雜設(shè)計驗證更加困難(所以后者都是購買集成)。
PHY部分主要實現(xiàn),總線信號的收發(fā),bit-stuff等,和LINK通過ULPI/UTMI接口通訊,則是以包為單位了,當(dāng)然包括PHY的狀態(tài)返回控制等。
LINK:
LINK即SOC這邊的控制器部分,實現(xiàn)數(shù)據(jù)鏈路層的處理,由于是純數(shù)字部分,這部分也比較好仿真驗證。有些文獻也叫Serial Interface Engine (SIE)
ULPI PHY必須要實現(xiàn)以下UTMI+的特征
- Linestate:必須在2-3個時鐘內(nèi)精確反映D+/D-的狀態(tài)。由LINK使用Linestate去計時總線事件。
- 濾波以防止由于D+和D-之間的偏斜而在Linestate上出現(xiàn)虛假的SE0/SE1狀態(tài)。低速濾波14個時鐘,全速和高速濾波2個時鐘。
- PHY在發(fā)送時內(nèi)部需要阻塞接收路徑,接收路徑在Squelch(HS)和SE0-to-J(FS/LS)時退出阻塞。
- TxReady必須用于包括Chirp的所有數(shù)據(jù)發(fā)送。
- 由于USB上的噪聲,有可能RxActice有效到無效而沒有接收到任何有效數(shù)據(jù),即RxValid不會有效。LINK必須能處理這種RxActive有效而RxValid無效的場景。
1.4 信號
ULPI的PHY接口信號基于PLPI定義,還增加了USB接口,其他雜項接口。
PHY接口是固定的,其他接口可能可變,以下只是一個通常的指導(dǎo)設(shè)計。
且規(guī)定了PHY必須是主機。這里需要注意和UTMI相比這里總線權(quán)顛倒了,UTMI是LINK掌握,這里是PHY掌握了,這是因為DATA是雙向數(shù)據(jù)了,為了保證接收數(shù)據(jù)時不被LINK打斷。
信號 | 方向(PHY的角度) | 描述 |
---|---|---|
PHY Interface | ||
clock | I/O | 接口時鐘.PHY必須支持輸出60MHz時鐘,即必須支持時鐘輸出模式.可選支持輸入60MHz時鐘,即輸入時鐘模式是可選的.如果PHY支持這兩種時鐘模式,則必須由PHY自行配置,不能依賴ULPI的控制和數(shù)據(jù)信號去設(shè)置. |
data | I/O | 數(shù)據(jù)總線,在ULPI總線空閑時即PHY和LINK都沒有數(shù)據(jù)要發(fā)送時,PHY拉低dir監(jiān)聽總線,此時由LINK發(fā)送數(shù)據(jù),而LINK又沒有數(shù)據(jù)要發(fā)送,所以就發(fā)送特殊值0,表示無效數(shù)據(jù)。必須支持8位數(shù)據(jù)寬,單邊沿,上升沿傳輸數(shù)據(jù)可選支持4位數(shù)據(jù)寬,雙邊沿,上下邊沿都傳輸數(shù)據(jù) |
dir | OUT | 由PHY驅(qū)動控制數(shù)據(jù)總線的方向.PHY如果不能接收LINK發(fā)送過來的數(shù)據(jù)時拉高dir.比如PHY的PLL沒有穩(wěn)定時這適用于PHY的兩種時鐘模式. |
stp | IN | LINK拉高stp表示USB包傳輸或者寄存器寫的結(jié)束,也可結(jié)束任何接收。Stp必須是在最后一個有效數(shù)據(jù)之后的CLK拉高。 |
nxt | OUT | PHY拉低nxt以掐斷除了寄存器讀和RX_CMD外的所有傳輸。與USB接收期間的RxValid和USB傳輸期間的TxReady相同。如果dir先前為低,則PHY還可同時設(shè)置nxt和dir以指示USB接收激活(RxActive)。PHY不容許在LINK發(fā)送TX_CMD時的第一個時鐘拉低nxt |
USB****接口 | ||
D+ | I/O | USB的****D+引腳必須有 |
D- | I/O | USB的****D-****引腳必須有 |
ID | IN | USB的ID引腳 只有支持OTG的PHY才需要 |
VBUS | I/O | USB的VBUS引腳。支持OTG的PHY才需要。用于驅(qū)動VBUS和VBUS比較器。 |
其他雜項 | ||
XI | IN | 晶體輸入或者時鐘輸入引腳,由廠家實現(xiàn)決定支持的晶體頻率 |
XO | OUT | 晶體輸出引腳如果是只支持時鐘輸入的則沒有該引腳 |
C+ | I/O | 電荷泵電容器正極端子 |
C- | I/O | 電荷泵電容器負極端子 |
SPKR_L | IN | 可選的Carkit left/mono speaker輸入 |
SPKR_MIC | I/O | 可選的Carkit right speaker輸入或者麥克風(fēng)輸出 |
RBIAS | I/O | 偏置電流電阻器 |
如下是一個典型的信號連接示例
使用的是PHY的時鐘輸出模式,即CLOCK由PHY提供
1.5框圖
UTMI+ Level 3 PHY core
ULPI PHY可以包含符合任何UTMI+級別的核心,ULPI中不支持16位數(shù)據(jù)總線的信號。上述顯示了3級UTMI+核心的典型框圖,PHY供應(yīng)商必須指定預(yù)期的UTMI+級別,并提供符合該級別所需的功能。
ULPI PHY Wrapper
ULPI PHY橋?qū)TMI+接口簡化為ULPI中描述的低引腳接口。UTMI+Level 3 PHY核心上顯示的所有信號都減少為ULPI接口信號
clock**, data , dir , stp , 和 nxt . **寄存器映射存儲UTMI+接口的相對靜態(tài)信號。
Crystal Oscillator and PLL
當(dāng)晶體連接到PHY時,內(nèi)部時鐘和外部60MHz接口時鐘由內(nèi)部PLL產(chǎn)生即PHY的時鐘輸出模式。
當(dāng)沒有連接晶體時,PHY可以可選地從LINK提供的輸入60MHz時鐘生成內(nèi)部時鐘,即時鐘輸入模式。
General Biasing
內(nèi)部模擬電路需要精確的偏置電流。這通常是使用外部精確的參考電阻器產(chǎn)生的。
DrvVbusExternal and ExternalVbusIndicator
PHY可以可選地經(jīng)由可選引腳DrvVbusExternal來控制外部VBUS電源。
例如,外部電源可以是使用電源開關(guān)控制的電荷泵或5V電源。
外部電源由DrvVbus和OTG控制寄存器中的可選DrvVbusExternal位控制。
DrvVbusExternal輸出引腳的極性取決于實現(xiàn)方式。
如果提供對外部VBUS源的控制,則PHY可以可選地在可選引腳ExternalVbusIndicator上提供VBUS電源反饋信號。
如果提供該引腳,則該引腳的使用由OTG控制和接口控制寄存器中的可選控制位定義。
Power-On-Reset
必須在PHY中提供上電復(fù)位電路。當(dāng)電源首次施加到PHY時,通電復(fù)位將重置所有電路,并使ULPI接口處于可用狀態(tài)。
Carkit Option
PHY可以可選地支持車載套件模式Carkit Mode。在該模式下,LINK和USB接口之間的麥克風(fēng)和喇叭信號由PHY路由。在Carkit單聲道模式下,SPKR_L輸入單聲道揚聲器信號,SPKR_MIC輸出麥克風(fēng)信號MIC。在Carkit立體聲模式中,SPKR_L輸入左揚聲器信號,SPKR_MIC輸入右揚聲器信號SPKR_R。
1.6 模式
ULPI接口可以在下表中列出的五種獨立模式中的一種模式下運行。默認情況下,接口處于同步模式。其他模式由功能控制和接口控制寄存器中的位啟用。在同步模式下,數(shù)據(jù)總線傳輸命令和數(shù)據(jù)。在其他模式中,數(shù)據(jù)引腳會使用不同的功能重新定義。同步模式和低功率模式是強制性的。
模式名 | 模式描述 |
---|---|
Synchronous Mode同步模式 | 這是一般的操作模式.ULPI接口發(fā)送數(shù)據(jù)和命令和 clock同步. |
Low Power Mode低功耗模式 | PHY掉電時鐘停止.PHY保持拉高 dir,data總線重定義為 LineState和中斷信號。 |
6-pin FS/LS Serial Mode(optional) | data總線重定義為6-pin串行模式,包括6個引腳發(fā)送和接收USB的串行數(shù)據(jù)和1個引腳用于中斷信號事件.時鐘可使能或者不使能.該模式只有在支持8位data模式時才可能有。 |
3-pin FS/LS Serial Mode(optional) | data總線重定義為3-pin串行模式,包括3個引腳發(fā)送和接收USB的串行數(shù)據(jù)和1個引腳用于中斷信號事件.時鐘可使能或者不使能. |
Carkit Mode(optional) | Data總線重定義為Carkit模式,包括2個引腳用于串行UART數(shù)據(jù)傳輸和1個引腳用于中斷信號事件,時鐘可選停止 |
1.7上電和復(fù)位
ULPI PHY提供內(nèi)部通電復(fù)位電路,該電路在通電時復(fù)位所有邏輯,包括UTMI+核心、ULPI接口和寄存器。
通電后,當(dāng)時鐘開始翻轉(zhuǎn)時,LINK必須通過寫入功能控制寄存器Function Control 中的Reset 位來重置PHY。當(dāng)該位被置位時,PHY將拉高dir并復(fù)位數(shù)字核心。
復(fù)位完成后PHY拉低dir,自動清除Function Control****寄存器的Reset位。
在拉低dir之后,PHY必須立即重新拉高dir,并向LINK發(fā)送RX CMD更新狀態(tài)。
復(fù)位期間,數(shù)據(jù)總線由PHY驅(qū)動,但數(shù)據(jù)未定義,LINK需要丟棄該數(shù)據(jù)。
在復(fù)位完成且dir被重新拉低之前,LINK不得嘗試訪問PHY。ULPI接口和寄存器不受復(fù)位的影響,除非寄存器定義中另有說明。
如下是一個典型的上電復(fù)位過程
T0表示電源穩(wěn)定
T2表示POR上電復(fù)位完成
對于時鐘輸出模式,當(dāng)PHY正在復(fù)位時,DIR引腳將被驅(qū)動為高電平,直到60 MHz輸出時鐘穩(wěn)定為止。
在時鐘輸入模式的情況下,DIR將保持高電平,直到內(nèi)部PLL鎖定并穩(wěn)定。
一旦PHY和LINK都完成復(fù)位,PHY就會向LINK發(fā)送RXCMD
PHY有可選的引腳復(fù)位RESETB,拉低RESETB將導(dǎo)致60 MHz輸出時鐘停止,DIR被驅(qū)動為高電平。PHY內(nèi)部將以與POR相同的方式進行復(fù)位,PLL將重新鎖定,ULPI寄存器將返回到其默認狀態(tài)。
1.8中斷事件通知
在任何模式下,PHY都能夠檢測中斷事件,并通知LINK中斷事件已經(jīng)發(fā)生。
。中斷事件通知由USB Interrupt Enable Rising 、USB InterruptEnable Falling 和Carkit Interrupt Enable 這幾個寄存器配置。
如果啟用了中斷,則無論PHY處于哪種模式,PHY都必須為所需的電路供電,唯一的例外是僅在同步模式下有效的HostDisconnect中斷,以及由IdPullup控制的IdGnd中斷。
為了確保時鐘停止時能夠檢測到中斷,LINK應(yīng)同時啟用上升沿和下降沿觸發(fā)。
如果處于同步模式,則中斷事件會導(dǎo)致PHY向LINK發(fā)送RX CMD命令字節(jié)。
如果不處于同步模式,則中斷事件導(dǎo)致PHY控制int引腳來通知中斷,當(dāng)Link檢測到int有效時,它會喚醒時鐘(如果是停止的),然后讀取USB中斷鎖存USB Interrupt
Latch和Carkit中斷鎖存寄存器 Carkit Interrupt Latch,以確定中斷源。
1.9 時序
1.9.1 時鐘
下表總結(jié)了時鐘時序。8位接口的時序來自UTMI。可選的4位接口添加了新的時序。ULPI還引入了幾個必須由PHY供應(yīng)商填寫的新參數(shù)。如果PHY支持可選輸入時鐘,則LINK時鐘必須滿足表中的要求和任何供應(yīng)商特定的要求。
-
4位接口時鐘頻率和占空比容差減少一半到5%,因為雙邊沿傳輸,上下邊沿都需要傳輸數(shù)據(jù)。
-
Clock startup time after de-assertion of SuspendM: Peripheral 該事件計算了以滿足chirp 時序,來源于UTMI規(guī)格書
-
Clock startup time after de-assertion of SuspendM: HOST,廠商填寫,建議啟動時間小于1ms以滿足恢復(fù)時間resume要求。如果PHY用作主機,并且接口時鐘不能設(shè)計為在1ms內(nèi)可用,則必須在內(nèi)部自動發(fā)送恢復(fù)resume 信號。
-
如果PHY支持可選的輸入時鐘功能,則PHY供應(yīng)商必須說明準備時間PHY preparation time after first transition of input clock。PHY必須同步其PLL,并準備在指定時間前接受來自LINK的傳輸命令。LINK時鐘啟動時間加上PHY準備時間,必須滿足外圍設(shè)備5.6ms的啟動時間(UTMI規(guī)格書中的說明),建議主機的總啟動時間為1ms。
輸出時鐘模式
PHY必須能夠提供輸出時鐘,并滿足上表中列出的要求。
8位外設(shè)的輸出時鐘時序遵循UTMI規(guī)范,穩(wěn)態(tài)頻率(FSTEADY)提供USB高速數(shù)據(jù)所需的±500ppm精度。啟動時間(TSTART_DEV)允許外圍設(shè)備喚醒其時鐘,并在7ms的最大允許時間內(nèi)完成Chirp-K的傳輸(TSTART_DEV+TSTEADY)。
對于具有8位數(shù)據(jù)總線的主機,ULPI定義了一個新的輸出時鐘啟動時間(TSTART_host)。
當(dāng)USB主機檢測到遠程喚醒信號時,它必須喚醒時鐘,并在1ms的最大允許時間內(nèi)開始發(fā)送resume-K,PHY供應(yīng)商必須指定此值。
對于可選的4位數(shù)據(jù)接口,上升沿和下降沿都用于時鐘數(shù)據(jù)。為了提供可用的下降沿,ULPI將頻率(FSTART_4BIT)和占空比(DSTART_4BIT)容差降低了5%。
在所有情況下,當(dāng)PHY掛起suspended 或時鐘不“可用”時,必須停止輸出時鐘。
如下是一個PHY時鐘輸出模式的示意,時鐘輸出模式是PHY必須要支持的,
REFCLK輸入晶體或者時鐘源通過內(nèi)部PLL產(chǎn)生時鐘CLKOUT。
輸入時鐘模式(可選)
PHY可以可選地支持來自LINK的60MHz輸入時鐘,從而不需要晶體。PHY必須從60MHz輸入時鐘驅(qū)動其內(nèi)部PLL。
PHY供應(yīng)商負責(zé)指定所需的輸入時鐘時序。PHY供應(yīng)商必須說明所需的頻率、占空比、抖動、上升和下降時間偏差,如上表所示。還必須指定內(nèi)部PHY時鐘準備時間TPREP。如有必要,需求應(yīng)包括輸入電容以及吸電流和源電流能力
LINK可以選擇在低功率模式期間禁用或關(guān)閉其PLL,并且在其PLL穩(wěn)定之前不應(yīng)激活其時鐘輸出。不穩(wěn)定的LINK時鐘可能導(dǎo)致PHY PLL需要更長的時間來穩(wěn)定。
該模式是可選的,如下是一個示意
比如對于USB334x則CLKOUT接VDDIO表示使用該模式,不同芯片可能會不一樣,要看手冊決定。
輸入時鐘的抖動
如下的時序測試平面中
USB規(guī)格強制要求,在連接器A(TP2)處測得的高速傳輸眼圖的抖動不大于7.5%
在PHY引腳(TP1)處測得的抖動建議不大于5%.
ULPI規(guī)范沒有指定LINK輸出時鐘引腳(TP0)處的時鐘抖動要求,
然而LINK和PHY設(shè)計者應(yīng)當(dāng)最小化他們的時鐘抖動,使得LINK加PHY抖動的總和滿足推薦的5%抖動預(yù)算。
1.9.2 控制和數(shù)據(jù)
控制和數(shù)據(jù)時序要求如下,這些時序僅適用于同步模式。所有時序都是相對于在PHY時鐘引腳處看到的時鐘來測量的。控制信號和8位數(shù)據(jù)總是在時鐘的上升沿上計時,而可選的雙沿4位數(shù)據(jù)信號在上升沿和下降沿上計時。
主要關(guān)注建立時間和保持時間。
4位數(shù)據(jù)時鐘(可選)
PHY可以可選地支持4位數(shù)據(jù)總線而不是8位數(shù)據(jù)總線。原始的8位數(shù)據(jù)或命令被分成兩個4位的“半字節(jié)”。最低有效半字節(jié),數(shù)據(jù)(3:0),首先在時鐘的上升沿傳輸。最高有效的半字節(jié),數(shù)據(jù)(7:4),在時鐘的下降沿被第二次傳輸。不允許傳輸奇數(shù)個4位半字節(jié),這確保了完整字節(jié)的數(shù)據(jù)到達與8位設(shè)計的上升沿相同。
LINK和PHY必須滿足關(guān)于上升沿和下降沿規(guī)定的更嚴格的定時。允許輸出和輸入時鐘模式。
控制信號dir、stp和nxt僅在60MHz接口時鐘的上升沿上同步,因為數(shù)據(jù)傳輸總是字節(jié)對齊的。
時序如圖所示
1.10總結(jié)
本篇概述了ULPI相關(guān)的內(nèi)容,內(nèi)容比較多后面還有工作模式和寄存器相關(guān)內(nèi)容會分開講。
1.11參考
《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》
《MicroChip AN 19.17 ULPI Design Guide》
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8575瀏覽量
151014 -
usb
+關(guān)注
關(guān)注
60文章
7936瀏覽量
264456 -
PHY
+關(guān)注
關(guān)注
2文章
301瀏覽量
51732 -
驅(qū)動開發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12072 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
125
發(fā)布評論請先 登錄
相關(guān)推薦
評論