色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DWC2的USB驅動開發-0x0A ULPI接口同步模式介紹

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-06-04 15:35 ? 次閱讀

1.1 前言

ULPI的同步模式是最主要的模式,內容也比較多,所以單獨一篇介紹。

1.2 ULPI命令字節

ULPI修改原始的UTMI數據流,使其能夠適應更多的數據類型。

傳輸期間PID字節中的冗余信息被ULPI傳輸命令(TX CMD)重載。

接收流中未使用的數據字節被接收命令(RX CMD)重載。

ULPI定義了由LINK發送的發送命令字節Transmit Command 和由PHY發送的接收命令字節 **Receive Command ** 。

以上的發送接收是以LINK的角度來看的。

1.2.1 發送命令字節(TX CMD)

LINK通過發送下表發送命令字節來啟動到PHY的傳輸。TX CMD字節由2位命令代碼和6位有效載荷組成。

2位命令代碼可以定義4種命令類型。

圖片

1.2.2 接收命令字節(RX CMD)

PHY發送下表的接收命令字節,以更新線路狀態、USB接收、斷開連接和OTG狀態信息給LINK。

圖片

RX CMD中的VbusValid指示來自內部VbusValid比較器或外部Vbus指示輸入。

Hostdisconnect 主機斷開連接狀態必須僅在主機模式下指示給LINK(DpPulldown和DmPullddown均設置為1b。

當處于設備模式時,必須忽略Hostdisconnect,并且不能屏蔽RxActive或RxError上的事件。

1.2.3 發送RX CMD的時機

RX CMD僅在同步模式下發送,并將兩種類型的信息傳輸到LINK。第一個是USB接收信息。第二個是中斷事件。所有信息被編碼到單個RX CMD字節中。

USB接收信息包括線路狀態LineState、RxActive和RxError。

在USB傳輸之后,PHY必須向LINK發送具有指示EOP的LineState的RX CMD。

對于高速,EOP就是LineState 的!squelch到squelch 。

對于全速和低速,EOP是LineState從SE0到J的轉換。

中斷事件包括Hostdisconnect、Vbus、IdGnd和其他源,如Carkit中斷。

只要檢測到這些事件,相應的USB中斷啟用上升沿USB Interrupt

Enable Rising 或USB中斷啟用下降沿寄存器USB Interrupt Enable Falling

配置了,就會向LINK發送RX CMD。

如圖說明了PHY如何向LINK發送RX CMD信息。第一個數據包顯示單個RX CMD。如果檢測到連續的更改,PHY將保持dir拉高并驅動連續的RX CMD,如第二個數據包所示。LINK必須能夠接受任何數量的連續的RX CMD。

圖片

RX CMD的優先級低于USB接收和傳輸數據,但優先級高于寄存器讀取和寫入命令。

如果ULPI總線忙于傳輸USB數據,則RX CMD將在PHY中排隊,并在ULPI總線可用時發送。

當發送到LINK時,排隊的RX CMD必須始終傳達當前RX CMD值,而不是以前或舊的值。

當在USB接收數據包期間nxt被拉低,PHY也必須向LINK發送RX CMD。

1.3 USB包

本節介紹如何通過ULPI總線傳輸和接收USB數據包。給出了PHY和LINK處理延遲的限制,以便可以滿足USB數據包間延遲。

1.3.1 NOPID數據包

如圖所示,為了發送不包含數據包標識符(PID)的USB數據,LINK發送NOPID類型的TX CMD字節。

PHY可以拉低nxt以限制來自LINK的數據。PHY在TX CMD的第一個時鐘周期中不能拉低nxt,并且必須在檢測到stp高時去拉低nxt。

由于該命令不包含PID數據,PHY必須等待下一個數據字節,然后才能開始在USB上傳輸。

當最后一個字節已經被PHY接收時,LINK拉高stp1個周期,并且如果沒有發生傳輸錯誤,則將數據驅動到00h空閑狀態。在第一個字節被PHY接收之前,鏈路不得拉高stp。

該命令必須用于啁啾chirp 和恢復resume 信號,對于這種信號,必須首先將功能控制寄存器中Function Control 的OpMode位設置為10b。對于啁啾和恢復信號,PHY不需要插入填充比特,因此必須保持nxt為高,直到它看到stp脈沖為止。

當LINK用NOPID數據包驅動ULPI總線時,PHY不應拉高dir,除非它想中止數據包。

所有USB數據包傳輸期間的RX CMD更改,必須用在USB傳輸結束時,ULPI總線可用時,發送的單個RX CMD更新來替換。即USB數據傳輸過程中狀態的變化不需要管了,最后發一個最終的狀態RX_CMD給LINK即可。RX CMD更新必須始終傳達當前RX CMD值,而不是以前或舊的值。

image.png

1.3.2 PID數據包

如圖所示,為了傳輸USB數據包,Link首先驅動一個TX CMD字節。命令字節類型設置為01b(傳輸),并將USB數據包標識符(PID)放置在數據上(3:0)。

PHY使用nxt控制數據接收,LINK在檢測到nxt為高之后提供下一個字節,這與UTMI的DataIn和TxReady相同。當最后一個字節已經被PHY接收時,LINK拉高stp 1個時鐘周期,并且如果沒有發生傳輸錯誤,則將數據驅動到00h空閑狀態。

在第一個字節被PHY接收之前,LINK不得拉高stp。

對于所有PID數據包,PHY必須自動準備SYNC域并附加EOP域。當TX CMD的PID字段為5h時,PHY必須識別出這是幀開始(SOF)包,并且自動附加長EOP。

在拉高stp之后,LINK不能發送另一個數據包,直到第一個數據包在USB上完成。

如果在給定定時之前接收到RX CMD表示有EOP,LINK可以開始傳輸下一個數據包。PHY必須始終發送指示EOP的RX CMD。

當LINK用PID數據包驅動ULPI總線時,PHY不應拉高dir,除非它想中止數據包。

所有USB數據包傳輸期間的RX CMD更改,必須用在USB傳輸結束時,ULPI總線可用時,發送的單個RX CMD更新來替換。即USB數據傳輸過程中狀態的變化不需要管了,最后發一個最終的狀態RX_CMD給LINK即可。RX CMD更新必須始終傳達當前RX CMD值,而不是以前或舊的值。

UTMI+規格書所述,PHY必須在傳輸期間內部阻塞USB接收路徑。

USB data transmit (PID)

image.png

PHY drives an RX CMD to indicate EOP (FS/LS LineState timing not to scale)

image.png

1.3.3 USB發送錯誤

如果LINK在全速或低速USB數據包傳輸過程中遇到緩沖區運行不足,則必須在數據包結束前在數據包中插入一個位填充錯誤。為了強制表示傳輸錯誤,LINK在數據包結束時,在它拉高stp的同一時鐘周期中,將FFh驅動到數據上。LINK只能驅動一個字節的FFh,PHY將通過在USB總線上發送至少8個連續的1來自動生成全速傳輸錯誤。在發送另一個數據包之前,LINK必須等待指示SE0-to-J轉換的RX CMD。在第一個字節被PHY接收之前,LINK不得拉高stp。該序列取代了UTMI在傳輸的最后一個字節期間將OpMode從00b更改為10b的方法。為了強制表示高速傳輸錯誤,LINK必須在數據包末尾傳輸值翻轉的CRC。

image.png

1.3.4 USB包接收

如圖所示,當PHY接收到USB數據時,它首先通過拉高dir獲得數據總線的所有權。

PHY在與UTMI的RxActive有效相同的周期中拉高dir。

如果dir先前為低,則PHY將拉高dir和nxt,LINK立即接收RXCMD知道這是USB接收數據包。

如果dir先前為高,PHY將拉低nxt并驅動RX CMD,RxEvent字段設置為01b(RxActive狀態),以便LINK接收RX CMD直到狀態。

PHY可以在下一個周期中開始驅動數據,或者輸出RX CMD,直到USB數據可用。

PHY拉高nxt并在總線上發送一個字節,將有效的USB數據包數據發送給LINK。

當nxt為低電平時,PHY驅動RX CMD字節。

USB包接收過程中的狀態變化即RX CMD變化,必須在nxt為低時,發出。

如果nxt在數據包接收期間從不為低,則必須在USB數據包接收結束時ULPI 總線可用時發送單個RX CMD更新來替換所有RX CMD改變,即最后只發送一次RX CMD狀態,中間的就不管了。RX CMD更新必須始終傳達當前RX CMD值,而不是以前或舊的值。

雖然數據流已從UTMI的DataOut修改,但nxt與RxValid相同。

當RX CMD字節顯示RxActive被設置為0b或dir被拉低(以先發生者為準)時,LINK認為數據包已完成。

image.png

1.3.5 USB接收錯誤

如果PHY檢測到USB數據包接收錯誤,它將忽略任何當前接收的數據字節,拉低nxt,并在RxEvent字段設置為11b的情況下驅動RX CMD字節(RxError狀態)。

當RxActive被設置為0時,PHY拉低dir。RxError狀態與UTMI的RxError信號相同。

當檢測到全速位填充錯誤時,所有PHY實現都必須設置RxError。

PHY可以選擇性地為未與字節邊界對齊的高速EOP、數據溢出、數據下溢或其他有效接收錯誤條件設置RxError。

PHY在EOP之前不對單個全速dribble bit 位設置RxError。

LINK必須忽略出現接收錯誤的數據包。

如圖顯示了在數據包中間檢測到比特填充錯誤時ULPI接口的行為。

image.png

如圖顯示了在最后一個CRC字節中發生位填充錯誤時的行為。

image.png

1.3.6 USB包時序

USB規范定義了數據包間時間。ULPI規范通過指定PHY和LINK可用的時鐘周期的預算,將這些定時關聯回ULPI接口。

PHY必須在給定的定時范圍內處理數據。

類似地,LINK必須在給定的決策時間內做出響應,或者如果在給定的時間范圍內沒有收到響應,則超時。以下詳細說明所有要求的ULPI數據包間定時,并源自USB規范和UTMI PHY處理和同步延遲(來自UTMI規范)。

1. USB數據包間延遲和數據包超時

全速數據包間延遲是從第一個數據包的SE0到J轉換到第二個數據包上的SYNC域開始測量的。

高速包間延遲是從總線在第一包結束時進入空閑狀態開始測量的,直到總線在第二個數據包開始時離開空閑狀態時計算。

一個時鐘周期有8個HS位時間,一個FS位時間有5個時鐘周期,一個LS位時間有40個時鐘周期。如圖所示

USB規格指定的包間時間

image.png

位寬和時鐘關系

image.png

Transmit-Receive時間:在USB規范中定義為,最大連接的USB系統,包括通過6根USB電纜、5個外部集線器和下游主機或外圍設備的來回程時間。

2.PHY****管道延遲

使用ULPI接口的任何PHY必須符合表中給出的時序。

USB總線事件是相對于D+和D-線上的轉換來測量的。

ULPI接口定時是相對于檢測到轉換的時鐘邊緣來測量的(例如,PHY在時鐘de 邊緣檢測stp).

image.png

RX CMD Delay:與UTMI的線路狀態延遲2-3個時鐘相同,但由于RX CMD期間ULPI總線周轉turn around,最大值增加了1個額外的時鐘周期。

3.LINK決策時間

下表給出了為各種包序列分配給ULPI LINK的時間。當LINK傳輸第二個數據包時,它必須滿足數據包間的延遲。當LINK期望對傳輸的數據包做出響應時,它必須對數據包間延遲進行計時,以檢測超時。對于連續接收數據包,LINK必須能夠在給定的時間內接收它們。

image.png

Transmit-Transmit,Receive-Transmit:與UTMI的FS SIE決策時間7-19時鐘相同,但由于ULPI PHY在RX CMD期間需要總線周轉turn around,因此從最大值減去1個時鐘周期.

Transmit-Receive,UTMI規范說明高速傳輸到接收時間不正確,應忽略。

4.內部包時序圖

如圖說明了各種包序列的PHY管道延遲和LINK決策時間。

高速發送-發送包時序

image.png

高速接收-發送包時序

image.png

1.4寄存器操作

1.4.1 立即寄存器讀寫

寄存器寫

LINK發送寄存器寫入命令字節并等待nxt拉高。在nxt拉高之后的時鐘周期中,Link發送寫入寄存器的數據,并等待nxt再次拉高。當nxt第二次拉高時,Link在下一個時鐘周期中拉高stp以完成操作。PHY必須檢測stp拉高,然后才能接受另一個傳輸命令。如果PHY通過拉高dir中止RegWrite,則LINK必須在總線空閑時重試RegWrite。

image.png

寄存器讀

LINK發送寄存器讀取命令字節并等待nxt的拉高。在nxt拉高之后的時鐘周期中,PHY拉高dir以獲得對數據總線的控制。在dir拉高之后的時鐘周期中,PHY必須返回寄存器讀取數據。

當在寄存器讀取操作期間,即使是在寄存器內容返回的時鐘周期拉高dir,PHY也不拉高nxt。

這允許USB數據接收在任何時鐘周期內始終優先于寄存器讀取。如果PHY早于下圖中所示時刻拉高dir中止RegRead,則當總線空閑時,LINK必須重試RegRead

image.png

1.4.2 USB數據接收中止立即寄存器讀寫

寄存器讀取是ULPI不使用nxt來掐斷數據的唯一實例。nxt信號僅在USB接收期間被拉高,使得LINK能夠始終將USB數據接收與其他數據傳輸區分開來。

下顯示了在初始發送命令字節期間被USB接收中止的寄存器讀取或寫入。

image.png

下圖顯示了在寄存器讀取數據返回到LINK的同一時鐘周期內,USB接收中止了寄存器讀取。

image.png

在以上兩種情況下,PHY都拉高dir和nxt以指示RxActive。

寄存器讀取和寫入操作也會因PHY發送RX CMD而中止,除非是在寄存器讀取數據返回到LINK的時鐘周期內。

1.4.3 連續的寄存器讀寫和USB數據接收

下圖顯示了在寄存器讀取數據返回到LINK的同一周期中發生的USB數據接收。PHY必須首先返回寄存器讀取數據,而不是指示RxActive的RX CMD字節。PHY在下一個周期中指示RxActive,將USB接收數據與寄存器讀取連續放置

image.png

下圖顯示了在寄存器讀取完成后的時鐘中立即發生的USB數據接收。PHY將USB接收數據與寄存器讀取連續放置。

LINK必須能夠接受連續的數據包,其中dir不會在數據包之間拉低。

image.png

如下圖所示,如果dir在寄存器寫入操作結束時拉高stp的同一時鐘周期拉高,則PHY認為寄存器寫入已成功完成。PHY不會因為stp而拉低dir。

image.png

下圖顯示了在寄存器讀取數據返回到LINK后的時鐘周期中開始的USB數據接收。

注意,當dir在一個周期周期內拉低時,總線周轉turn around的兩個周期。

image.png

在所有情況下,PHY拉高dir和nxt以指示RxActive。

1.4.4 擴展寄存器讀寫

對立即寄存器地址2Fh的訪問表示對擴展寄存器集的訪問。在這種情況下,地址在下一個時鐘周期內可用。

寄存器寫

對于擴展寄存器寫入,如圖所示,Link發送一個地址設置為2Fh的寄存器寫入命令,并等待nxt拉高。在nxt拉高之后的時鐘周期中,Link發送擴展寄存器地址,并等待nxt再次拉高。

當 nxt 第二次拉高時,LINK發送寄存器寫入數據并等待 nxt 再次拉高。當nxt第三次拉高,LINK在接下來的時鐘周期拉高stp,以完成操作。如果PHY通過拉高dir中止RegWrite,則LINK必須在總線空閑時重試RegWrite。

image.png

寄存器讀

對于擴展寄存器讀取,如圖所示,Link發送一個地址設置為2Fh的寄存器讀取命令,并等待nxt拉高。在nxt拉高之后的周期中,Link發送擴展寄存器地址,并等待nxt再次拉高。當nxt第二次拉高時,PHY拉高dir以獲得對數據總線的控制。在dir拉高之后的周期中,PHY返回寄存器讀取數據。當在寄存器讀取操作期間拉高dir時,即使在返回寄存器讀取數據的時鐘周期期間,PHY也不拉高nxt。這允許USB接收在任何周期內優先于寄存器讀取。如果PHY在下圖所示之前通過拉高dir中止RegRead,則當總線空閑時,LINK必須重試RegRead

image.png

1.4.5 擴展寄存器讀寫被連續的USB數據接收中止

除了擴展地址字節周期外,擴展寄存器讀取與立即寄存器讀取相同。

有一個額外的情況,如圖所示,在擴展地址周期期間,USB接收中止了擴展寄存器讀取。

image.png

PHY發送RX CMD也會中止擴展寄存器讀取和寫入操作,但在寄存器讀取數據返回到LINK的周期期間除外。

1.5中止ULPI傳輸

1.5.1 LINK中止PHY

當LINK在ULPI總線上傳輸數據時,PHY可以通過拉高dir來中止LINK。ULPI沒有指定任何會導致這種情況發生的條件。

1.5.2 PHY中止LINK

當PHY在同步模式下拉高了dir時,LINK可以通過拉高stp來中止PHY,如圖所示。

在下一個周期中,PHY必須拉低dir,并保持拉低dir直到Link事務完成。如果LINK如圖所示執行寄存器寫入或USB傳輸,則PHY必須等待序列末尾的stp脈沖,然后才能重新拉高dir。如果LINK執行寄存器讀取,PHY必須返回寄存器讀取數據,如圖所示,并且如果需要進行USB接收數據或RX CMD,則允許繼續拉高dir。

image.png

image.png

LINK不能在拉高dir的同一周期中中止PHY,并且PHY必須在其首次拉高dir的相同周期中忽略stp。

如果LINK在與拉低dir相同的周期中拉高stp,則PHY必須仍然保證LINK事務。

當PHY中止時,LINK必須在周轉turn around周期后立即驅動TX CMD。如果LINK沒有立即驅動TX CMD,則允許PHY重新拉高dir,如圖所示。

所有ULPI PHY實現必須支持被拉高stp的LINK中止。雖然該功能可以在任何時候使用,但它主要用于LINK通過禁用PHY來關閉babbling端口。如果LINK在USB接收數據包期間拉高stp,則PHY不能保證當前包和下一包期間USB數據的有效性。

image.png

1.6 USB操作

以下部分描述了LINK和PHY必須如何在ULPI總線上進行通信,以執行特定的USB操作序列。

圖表是在時間軸上水平壓縮的,而不是按比例壓縮的。

1.6.1 高速檢測握手(Chirp)

高速檢測握手,或稱Chirp,如圖所示,注意,圖中的時間不是按比例排列的,也沒有顯示所有RX CMD更新。總線周轉周期turn around也沒有顯示,并且必須在dir的每次拉高和拉低后發生一個周期。

必須遵循以下事件順序

1.FS/LS檢測–如果D-為高,主機檢測外圍設備連接為低速,如果D+為高,則檢測為全速。如果主機檢測到低速外圍設備,則不遵循此協議的其余部分。

2.主機驅動-如果主機檢測到全速外圍設備,它會通過寫入功能控制寄存器并設置XcvrSelect=00b(HS)和TermSelect=0b來重置外圍設備,從而驅動總線上的SE0(D+和D-通過45歐接地).主機還設置OpMode=10b用于正確的Chirp發射和接收,接收Chirp會使LineState以不同的方式進行編碼,并考慮高速差分接收器輸出,以免出現錯誤的總線活動。SE0的起點標記為T0。設備PHY拉高dir,并使用RX CMD向LINK通知線路狀態改變。

3.設備響應-在檢測到SE0不少于2.5us后,如果設備具有高速功能,則設備LINK將XcvrSelect設置為00b(HS),將OpMode設置為10b(chirp),并立即發送一個TX CMD(NOPID),發送一個chirp K不少于1ms。并且chirp K必須在復位時間T0之后不超過7ms結束。如果設備處于低功率模式,它必須在5.6ms內喚醒其時鐘,留下200us用于LINK開始傳輸chirp K信號,留下1.2ms用于chirp信號完成(最壞情況下,時鐘慢10%)

4.主機響應–如果主機未檢測到設備chirp,則必須繼續發送SE0,直到重置結束。如果主機在總線離開chirp K狀態后檢測到設chirp K不少于2.5us、然后不多于100us,主機發送具有交替的chirp K和J序列的TX CMD(NOPID)。每個單獨的chirp K或J必須持續不少于40us且不超過60us。

5.HS空閑–設備必須檢測到最小的chirp K-J-K-J-K-J。每個單獨的chirp K和J必須被檢測至少2.5us。在看到該最小序列之后,設備LINK設置TermSelect=0b和OpMode=00b。設備現在處于高速模式,看到LineState的!squelch。當設備在LineState上看到squelch(10b)時,它知道主機已經完成了chirp,并等待高速USB通信開始。發送chirp序列后,主機將OpMode更改為00b,并開始發送USB數據包.

image.png

1.6.2 前導

USB將前導數據包定義為低速數據包的報頭,低速數據包必須在主機和集線器之間通過全速總線傳輸。要進入前導碼模式,LINK在功能控制寄存器中設置XcvrSelect=11b。當處于前導碼模式時,PHY的操作與全速模式相同,并以全速上升和下降時間發送所有數據。每當LINK以前導碼模式發送USB數據包時,PHY必須在以低速比特率發送LINK數據包之前以全速比特率自動發送前導碼報頭。PHY必須確保全速PRE-PID的最后一位和低速包SYNC的第一位之間的最小間隙為4個全速位時間。在發送PRE PID之后,PHY必須驅動J至少1 FS位時間,之后上拉電阻器可以在總線上保持J狀態。

在前導碼模式中,PHY還可以從全速總線接收低速包。

image.png

1.6.3 Usb掛起和恢復

掛起和恢復由HOST或者HUB啟動

1. 低速掛起和恢復

下圖說明了主機或集線器如何進入低速掛起狀態,然后啟動恢復信號以喚醒下游低速設備。圖計中時不是按比例進行的,也沒有顯示所有RX CMD線路狀態更新。總線周轉周期也沒有顯示,并且必須在dir的每次拉高和拉低后發生一個時鐘周期。以下描述了事件的過程。

1.LS通訊-最初,主機和設備通過USB總線發送低速流量(XcvrSelect設置為10b)。主機有其15k? 下拉已啟用(DpPulldown和DmPullddown設置為1b)和45? 終端已禁用(TermSelect設置為1b)。設備具有1.5k? 上拉連接到D-(TermSelect設置為1b)。

2.LS掛起–當設備在3ms內沒有看到總線活動時,它進入掛起狀態。設備的LINK通過設置SuspendM位將PHY置于低功率模式,從而使PHY僅汲取掛起電流。主機可能斷電,也可能未斷電。

3.恢復K–當主機想要喚醒設備時,它將OpMode設置為10b,并傳輸LS K至少20ms。設備的LINK看到線路狀態上的恢復K(01b),并拉高stp以喚醒PHY

4.EOP–當stp被拉高時,主機PHY自動附加一個LS EOP(2位LS SE0,后跟1位LS J)。主機PHY知道添加LS EOP,因為主機的DpPulldown和DmPulldown被設置為1b。LS EOP完成后,主機LINK將OpMode設置為00b以進行正常LS操作。設備的LINK看到LS EOP并恢復正常LS操作

image.png

2. 全速掛起和恢復

下圖說明了主機或集線器如何進入全速掛起,然后啟動恢復信號以喚醒下游全速設備。

圖中計時不是按比例進行的,也沒有顯示所有RX CMD線路狀態更新。總線周轉周期也沒有顯示,并且必須在dir的每次拉高和拉低后發生一個周期。以下描述了事件的過程。

1.FS通訊-最初,主機和設備通過USB總線進行全速數據傳輸(XcvrSelect設置為01b)。主機其15k? 下拉已啟用(DpPulldown和DmPullddown設置為1b)和45? 終端已禁用(TermSelect設置為1b)。設備的1.5k? 上拉連接到D+(TermSelect設置為1b)。

2.FS掛起–當設備在3ms內沒有看到總線活動時,它進入掛起狀態。設備的LINK通過設置SuspendM位將PHY置于低功率模式,從而使PHY僅汲取掛起電流。主機可能斷電,也可能未斷電。

3.Resume K–當主機想要喚醒設備時,它將OpMode設置為10b,并傳輸FSK至少20ms。設備的LINK看到線路狀態上的恢復K(10b),并拉高stp以喚醒PHY

4.EOP–當stp被拉高時,主機PHY自動附加一個LS EOP(2位LS SE0,后跟1位FS J)。主機PHY知道添加LS EOP,因為主機的DpPulldown和DmPulldown被設置為1b。LS EOP完成后,主機LINK將OpMode設置為00b以進行正常FS操作。設備的LINK看到LS EOP并恢復正常的FS操作。

image.png

3. 高速掛起和恢復

下圖說明了高速主機或集線器如何進入全速掛起狀態,然后啟動恢復信號以喚醒下游高速設備。圖中計時不是按比例進行的,也沒有顯示所有RX CMD線路狀態更新。總線周轉周期也沒有顯示,并且必須在dir的每次拉高和拉低后發生一個周期。以下描述了事件的過程。

1.HS通訊-最初,主機和外圍設備通過USB總線進行高速數據傳輸(XcvrSelect設置為00b)。主機的15k? 下拉電阻已啟用(DpPulldown和DmPullddown設置為1b)和45? 終端電阻已啟用(TermSelect設置為0b)。設備的45? 終端電阻已啟用(TermSelect設置為0b)。

2.FS掛起–當設備在3ms內沒有看到總線活動時,它進入掛起狀態。設備的LINK將PHY置于全速模式(XcvrSelect設置為01b),刪除45? 終止并啟用1.5k? D+上拉(TermSelect設置為1b)。然后,設備的LINK設置SuspendM將PHY置于低功率模式,從而使PHY僅汲取掛起電流。主機也更改為全速(XcvrSelect設置為01b),刪除45? 終端電阻(TermSelect設置為1b),然后可能斷電也可能不斷電

3.Resume K–當主機想要喚醒設備時,它將OpMode設置為10b,并傳輸FSK至少20ms。設備的LINK看到線路狀態上的恢復K(10b),并拉高stp以喚醒PHY。

4.HS通訊-主機LINK設置高速(XcvrSelect設置為00b),并啟用其45? 終端(TermSelect設置為0b)。設備的LINK在USB總線上看到SE0,并設置高速(XcvrSelect設置為00b),并啟用其45? 終端(TermSelect設置為0b)。主機的LINK將OpMode設置為00b以進行正常HS操作

圖片

1.6.4 遠程喚醒

設備啟動遠程喚醒(恢復)。當置于USB掛起狀態時,Link會記住它最初的操作速度。根據原始速度,LINK遵循以下詳細說明的協議之一。下圖中,計時不是按比例進行的,并且沒有顯示所有RX CMD線路狀態更新。總線周轉周期也沒有顯示,并且必須在dir的每次拉高和拉低后發生一個周期。

1. 低速遠程喚醒

圖片

A)主機和設備都以低功耗模式啟動。

