0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

基于DWC2的USB驅(qū)動開發(fā)-0x0A ULPI接口同步模式介紹

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

1.1 前言

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

1.2 ULPI命令字節(jié)

ULPI修改原始的UTMI數(shù)據(jù)流,使其能夠適應(yīng)更多的數(shù)據(jù)類型。

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

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

ULPI定義了由LINK發(fā)送的發(fā)送命令字節(jié)Transmit Command 和由PHY發(fā)送的接收命令字節(jié) **Receive Command ** 。

以上的發(fā)送接收是以LINK的角度來看的。

1.2.1 發(fā)送命令字節(jié)(TX CMD)

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

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

圖片

1.2.2 接收命令字節(jié)(RX CMD)

PHY發(fā)送下表的接收命令字節(jié),以更新線路狀態(tài)、USB接收、斷開連接和OTG狀態(tài)信息給LINK。

圖片

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

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

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

1.2.3 發(fā)送RX CMD的時機

RX CMD僅在同步模式下發(fā)送,并將兩種類型的信息傳輸?shù)絃INK。第一個是USB接收信息。第二個是中斷事件。所有信息被編碼到單個RX CMD字節(jié)中。

USB接收信息包括線路狀態(tài)LineState、RxActive和RxError。

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

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

對于全速和低速,EOP是LineState從SE0到J的轉(zhuǎn)換。

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

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

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

配置了,就會向LINK發(fā)送RX CMD。

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

圖片

RX CMD的優(yōu)先級低于USB接收和傳輸數(shù)據(jù),但優(yōu)先級高于寄存器讀取和寫入命令。

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

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

當(dāng)在USB接收數(shù)據(jù)包期間nxt被拉低,PHY也必須向LINK發(fā)送RX CMD。

1.3 USB包

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

1.3.1 NOPID數(shù)據(jù)包

如圖所示,為了發(fā)送不包含數(shù)據(jù)包標(biāo)識符(PID)的USB數(shù)據(jù),LINK發(fā)送NOPID類型的TX CMD字節(jié)。

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

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

當(dāng)最后一個字節(jié)已經(jīng)被PHY接收時,LINK拉高stp1個周期,并且如果沒有發(fā)生傳輸錯誤,則將數(shù)據(jù)驅(qū)動到00h空閑狀態(tài)。在第一個字節(jié)被PHY接收之前,鏈路不得拉高stp。

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

當(dāng)LINK用NOPID數(shù)據(jù)包驅(qū)動ULPI總線時,PHY不應(yīng)拉高dir,除非它想中止數(shù)據(jù)包。

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

image.png

1.3.2 PID數(shù)據(jù)包

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

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

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

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

在拉高stp之后,LINK不能發(fā)送另一個數(shù)據(jù)包,直到第一個數(shù)據(jù)包在USB上完成。

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

當(dāng)LINK用PID數(shù)據(jù)包驅(qū)動ULPI總線時,PHY不應(yīng)拉高dir,除非它想中止數(shù)據(jù)包。

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

UTMI+規(guī)格書所述,PHY必須在傳輸期間內(nèi)部阻塞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發(fā)送錯誤

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

image.png

1.3.4 USB包接收

如圖所示,當(dāng)PHY接收到USB數(shù)據(jù)時,它首先通過拉高dir獲得數(shù)據(jù)總線的所有權(quán)。

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

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

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

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

PHY拉高nxt并在總線上發(fā)送一個字節(jié),將有效的USB數(shù)據(jù)包數(shù)據(jù)發(fā)送給LINK。

當(dāng)nxt為低電平時,PHY驅(qū)動RX CMD字節(jié)。

USB包接收過程中的狀態(tài)變化即RX CMD變化,必須在nxt為低時,發(fā)出。

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

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

當(dāng)RX CMD字節(jié)顯示RxActive被設(shè)置為0b或dir被拉低(以先發(fā)生者為準)時,LINK認為數(shù)據(jù)包已完成。

image.png

1.3.5 USB接收錯誤

如果PHY檢測到USB數(shù)據(jù)包接收錯誤,它將忽略任何當(dāng)前接收的數(shù)據(jù)字節(jié),拉低nxt,并在RxEvent字段設(shè)置為11b的情況下驅(qū)動RX CMD字節(jié)(RxError狀態(tài))。

當(dāng)RxActive被設(shè)置為0時,PHY拉低dir。RxError狀態(tài)與UTMI的RxError信號相同。

當(dāng)檢測到全速位填充錯誤時,所有PHY實現(xiàn)都必須設(shè)置RxError。

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

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

LINK必須忽略出現(xiàn)接收錯誤的數(shù)據(jù)包。

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

image.png

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

image.png

1.3.6 USB包時序

USB規(guī)范定義了數(shù)據(jù)包間時間。ULPI規(guī)范通過指定PHY和LINK可用的時鐘周期的預(yù)算,將這些定時關(guān)聯(lián)回ULPI接口。

PHY必須在給定的定時范圍內(nèi)處理數(shù)據(jù)。

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

