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

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

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

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

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

1.1 前言

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

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é)來啟動(dòng)到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 主機(jī)斷開連接狀態(tài)必須僅在主機(jī)模式下指示給LINK(DpPulldown和DmPullddown均設(shè)置為1b。

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

1.2.3 發(fā)送RX CMD的時(shí)機(jī)

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

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

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

對(duì)于高速,EOP就是LineState 的!squelch到squelch 。

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

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

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

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

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

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

圖片

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

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

當(dāng)發(fā)送到LINK時(shí),排隊(duì)的RX CMD必須始終傳達(dá)當(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)識(shí)符(PID)的USB數(shù)據(jù),LINK發(fā)送NOPID類型的TX CMD字節(jié)。

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

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

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

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

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

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

image.png

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

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

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

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

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

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

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

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

所有USB數(shù)據(jù)包傳輸期間的RX CMD更改,必須用在USB傳輸結(jié)束時(shí),ULPI總線可用時(shí),發(fā)送的單個(gè)RX CMD更新來替換。即USB數(shù)據(jù)傳輸過程中狀態(tài)的變化不需要管了,最后發(fā)一個(gè)最終的狀態(tài)RX_CMD給LINK即可。RX CMD更新必須始終傳達(dá)當(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ā)送錯(cuò)誤

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

image.png

1.3.4 USB包接收

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

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

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

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

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

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

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

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

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

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

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

image.png

1.3.5 USB接收錯(cuò)誤

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

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

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

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

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

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

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

image.png

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

image.png

1.3.6 USB包時(shí)序

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

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

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

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

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

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

一個(gè)時(shí)鐘周期有8個(gè)HS位時(shí)間,一個(gè)FS位時(shí)間有5個(gè)時(shí)鐘周期,一個(gè)LS位時(shí)間有40個(gè)時(shí)鐘周期。如圖所示

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

image.png

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

image.png

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

2.PHY****管道延遲

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

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

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

image.png

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

3.LINK決策時(shí)間

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

image.png

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

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

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

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

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

image.png

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

image.png

1.4寄存器操作

1.4.1 立即寄存器讀寫

寄存器寫

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

image.png

寄存器讀

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

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

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

image.png

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

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

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

image.png

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

image.png

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

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

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

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

image.png

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

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

image.png

如下圖所示,如果dir在寄存器寫入操作結(jié)束時(shí)拉高stp的同一時(shí)鐘周期拉高,則PHY認(rèn)為寄存器寫入已成功完成。PHY不會(huì)因?yàn)閟tp而拉低dir。

image.png

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

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

image.png

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

1.4.4 擴(kuò)展寄存器讀寫

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

寄存器寫

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

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

image.png

寄存器讀

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

image.png

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

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

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

image.png

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

1.5中止ULPI傳輸

1.5.1 LINK中止PHY

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

1.5.2 PHY中止LINK

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

在下一個(gè)周期中,PHY必須拉低dir,并保持拉低dir直到Link事務(wù)完成。如果LINK如圖所示執(zhí)行寄存器寫入或USB傳輸,則PHY必須等待序列末尾的stp脈沖,然后才能重新拉高dir。如果LINK執(zhí)行寄存器讀取,PHY必須返回寄存器讀取數(shù)據(jù),如圖所示,并且如果需要進(jìn)行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中止時(shí),LINK必須在周轉(zhuǎn)turn around周期后立即驅(qū)動(dòng)TX CMD。如果LINK沒有立即驅(qū)動(dòng)TX CMD,則允許PHY重新拉高dir,如圖所示。

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

image.png

1.6 USB操作

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

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

1.6.1 高速檢測握手(Chirp)

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

必須遵循以下事件順序

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