B) 外設通過重新啟用其時鐘并設置其SuspendM位來開始遠程喚醒。

C) 設備開始驅動總線上的K以發出恢復信號。設備的LINK在傳輸時應假設線路狀態為K(01b)

D) 主機識別恢復,重新啟用其時鐘并設置其SuspendM位

E) 主機在檢測到遠程喚醒后1毫秒內接管恢復驅動程序。如果時鐘不能在1ms內重新啟動,PHY必須實現自動恢復功能。

F) 設備停止驅動恢復

G) 設備看到主機繼續驅動恢復。

H) 主機停止驅動恢復,PHY將LS EOP添加到低速恢復的末尾。設備將LS EOP識別為恢復的結束。T1為LS EOP間隔。

J) 主機和設備都通過將OpMode寫入正常來恢復正常操作。

2. 全速遠程喚醒

image.png

A)主機和設備都以低功耗模式啟動

B)外設通過重新啟用其時鐘并設置其SuspendM位來開始遠程喚醒。

C)設備開始驅動總線上的K以發出恢復信號。設備的LINK在發送時應假定線路狀態為K(10b)。

D)主機識別恢復,重新啟用其時鐘并設置其SuspendM位

E)主機在檢測到遠程喚醒后1毫秒內接管恢復驅動程序。如果時鐘不能在1ms內重新啟動,PHY必須實現自動恢復功能。