1. USB數(shù)據(jù)包間延遲和數(shù)據(jù)包超時

全速數(shù)據(jù)包間延遲是從第一個數(shù)據(jù)包的SE0到J轉(zhuǎn)換到第二個數(shù)據(jù)包上的SYNC域開始測量的。

高速包間延遲是從總線在第一包結(jié)束時進入空閑狀態(tài)開始測量的,直到總線在第二個數(shù)據(jù)包開始時離開空閑狀態(tài)時計算。

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

USB規(guī)格指定的包間時間

image.png

位寬和時鐘關(guān)系

image.png

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

2.PHY****管道延遲

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

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

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

image.png

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

3.LINK決策時間

下表給出了為各種包序列分配給ULPI LINK的時間。當(dāng)LINK傳輸?shù)诙€數(shù)據(jù)包時,它必須滿足數(shù)據(jù)包間的延遲。當(dāng)LINK期望對傳輸?shù)臄?shù)據(jù)包做出響應(yīng)時,它必須對數(shù)據(jù)包間延遲進行計時,以檢測超時。對于連續(xù)接收數(shù)據(jù)包,LINK必須能夠在給定的時間內(nèi)接收它們。

image.png

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

Transmit-Receive,UTMI規(guī)范說明高速傳輸?shù)浇邮諘r間不正確,應(yīng)忽略。

4.內(nèi)部包時序圖

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

高速發(fā)送-發(fā)送包時序

image.png

高速接收-發(fā)送包時序

image.png

1.4寄存器操作

1.4.1 立即寄存器讀寫

寄存器寫

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

image.png

寄存器讀

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

當(dāng)在寄存器讀取操作期間,即使是在寄存器內(nèi)容返回的時鐘周期拉高dir,PHY也不拉高nxt。

這允許USB數(shù)據(jù)接收在任何時鐘周期內(nèi)始終優(yōu)先于寄存器讀取。如果PHY早于下圖中所示時刻拉高dir中止RegRead,則當(dāng)總線空閑時,LINK必須重試RegRead

image.png

1.4.2 USB數(shù)據(jù)接收中止立即寄存器讀寫

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

下顯示了在初始發(fā)送命令字節(jié)期間被USB接收中止的寄存器讀取或?qū)懭搿?/p>

image.png

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

image.png

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

寄存器讀取和寫入操作也會因PHY發(fā)送RX CMD而中止,除非是在寄存器讀取數(shù)據(jù)返回到LINK的時鐘周期內(nèi)。

1.4.3 連續(xù)的寄存器讀寫和USB數(shù)據(jù)接收

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

image.png

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

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

image.png

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

image.png

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

注意,當(dāng)dir在一個周期周期內(nèi)拉低時,總線周轉(zhuǎn)turn around的兩個周期。

image.png

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

1.4.4 擴展寄存器讀寫

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

寄存器寫

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

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

image.png

寄存器讀

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

image.png

1.4.5 擴展寄存器讀寫被連續(xù)的USB數(shù)據(jù)接收中止

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

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

image.png

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

1.5中止ULPI傳輸

1.5.1 LINK中止PHY

當(dāng)LINK在ULPI總線上傳輸數(shù)據(jù)時,PHY可以通過拉高dir來中止LINK。ULPI沒有指定任何會導(dǎo)致這種情況發(fā)生的條件。

1.5.2 PHY中止LINK

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

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

image.png

image.png

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

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

當(dāng)PHY中止時,LINK必須在周轉(zhuǎn)turn around周期后立即驅(qū)動TX CMD。如果LINK沒有立即驅(qū)動TX CMD,則允許PHY重新拉高dir,如圖所示。

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

image.png

1.6 USB操作

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

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

1.6.1 高速檢測握手(Chirp)

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

必須遵循以下事件順序

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

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

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

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

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

image.png

1.6.2 前導(dǎo)

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

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

image.png

1.6.3 Usb掛起和恢復(fù)

掛起和恢復(fù)由HOST或者HUB啟動

1. 低速掛起和恢復(fù)

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

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

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

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

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

image.png

2. 全速掛起和恢復(fù)

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

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

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

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

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

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

image.png

3. 高速掛起和恢復(fù)

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

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

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

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

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

圖片

1.6.4 遠程喚醒

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

1. 低速遠程喚醒

圖片

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

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

C) 設(shè)備開始驅(qū)動總線上的K以發(fā)出恢復(fù)信號。設(shè)備的LINK在傳輸時應(yīng)假設(shè)線路狀態(tài)為K(01b)

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

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

F) 設(shè)備停止驅(qū)動恢復(fù)

G) 設(shè)備看到主機繼續(xù)驅(qū)動恢復(fù)。

H) 主機停止驅(qū)動恢復(fù),PHY將LS EOP添加到低速恢復(fù)的末尾。設(shè)備將LS EOP識別為恢復(fù)的結(jié)束。T1為LS EOP間隔。

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

2. 全速遠程喚醒

