基于DWC2的USB驅(qū)動開發(fā)-0x09 ULPI接口協(xié)議其他工作模式介紹 (qq.com)
ULPI(其他工作模式介紹)
1.1 前言
上一篇講解了ULPI基本的一些概念,這一篇就重點講解其具體的工作模式,同步模式是重點內(nèi)容比較多放在下一篇,這一篇先講其他模式。
1.2 低功耗模式
當(dāng)USB總線掛起時,LINK可以選擇性地將PHY置于低功耗模式。PHY可以關(guān)閉除接口引腳和全速接收器之外的所有電路。如果存在VBUS,總線電阻器也必須通電。如果設(shè)置了相應(yīng)的寄存器位,則對應(yīng)功能都必須通電,包括中斷源和電荷泵。如果PLL斷電,則必須停止時鐘而不出現(xiàn)毛刺。
1.2.1 低功耗模式的Data線重定義
當(dāng)處于低功耗模式時,PHY使用下表中列出的信號驅(qū)動數(shù)據(jù)線(3:0)。當(dāng)處于低功耗模式時,必須從FS接收器組合驅(qū)動LineState。
每當(dāng)發(fā)生任何未屏蔽的中斷時,都會使得int引腳信號有效。
PHY必須直接從模擬電路鎖存中斷事件,因為時鐘已斷電。
LINK忽略8位數(shù)據(jù)總線的數(shù)據(jù)位(7:4)的信號。
輸入時鐘和輸出時鐘模式都必須遵循這些規(guī)則。
信號 | 映射到 | 方向 | 描述 |
---|---|---|---|
nestate(0) | data(0) | OUT | LineState(0) 由FS 模擬接收器直接驅(qū)動。 |
nestate(1) | data(1) | OUT | LineState(1) 由FS 模擬接收器直接驅(qū)動。 |
reserved | data(2) | OUT | 保留,PHY必須拉低該引腳。 |
int | data(3) | OUT | 高有效,有未屏蔽中斷時PHY拉高該引腳。 |
1.2.2 進(jìn)入低功耗模式
LINK寫Function Control 寄存器的SuspendM 為0b使得PHY進(jìn)入低功耗模式。
如圖所示LINK或PHY時鐘可以在PHY接受寄存器寫入數(shù)據(jù)后至少停止五個周期。
當(dāng)處于低功耗模式時,PHY拉高dir,并保持nxt為低。
在拉高dir之后,提供了一個數(shù)據(jù)總線周轉(zhuǎn)周期turn around,在此期間,數(shù)據(jù)上的值無效。
PHY在turn around周期之后立即開始按照低功耗模式的Data線重定義信號驅(qū)動data[3:0]。
1.2.3 退出低功耗模式
如圖所示,LINK通過異步拉高stp向PHY發(fā)出退出低功率模式的信號。PHY立即開始喚醒其內(nèi)部電路。當(dāng)PHY時鐘滿足ULPI時序要求時,PHY拉低dir。PHY必須確保在拉低dir之前至少驅(qū)動了5個時鐘周期。PHY還必須確保在拉低dir之前將SuspendM寄存器自動設(shè)置為1b。
LINK在檢測到dir拉低的一個CLK之后,拉低stp。
在拉低dir之后,提供了一個數(shù)據(jù)總線周轉(zhuǎn)周期turn around,在此期間,數(shù)據(jù)上的值無效。
PHY在turn around之前立即停止按照低功耗模式的Data線重定義信號驅(qū)動data[3:0]。
當(dāng)LINK提供輸入時鐘時,PHY必須在TPREP內(nèi)同步其內(nèi)部時鐘TPREP是實現(xiàn)相關(guān)的。
PHY提供輸出時鐘時的退出低功耗
LINK提供輸入時鐘時的退出低功耗
1.2.4 拒絕虛假恢復(fù)
由于USB環(huán)境的噪聲,可能導(dǎo)致低功耗模式下PHY驅(qū)動的異步LineState 輸出,有短暫的non-J-state條件或者毛刺。
LineState上的毛刺可能導(dǎo)致LINK短暫的拉高stp,這應(yīng)該要認(rèn)為是虛假的恢復(fù)PHY必須拒絕這個事件。PHY可以在重新啟動時鐘之前選擇性地拒絕stp上的毛刺,如圖所示。PHY必須通過在PHY拉低dir時在時鐘的邊沿去檢查stp是否拉高,來確定是否滿足退出低功耗模式的條件。
如果在dir被拉低的周期中stp沒有被拉高,那么PHY必須重新拉高dir并返回到低功率模式,而無需LINK的進(jìn)一步操作,如圖所示。
1.3 全速/低速串行模式(可選)
全速/低速串行模式(FsLsSerialMode)使LINK能夠直接訪問FS/LS串行模擬收發(fā)器。
ULPI中定義了兩種類型的串行模式:3p FsLsSerialMode和6p FsL sSerialmode。
這兩種模式都是可選的。與低功率模式不同,F(xiàn)S/LS收發(fā)器必須通電。
如果設(shè)置了相應(yīng)的寄存器位,則對應(yīng)功能都必須通電,包括中斷源和電荷泵。
1.3.1 FsLsSerialMode的數(shù)據(jù)線重定義
6p串行模式為UTMI+中定義的每個串行信號提供一條單獨的數(shù)據(jù)線。3p串行模式將USB接收和傳輸數(shù)據(jù)壓縮到雙向數(shù)據(jù)線上,并提供4位數(shù)據(jù)總線PHY實現(xiàn)可以支持串行信號。
在任一模式中,UTMI+的低有效tx_enable_n信號被轉(zhuǎn)換為高有效tx_enable,用于在ULPI總線上傳輸,這允許默認(rèn)的ULPI總線空閑狀態(tài)保持在00h。
在兩種串行模式中,都提供了一個中斷引腳。只要發(fā)生未屏蔽的中斷事件,就會拉高int引腳。
當(dāng)處于6p串行模式時,PHY使用下表中列出的信號驅(qū)動數(shù)據(jù)(7:0)。
當(dāng)處于3p串行模式時,PHY使用下表中列出的信號驅(qū)動數(shù)據(jù)(3:0)。
1.3.2 進(jìn)入FsLsSerialMode模式
為了進(jìn)入6p串行模式,LINK在接口控制寄存器Interface Control中設(shè)置6-Pin FsLsSerialMode位,使數(shù)據(jù)總線切換到異步操作,并采用新的總線數(shù)據(jù)定義。
為了進(jìn)入3p串行模式,LINK在接口控制寄存器Interface Control中設(shè)置3-Pin FsLsSerialMode位,使數(shù)據(jù)總線切換到異步操作,并采用新的總線數(shù)據(jù)定義。
默認(rèn)情況下,輸出時鐘斷電以減少串行模式下的功耗,如圖所示。進(jìn)入串行模式后至少5個時鐘周期后,時鐘停止,當(dāng)時鐘不可用時,PHY必須拉高dir。在拉高dir之后,提供了一個數(shù)據(jù)總線周轉(zhuǎn)周期turn around,在此期間,數(shù)據(jù)上的值無效。PHY在周轉(zhuǎn)周期之后立即開始驅(qū)動串行模式信號。
如果LINK要求時鐘在串行模式下運行,它可以在進(jìn)入串行模式之前在接口控制寄存器Interface Contro中設(shè)置ClockSuspendM信號,如圖所示。
1.3.3 退出FsLsSerialMode模式
當(dāng)LINK檢測到int為高時,它應(yīng)該通過拉高stp來退出FsLsSerialMode。
當(dāng)ULPI接口返回同步模式時,LINK可以讀取USB中斷鎖存寄存器USB Interrupt Latch以確定中斷源。如果時鐘未運行,退出FsLsSerialMode與退出低功率模式相同,如圖所示。
如果時鐘正在運行,則LINK通過拉高stp向PHY發(fā)出退出FsLsSerialMode的信號。
PHY在檢測到stp拉高后將拉低dir 1個或多個周期,如圖所示。在拉低dir之后的一個時鐘中,LINK取消拉高stp。與低功率模式一樣,在取消拉高dir之后的周期中,有一個時鐘的總線數(shù)據(jù)周轉(zhuǎn)周期,在周轉(zhuǎn)周期內(nèi),數(shù)據(jù)上的值無效。PHY在緊接周轉(zhuǎn)周期之前停止驅(qū)動串行模式信號。
1.4 Carkit模式(可選)
當(dāng)設(shè)置接口控制寄存器Interface Control中的CarkitMode位時,選擇該模式。
它允許LINK使用UART信號通過PHY與遠(yuǎn)程車載套件進(jìn)行通信。
默認(rèn)情況下,當(dāng)PHY進(jìn)入Carkit模式時,時鐘會斷電。進(jìn)入和退出Carkit模式與串行模式相同。如果LINK要求時鐘在Carkit模式下運行,它可以在進(jìn)入Carkit模式之前在接口控制寄存器Interface Control中設(shè)置ClockSuspendM信號。
只要發(fā)生未屏蔽的中斷事件,就會拉高int引腳。當(dāng)LINK檢測到int為高時,它應(yīng)該通過拉高stp來喚醒時鐘(如果斷電)。如果時鐘已經(jīng)在運行,LINK拉高stp一個周期,將接口切換到同步模式。
當(dāng)PHY處于同步模式時,LINK可以讀取Carkit中斷鎖存寄存器Carkit Interrupt Latch以確定中斷源。
1.5 保護(hù)PHY輸入信號
由于包括但不限于硬件復(fù)位或緩慢通電的原因,LINK可能無法正確驅(qū)動ULPI接口。在這種情況下,當(dāng)PHY的dir拉低時,LINK無法將數(shù)據(jù)驅(qū)動到空閑00h狀態(tài)。PHY數(shù)據(jù)輸入信號上的未知值可能會啟動未經(jīng)請求的USB活動、寄存器寫入、串行或Carkit傳輸。
因此,PHY必須始終保護(hù)其數(shù)據(jù)輸入。
為了防止數(shù)據(jù)輸入上的錯誤命令,PHY必須在stp上包含一個弱上拉電阻器。
任何時候stp出乎意料地高,PHY都認(rèn)為LINK無法驅(qū)動接口,并且必須進(jìn)入保持狀態(tài)。
當(dāng)處于保持狀態(tài)時,PHY不得使用數(shù)據(jù)上的命令,并且不得拉高dir,除非其內(nèi)部時鐘不穩(wěn)定。LINK還被允許在任何時候?qū)tp驅(qū)動為高電平,從而迫使PHY停止使用數(shù)據(jù)上的命令。
當(dāng)PHY處于保持狀態(tài)時,它可以選擇性地在數(shù)據(jù)上啟用弱下拉電阻器,防止它們浮動。
當(dāng)PHY處于保持狀態(tài)時發(fā)生的所有RXCMD更改必須用單個RX CMD更新來替換,當(dāng)ULPI總線可用時,PHY退出保持狀態(tài)時發(fā)送該更新。RX CMD更新必須始終傳達(dá)當(dāng)前RXCMD值,而不是以前或舊的值。
如果LINK始終可以將stp和數(shù)據(jù)驅(qū)動到已知值,則可以通過將接口控制寄存器Interface Control中的接口保護(hù)禁用位Interface Protect Disable設(shè)置為1b來禁用保護(hù)功能,這會降低功耗。
當(dāng)時鐘運行時,LINK應(yīng)在停止驅(qū)動ULPI接口之前將stp驅(qū)動高至少一個時鐘周期,迫使PHY進(jìn)入保持狀態(tài)以保護(hù)其數(shù)據(jù)輸入。PHY中的上拉將在隨后的周期中保持stp為高,如圖所示。
對于LINK在停止驅(qū)動ULPI接口之前無法將stp驅(qū)動為高電平的實現(xiàn),無法保證PHY操作的安全性。
在通電期間或時鐘未運行時,PHY始終拉高dir,以保護(hù)其數(shù)據(jù)輸入,如圖所示。如果當(dāng)PHY拉低dir時stp為高,則PHY將立即進(jìn)入保持狀態(tài)并保護(hù)其數(shù)據(jù)輸入。當(dāng)LINK將stp驅(qū)動為低時,PHY立即開始處理其數(shù)據(jù)輸入。
如圖所示,如果當(dāng)LINK停止驅(qū)動ULPI接口時PHY處于低功耗模式,則stp上的上拉將自動喚醒PHY。如果LINK不希望PHY自動喚醒,則它必須將stp驅(qū)動為低電平。
如果當(dāng)LINK恢復(fù)驅(qū)動ULPI接口時dir為高,則LINK應(yīng)當(dāng)假定PHY處于低功率模式并且驅(qū)動stp為高以喚醒PHY,如圖所示,在拉低dir之后的時鐘中,LINK拉低stp。當(dāng)dir和stp都為低電平時,PHY在當(dāng)前時鐘周期中開始處理其數(shù)據(jù)輸入。這也適用于通電期間。
如圖所示,當(dāng)dir為高時,LINK可以在通電期間將stp驅(qū)動為低電平。
當(dāng)dir被拉低時,PHY在周轉(zhuǎn)周期之后開始處理其數(shù)據(jù)輸入。
1.6 總結(jié)
本篇講解了低功耗,全速/低速串行模式,Carkit模式,以及PHY輸入信號的保護(hù)處理。其中低功耗模式是必須的,其他的是可選實現(xiàn)的。
1.7 參考
《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》
《MicroChip AN 19.17 ULPI Design Guide》
審核編輯:湯梓紅
-
接口協(xié)議
+關(guān)注
關(guān)注
5文章
41瀏覽量
18534 -
接口
+關(guān)注
關(guān)注
33文章
8575瀏覽量
151014 -
usb
+關(guān)注
關(guān)注
60文章
7936瀏覽量
264454 -
總線
+關(guān)注
關(guān)注
10文章
2878瀏覽量
88051 -
電荷泵
+關(guān)注
關(guān)注
3文章
238瀏覽量
29581 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
125
發(fā)布評論請先 登錄
相關(guān)推薦
評論