F)設備停止驅動恢復

G)設備看到主機繼續驅動恢復

H)主機停止驅動恢復,PHY將LS EOP添加到全速恢復的末尾。設備將LS EOP識別為恢復的結束。(T1是LS EOP間隔。)

I)主機和設備都通過寫入OpMode和XcvrSelect恢復到正常操作。

3. 高速遠程恢復

image.png

A)主機和設備都以低功耗模式啟動

B)設備通過重新啟用其時鐘并設置其SuspendM位(1)開始遠程喚醒

C)設備開始驅動總線上的K以發出恢復信號。設備的LINK在發送時應假定線路狀態為K(10b)。

D)主機識別恢復,重新啟用其時鐘并設置其SuspendM位(2)

E)主機在檢測到遠程喚醒后1毫秒內接管恢復驅動程序。如果時鐘不能在1ms內重新啟動,PHY必須實現自動恢復功能。

F)設備停止驅動恢復。

G)設備看到主機繼續驅動恢復

H)主機停止驅動恢復,總線返回高速空閑狀態。設備將高速空閑識別為恢復結束。(T1是LS EOP間隔。

I)主機和設備都通過寫入OpMode、XcvrSelect和TermSelect恢復到正常操作

4. 自動恢復

當USB主機檢測到來自下游設備或集線器的遠程喚醒信號(resume-K)時,主機必須在1ms內接管resume-K信號的驅動。