image.png

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

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

C)設(shè)備開始驅(qū)動總線上的K以發(fā)出恢復(fù)信號。設(shè)備的LINK在發(fā)送時應(yīng)假定線路狀態(tài)為K(10b)。

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

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

F)設(shè)備停止驅(qū)動恢復(fù)

G)設(shè)備看到主機繼續(xù)驅(qū)動恢復(fù)

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

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

3. 高速遠程恢復(fù)

image.png

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

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

C)設(shè)備開始驅(qū)動總線上的K以發(fā)出恢復(fù)信號。設(shè)備的LINK在發(fā)送時應(yīng)假定線路狀態(tài)為K(10b)。

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

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

F)設(shè)備停止驅(qū)動恢復(fù)。

G)設(shè)備看到主機繼續(xù)驅(qū)動恢復(fù)

H)主機停止驅(qū)動恢復(fù),總線返回高速空閑狀態(tài)。設(shè)備將高速空閑識別為恢復(fù)結(jié)束。(T1是LS EOP間隔。

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

4. 自動恢復(fù)

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

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

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

實現(xiàn)由PHY供應(yīng)商確定,但是PHY供應(yīng)商必須指定時鐘喚醒時間TSTART_HOST。

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

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

圖片

1.6.5 設(shè)備連接和斷開連接檢測

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

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

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

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

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

當(dāng)OpMode設(shè)置為11b時發(fā)送PID類型的TX CMD將導(dǎo)致未定義的行為。當(dāng)OpMode為11b時接收RX CMD和USB接收數(shù)據(jù)包的操作與OpMode 00b相同

image.png

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

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

圖片

1.8 OTG操作

1.8.1 會話請求協(xié)議(SRP)

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

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

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

1.8.3 VBUS比較器閾值

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

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

4.4V

圖片

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

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

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

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

RX CMD Vbus有效過電流條件

標(biāo)準外圍設(shè)備不應(yīng)使用Vbus Valid來開始操作。內(nèi)部VbusValid可能不表示Vbus在第五集線器層上有效,允許低至4.375V。因此設(shè)備應(yīng)使用Session valid。

圖片

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

RX CMD VA_VBUS_VLD≤VBUS指示源

圖片

根據(jù)應(yīng)用程序的不同,LINK應(yīng)啟用或禁用適當(dāng)?shù)腣BUS中斷。下表中給出了典型應(yīng)用的示例設(shè)置,RXCMD中的VbusValid指示來自內(nèi)部VbusValid比較器或外部Vbus指示輸入。

典型應(yīng)用所需的RX CMD中的VBus指示器

圖片

1.9總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5273

    瀏覽量

    119657
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7851

    瀏覽量

    263336
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    299

    瀏覽量

    51621
  • USB驅(qū)動
    +關(guān)注

    關(guān)注

    1

    文章

    136

    瀏覽量

    20144
  • CMD5
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    7146
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    117
收藏 人收藏

    評論

    相關(guān)推薦

    基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思DWC2 USB2.0控制器簡介

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思
    的頭像 發(fā)表于 05-08 18:10 ?4381次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</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驅(qū)動開發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內(nèi)核源碼驅(qū)動中就帶
    的頭像 發(fā)表于 05-09 10:09 ?8775次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</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驅(qū)動開發(fā)-0x08 GLPI接口詳解

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

    基于DWC2USB驅(qū)動開發(fā)-0x08 ULPI接口協(xié)議概覽

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

    基于DWC2USB驅(qū)動開發(fā)-0x09 ULPI接口協(xié)議其他工作模式介紹

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

    基于DWC2USB驅(qū)動開發(fā)-0x0B ULPI接口寄存器介紹

    以上詳細介紹了PHY相關(guān)的寄存器內(nèi)容,標(biāo)準部分是所有PHY都需要按照該規(guī)范實現(xiàn)的,還有廠商自定義部分可以自定義。正是因為規(guī)范對寄存器功能進行了規(guī)范所以LINK部分的IP才能做到兼容通用。
    的頭像 發(fā)表于 06-05 15:36 ?3863次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</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驅(qū)動開發(fā)-0x0D PHY寄存器讀寫代碼編寫與測試

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

    基于DWC2USB驅(qū)動開發(fā)-0x0E 使用邏輯分析儀分析ULPI數(shù)據(jù)

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

    基于DWC2USB驅(qū)動開發(fā)-IAD描述符詳解

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

    基于DWC2USB驅(qū)動開發(fā)-USB復(fù)位詳解

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

    基于DWC2USB驅(qū)動開發(fā)-USB連接詳解

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

    基于DWC2USB驅(qū)動開發(fā)-設(shè)備類驅(qū)動框架

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

    基于DWC2USB驅(qū)動開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解

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

    基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例

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

    如何對基于hal庫的DWC2 USB IP進行調(diào)試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當(dāng)時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構(gòu),果不其然,usb bug 一堆,隨意舉例,這還
    發(fā)表于 06-14 15:23