2.主機(jī)驅(qū)動(dòng)-如果主機(jī)檢測到全速外圍設(shè)備,它會(huì)通過寫入功能控制寄存器并設(shè)置XcvrSelect=00b(HS)和TermSelect=0b來重置外圍設(shè)備,從而驅(qū)動(dòng)總線上的SE0(D+和D-通過45歐接地).主機(jī)還設(shè)置OpMode=10b用于正確的Chirp發(fā)射和接收,接收Chirp會(huì)使LineState以不同的方式進(jìn)行編碼,并考慮高速差分接收器輸出,以免出現(xiàn)錯(cuò)誤的總線活動(dòng)。SE0的起點(diǎn)標(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ā)送一個(gè)TX CMD(NOPID),發(fā)送一個(gè)chirp K不少于1ms。并且chirp K必須在復(fù)位時(shí)間T0之后不超過7ms結(jié)束。如果設(shè)備處于低功率模式,它必須在5.6ms內(nèi)喚醒其時(shí)鐘,留下200us用于LINK開始傳輸chirp K信號(hào),留下1.2ms用于chirp信號(hào)完成(最壞情況下,時(shí)鐘慢10%)

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

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

image.png

1.6.2 前導(dǎo)

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

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

image.png

1.6.3 Usb掛起和恢復(fù)

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

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

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

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

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

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

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

image.png

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

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

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

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

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

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

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

image.png

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

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

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

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

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

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

圖片

1.6.4 遠(yuǎn)程喚醒

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

1. 低速遠(yuǎn)程喚醒

圖片

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

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

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

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

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

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

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

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

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

2. 全速遠(yuǎn)程喚醒

image.png

A)主機(jī)和設(shè)備都以低功耗模式啟動(dòng)

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

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

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

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

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

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

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

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

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

image.png

A)主機(jī)和設(shè)備都以低功耗模式啟動(dòng)

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

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

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

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

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

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

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

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

4. 自動(dòng)恢復(fù)

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

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

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

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

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

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

圖片

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

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

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

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

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

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

當(dāng)OpMode設(shè)置為11b時(shí)發(fā)送PID類型的TX CMD將導(dǎo)致未定義的行為。當(dāng)OpMode為11b時(shí)接收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 會(huì)話請(qǐng)求協(xié)議(SRP)

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

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

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

1.8.3 VBUS比較器閾值

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

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

4.4V

圖片

如果VBUS電源在PHY外部并且外部電源提供指示VBUS何時(shí)有效的信號(hào),

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

為了支持行業(yè)標(biāo)準(zhǔn)的USB電源控制設(shè)備,PHY可以可選地支持接口控制寄存器中的兩個(gè)附加位,IndicatorPassThru和IndicatorComplement。這兩個(gè)位允許可選的ExternalVbusIndicator引腳與來自功率控制設(shè)備的功率有效信號(hào)或過電流故障輸出互操作,并適應(yīng)來自功率控制裝置的有效高信號(hào)或有效低信號(hào)。當(dāng)ExternalVbusIndicator引腳上提供電源故障信號(hào)時(shí),PHY必須使用內(nèi)部VbusValid比較器的輸出和外部電源故障信號(hào)的邏輯組合來生成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)準(zhǔn)外圍設(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 控制寄存器位是單獨(dú)可選的。PHY可以實(shí)現(xiàn)可選控制位的任何組合,然而,如果實(shí)現(xiàn)控制位,則它們必須提供表中定義的功能。如果未實(shí)現(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)容比較多,對(duì)于軟件開發(fā)人員來說重點(diǎn)關(guān)注下總線時(shí)序,即數(shù)據(jù)是如何交互的,這樣必要的的時(shí)候可以使用邏輯分析儀進(jìn)行抓包分析。另外重點(diǎn)關(guān)注下各個(gè)狀態(tài)是如何反應(yīng)在ULPI的寄存器中的,可能底層分析時(shí)需要通過寄存器值分析當(dāng)前狀態(tài)。

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

    關(guān)注

    31

    文章

    5253

    瀏覽量

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

    關(guān)注

    60

    文章

    7773

    瀏覽量

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

    關(guān)注

    2

    文章

    296

    瀏覽量

    51555
  • USB驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    1

    文章

    136

    瀏覽量

    20117
  • CMD5
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    7141
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    110
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    本篇講解了低功耗,全速/低速串行模式,Carkit模式,以及PHY輸入信號(hào)的保護(hù)處理。其中低功耗模式是必須的,其他的是可選實(shí)現(xiàn)的。
    的頭像 發(fā)表于 06-02 15:30 ?2616次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</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ū)動(dòng)開發(fā)-0x0B ULPI接口寄存器介紹

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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