如果PHY處于主機模式,時鐘斷電,并且PHY檢測到遠程喚醒信號,則LINK必須喚醒時鐘并接管resume-K信號的驅動。如果時鐘無法在1ms內重新啟動,PHY必須提供自動恢復功能。如圖所示,PHY必須在內部驅動resume-K,直到時鐘恢復并接收到NOPID類型的TXCMD。

當時鐘恢復時,LINK通過發送NOPID類型的TXCMD來接管resume-K的驅動。當在自動恢復和由NOPID命令中的LINK驅動的恢復-K之間轉換時,PHY必須確保在恢復序列期間沒有故障。PHY還必須確保在退出低功率模式之前將SuspendM寄存器位自動設置為1b。

實現由PHY供應商確定,但是PHY供應商必須指定時鐘喚醒時間TSTART_HOST。

如果時鐘可以在1ms內重新啟動,則PHY不需要提供自動恢復功能。

接口控制寄存器中的自動恢復位控制自動恢復功能。

圖片

1.6.5 設備連接和斷開連接檢測

USB 中斷狀態寄存器中的主機斷開位指示設備何時連接或斷開,并且僅在 PHY 用作主機時才有效(DpPulldown 和 DmPulldown 均設置為 1b)。當用作主機PHY時,未屏蔽的HostDisconnect中的更改會導致PHY生成中斷事件通知。

當用作設備(DpPulldown設置為0b)時,PHY決不能生成指示主機斷開連接事件的中斷事件通知。

1.6.6無SYNC和EOP產生(Opmode11b)可選

此模式會影響數據包的傳輸方式,并且只能用于高速。

當OpMode設置為11b時,PHY在發送包時不會自動添加SYNC和EOP。PHY必須仍然對數據進行NRZI編碼并執行比特填充。當LINK想要傳輸USB數據包時,它必須發送NOPID類型的TX CMD。在NOPID命令之后,LINK在ULPI總線上發送一個4字節的SYNC模式(00h,00h,0h,80h),然后是PID、數據有效載荷,最后是一個1字節的EOP(FEh),如圖所示。不支持UTMI+的TxBitstuffEnable信號。PHY在啟動數據包時自動啟用位填充,在拉高STP時禁用位填充。LINK在其驅動EOP字節的同一周期中拉高stp。如果在stp被拉高時數據被設置為00h,則PHY將不會在USB總線上傳輸任何EOP。PHY必須檢測PID字節是否為A5h(SOF數據包),并在stp被拉高時自動發送長EOP。為了傳輸chirp和恢復信號,LINK必須將OpMode設置為10b。

當OpMode設置為11b時發送PID類型的TX CMD將導致未定義的行為。當OpMode為11b時接收RX CMD和USB接收數據包的操作與OpMode 00b相同

image.png

1.7Vbus電源控制(內部和外部)

LINK通過設置OTG控制寄存器中的DrvVbus位來打開Vbus。如果Vbus電源在PHY外部,則LINK在OTG控制寄存器中設置DrvVbus和可選的DrvVbusExternal位。VBUS控制設置如下表:

圖片

1.8 OTG操作

1.8.1 會話請求協議(SRP)

ULPI提供完整的SRP支持。LINK使用OTG控制寄存器中的ChrgVbus和DischrgVbus位來開始和結束會話。

1.8.2 主機協商協議(HNP)(可選)

ULPI未定義HNP支持。假設HNP是在LINK硬件和/或軟件中實現的。這并不妨礙PHY實現者向任何ULPI PHY添加HNP支持,只要其不干擾或違反本規范中定義的ULPI協議即可。

1.8.3 VBUS比較器閾值

雖然OTG規范提供了單獨的A設備和B設備可用的比較器,但具有0.8V至2.0V閾值(VA_SESS_VLD)的A設備比較器也可用于需要0.8V至4.0V閾值(VB_SESS_VLD)的B設備比較器,從而消除了對單獨的B設備比較器的需要。具有單獨的A設備和B設備比較器的實現可以映射到單個定義(VSESS_VLD)中。ULPI Vbus比較器閾值如表所示。

VA_VBUS_VLD閾值的目的是允許A設備確定其是否能夠在VBUS上輸出有效電壓。因此,ULPI未指定VA_VBUS_VLD閾值的上限,然而,該閾值的上限通常取決于A設備電源的特性。因此如果A器件電源通過將VBUS驅動到VA_VBUS_REF的基準來操作,并且當其目標設備列表上的B設備沒有汲取太多電流時,輸出電壓不會下降到x%以下,則閾值電壓將是:

4.4V

圖片

如果VBUS電源在PHY外部并且外部電源提供指示VBUS何時有效的信號,

建議該信號是可選引腳ExternalVbusIndicator上PHY的輸入,并且該引腳的狀態通過RX CMD字節中的VA_VBUS_VLD≤VBUS指示反映到LINK。OTG控制寄存器中的可選UseExternalVbusIndicator位在內部和外部VbusValid指示器之間進行選擇

為了支持行業標準的USB電源控制設備,PHY可以可選地支持接口控制寄存器中的兩個附加位,IndicatorPassThru和IndicatorComplement。這兩個位允許可選的ExternalVbusIndicator引腳與來自功率控制設備的功率有效信號或過電流故障輸出互操作,并適應來自功率控制裝置的有效高信號或有效低信號。當ExternalVbusIndicator引腳上提供電源故障信號時,PHY必須使用內部VbusValid比較器的輸出和外部電源故障信號的邏輯組合來生成VA_VBUS_VLD≤VBUS指示。

下表定義了UseExternalVbusIndicator、IndicatorPassThru和IndicatorComplement寄存器位的使用,以控制ExternalVbusIndicator輸入引腳和內部VbusValid比較器輸出的使用,從而在RX CMD字節中生成VA_VBUS_VLD≤VBUS指示。表中還列出了每種設置的典型應用。

RX CMD Vbus有效過電流條件

標準外圍設備不應使用Vbus Valid來開始操作。內部VbusValid可能不表示Vbus在第五集線器層上有效,允許低至4.375V。因此設備應使用Session valid。

圖片

下圖提供了內部和外部VbusValid源的邏輯組合的圖形表示,以及控制寄存器位如何影響RX CMD字節中的VA_VBUS_VLD≤VBUS指示。UseExternalVbusIndicator、IndicatorPassThru 和 IndicatorComplement 控制寄存器位是單獨可選的。PHY可以實現可選控制位的任何組合,然而,如果實現控制位,則它們必須提供表中定義的功能。如果未實現任何控制位,則PHY有責任定義可選ExternalVbusIndicator引腳如何影響RX CMD字節中VA_VBUS_VLD≤VBUS指示的狀態

RX CMD VA_VBUS_VLD≤VBUS指示源

圖片

根據應用程序的不同,LINK應啟用或禁用適當的VBUS中斷。下表中給出了典型應用的示例設置,RXCMD中的VbusValid指示來自內部VbusValid比較器或外部Vbus指示輸入。

典型應用所需的RX CMD中的VBus指示器

圖片

1.9總結

同步模式是ULPI必須支持的且主要的模式,內容比較多,對于軟件開發人員來說重點關注下總線時序,即數據是如何交互的,這樣必要的的時候可以使用邏輯分析儀進行抓包分析。另外重點關注下各個狀態是如何反應在ULPI的寄存器中的,可能底層分析時需要通過寄存器值分析當前狀態。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • usb
    usb
    +關注

    關注

    60

    文章

    7936

    瀏覽量

    264474
  • PHY
    PHY
    +關注

    關注

    2

    文章

    301

    瀏覽量

    51732
  • USB驅動
    +關注

    關注

    1

    文章

    136

    瀏覽量

    20191
  • CMD5
    +關注

    關注

    0

    文章

    2

    瀏覽量

    7152
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    125
收藏 人收藏

    評論

    相關推薦

    基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2.0控制器簡介

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思
    的頭像 發表于 05-08 18:10 ?4584次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x</b>01開篇<b class='flag-5'>介紹</b>與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制器簡介

    基于DWC2USB驅動開發-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內核源碼驅動中就帶
    的頭像 發表于 05-09 10:09 ?9357次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x</b>02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征<b class='flag-5'>介紹</b>

    基于DWC2USB驅動開發-0x08 GLPI接口詳解

    本文詳細介紹介紹GLPI接口
    的頭像 發表于 06-02 09:05 ?1328次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x</b>08 GLPI<b class='flag-5'>接口</b>詳解

    基于DWC2USB驅動開發-0x08 ULPI接口協議概覽

    本篇概述了ULPI相關的內容,內容比較多后面還有工作模式和寄存器相關內容會分開講。
    的頭像 發表于 06-02 13:08 ?8423次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x</b>08 <b class='flag-5'>ULPI</b><b class='flag-5'>接口</b>協議概覽

    基于DWC2USB驅動開發-0x09 ULPI接口協議其他工作模式介紹

    本篇講解了低功耗,全速/低速串行模式,Carkit模式,以及PHY輸入信號的保護處理。其中低功耗模式是必須的,其他的是可選實現的。
    的頭像 發表于 06-02 15:30 ?2951次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x</b>09 <b class='flag-5'>ULPI</b><b class='flag-5'>接口</b>協議其他工作<b class='flag-5'>模式</b><b class='flag-5'>介紹</b>

    基于DWC2USB驅動開發-0x0B ULPI接口寄存器介紹

    以上詳細介紹了PHY相關的寄存器內容,標準部分是所有PHY都需要按照該規范實現的,還有廠商自定義部分可以自定義。正是因為規范對寄存器功能進行了規范所以LINK部分的IP才能做到兼容通用。
    的頭像 發表于 06-05 15:36 ?4274次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x0</b>B <b class='flag-5'>ULPI</b><b class='flag-5'>接口</b>寄存器<b class='flag-5'>介紹</b>

    基于DWC2USB驅動開發-0x0D PHY寄存器讀寫代碼編寫與測試

    我們前面重點介紹ULPI接口和PHY的寄存器,這一篇來進行PHY寄存器讀寫的代碼編寫與測試。從這一篇開始就正真進入了驅動編寫的過程了。
    的頭像 發表于 06-06 13:03 ?2257次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x0</b>D PHY寄存器讀寫代碼編寫與測試

    基于DWC2USB驅動開發-0x0E 使用邏輯分析儀分析ULPI數據

    工欲善其事必先利其器,所以在USB開發中工具很重要,示波器,邏輯分析儀,USB協議分析儀等都不可少。在底層問題分析時缺少有力工具時很難進一步分析,本文分享了ULPI抓包分析,實際抓包波
    的頭像 發表于 06-07 16:56 ?1643次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>0x0</b>E 使用邏輯分析儀分析<b class='flag-5'>ULPI</b>數據

    基于DWC2USB驅動開發-IAD描述符詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設備功能關聯多個接口
    的頭像 發表于 06-27 08:45 ?12.5w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-IAD描述符詳解

    基于DWC2USB驅動開發-USB復位詳解

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-USB復位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們詳細
    的頭像 發表于 07-07 11:18 ?6.4w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>復位詳解

    基于DWC2USB驅動開發-USB連接詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊,規格書,練習招式
    的頭像 發表于 07-07 08:46 ?3690次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>連接詳解

    基于DWC2USB驅動開發-設備類驅動框架

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-設備類驅動框架 (qq.com) 一.前言 從軟件頂層,從數據流的角度來看
    的頭像 發表于 07-16 15:56 ?1307次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-設備類<b class='flag-5'>驅動</b>框架

    基于DWC2USB驅動開發-發送相關的寄存器DMA寄存器詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-發送相關的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,對應IN端點,和發送數據相關,這一篇先
    的頭像 發表于 07-16 16:42 ?1641次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-發送相關的寄存器DMA寄存器詳解

    基于DWC2USB驅動開發-數據不能發送問題分析案例

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-數據不能發送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅動
    的頭像 發表于 08-08 09:43 ?2269次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據不能發送問題分析案例

    如何對基于hal庫的DWC2 USB IP進行調試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構,果不其然,usb bug 一堆,隨意舉例,這還
    發表于 06-14 15:23
    主站蜘蛛池模板: 挺进老师的紧窄小肉六电影完整版 | 涩涩游戏盒| 亚洲精品国产熟女久久久| 最新影音先锋av资源台| 东北老妇人70OLDMAN| 精品国产影院| 青青国产在线观看视频| 亚洲AV无码久久流水呻蜜桃久色 | 久久成人永久免费播放| 青青久在线| 亚洲一级特黄| 不卡人妻无码AV中文系列APP| 国模沟沟一区二区三区| 欧美日韩中文在线字幕视频| 亚洲国产综合久久精品| gayxxxxgay呻吟受日本| 黄色三级在线| 肉肉描写很细致的黄文| 诱咪视频免费| 国产精品欧美亚洲| 欧美xxxx印度| 亚洲中文字幕日产乱码2020| 调教玩弄奶头乳夹开乳震动器| 久久精品亚洲牛牛影视| 天天国产在线精品亚洲| 99久久精品国产自免费| 黄片a级毛片| 视频区 国产 欧美 日韩| 99精品国产在热久久| 果冻传媒APP免费网站在线观看| 人与畜禽CROPROATION免费| 一边捏奶头一边啪高潮会怎么样 | 性XXXXX搡XXXXX搡景甜| 爱爱好爽好大好紧视频| 久久青草免费线观最新| 亚洲国产精品特色大片观看| 被室友C哭调教双性| 曼谷av女郎| 亚洲一区自拍高清亚洲精品| 国产精品亚洲二线在线播放 | 北条麻妃夫の友人196|