基于DWC2的USB驅(qū)動開發(fā)-0x0B ULPI接口寄存器介紹 (qq.com)
一. ULPI(寄存器介紹)
1.1 前言
前面同步模式中我們介紹了寄存器的讀寫, 對于軟件的角度來說無非就是通過LINK的ULPI接口讀寫PHY的寄存器來設(shè)置和獲取狀態(tài),同時通過ULPI接口來進行USB數(shù)據(jù)的收發(fā)。
只是這個過程主要由硬件LINK完成,軟件只需要進行一些中斷的處理簡單的設(shè)置即可。當(dāng)然在某些必要的時候我們也需要通過軟件直接讀寫PHY的寄存器以進行操作和獲取狀態(tài),這主要是在某些底層問題調(diào)試或者性能分析時需要用到。DWC2提供了直接訪問PHY寄存器的寄存器接口,這個后面再講。
1.2 寄存器讀寫回顧
在同步模式介紹中詳細介紹了寄存器的讀寫操作,這里重新回顧下對應(yīng)的時序圖。
立即寄存器寫
立即寄存器讀
立即寄存器讀寫在TX CMD時被USB接收中斷
立即寄存器讀寫在turn around時被USB接收中斷
USB接收和寄存器讀的Data時鐘在同一個時鐘,USB接收延遲
寄存器讀后緊接著USB接收
寄存器寫stp拉高時緊接著USB接收
寄存器讀緊接著USB接收
擴展寄存器寫
擴展寄存器讀
擴展寄存器讀在擴展地址對應(yīng)的時鐘被USB接收中斷
1.3 寄存器表
如表所示,ULPI提供了一個立即寄存器集,該寄存器集具有6位地址,該地址構(gòu)成傳輸命令字節(jié)Transmit Command Byte的一部分。擴展寄存器還提供需要額外時鐘周期才能完成的8位地址。立即數(shù)寄存器集被映射到擴展地址的低位。也就是說,讀取或?qū)懭霐U展地址“00XXXXXX”實際上將對立即寄存器集進行操作。PHY必須支持立即和擴展寄存器操作。
擴展寄存器訪問需要多一個CLK來發(fā)送寄存器地址,因為地址大小為8位,不能直接編碼在命令字節(jié)中了,所以要單獨發(fā)送。實際上立即寄存器也可以使用擴展寄存器的方式操作,即寄存器地址的高2位為0,所以采用擴展寄存器方式是統(tǒng)一編碼所有寄存器的,操作高2位為0的擴展寄存器和立即寄存器操作是一樣的。那為什么不統(tǒng)一為擴展寄存器操作一種方式呢,
因為USB關(guān)注數(shù)據(jù)傳輸帶寬,所以要減少其他控制操作:寄存器讀寫占用的ULPI接口帶寬,
所以把關(guān)鍵的寄存器直接編碼在命令字中,減少一個CLK的時間,減少寄存器讀寫占用的帶寬,提高數(shù)據(jù)傳輸?shù)膸挕?/p>
下表的寄存器訪問圖例適用
支持位操作,在只需要置位或者清除某些位時比"讀-修改-寫"更高效,
因為ULPI接口即要進行USB數(shù)據(jù)傳輸又要進行寄存器讀寫控制,數(shù)據(jù)傳輸才是重點,要保證高數(shù)據(jù)傳輸帶寬所以要盡量減少寄存器讀寫占用的帶寬,所以增加set clr兩種寄存器操作模式,而不是只有rd和wr,不同的操作通過寄存器地址區(qū)分。
1.4立即寄存器
1.4.1 VID和PID
地址:00h-03h只讀。
1.4.2 功能控制Function Control
控制PHY的UTMI功能設(shè)置,是最頻繁使用的寄存器。
地址:04h-06h(讀取)、04h(寫入)、05h(設(shè)置)、06h(清除)。
1.4.3 接口控制Interface Control
啟用替代接口和物理層功能。此寄存器中的所有位都是PHY的可選功能
地址:07h-09h(讀取)、07h(寫入)、08h(設(shè)置)、09h(清除)。
15:適用于切換到串行或Carkit模式的LINK實現(xiàn),并且不需要來自PHY的時鐘源。
1.4.4 OTG控制 OTG Control
控制PHY的UTMI+OTG功能。
地址:0Ah-0Ch(讀取)、0Ah(寫入)、0Bh(設(shè)置)、0Ch(清除)。
16:如果采用Carkit模式寄存器,上拉電阻器和檢測電路應(yīng)符合[CEA-936A]
1.4.5 USB中斷上升沿使能
地址:0Dh-0Fh(讀取),0Dh(寫入),0Eh(設(shè)置),0Fh。
如果設(shè)置,則當(dāng)相應(yīng)的PHY信號從低變高時,該寄存器中的位導(dǎo)致生成中斷事件通知。默認情況下,所有轉(zhuǎn)換都處于啟用狀態(tài)。RxActive和RxError必須始終立即通信,因此不包括在此寄存器中。當(dāng)上升沿和下降沿使能都被禁用時,中斷電路可以在任何模式下斷電。
為了確保時鐘斷電時能夠檢測到中斷,LINK應(yīng)同時啟用上升沿和下降沿。
1.4.6 USB中斷下降沿使能
地址:10h-12h(讀取)、10h(寫入)、11h(設(shè)置)、12h(清除)
如果設(shè)置,則當(dāng)相應(yīng)的PHY信號從高變?yōu)榈蜁r,該寄存器中的位導(dǎo)致生成中斷事件通知。默認情況下,所有轉(zhuǎn)換都處于啟用狀態(tài)。RxActive和RxError必須始終立即通信,因此不包括在此寄存器中。當(dāng)上升沿和下降沿使能都被禁用時,中斷電路可以在任何模式下斷電。為了確保時鐘斷電時能夠檢測到中斷,LINK應(yīng)同時啟用上升沿和下降沿。
1.4.7 USB中斷狀態(tài)
地址:13h(只讀)。
指示中斷源信號的當(dāng)前值。當(dāng)上升沿和下降沿使能都被禁用時,中斷電路可以在任何模式下斷電。為了確保時鐘斷電時能夠檢測到中斷,LINK應(yīng)同時啟用上升沿和下降沿。
1.4.8 USB中斷鎖存
地址:14小時(只讀,自動清除)。
當(dāng)在對應(yīng)的內(nèi)部信號上發(fā)生未屏蔽的改變時,這些比特由PHY設(shè)置。當(dāng)LINK讀取此寄存器時,或當(dāng)進入低功率模式時,PHY將自動清除所有位。無論ClockSuspendM的值如何,當(dāng)進入串行模式或Carkit套件模式時,PHY也會清除此寄存器。當(dāng)上升沿和下降沿使能都被禁用時,中斷電路可以在任何模式下斷電。為了確保時鐘斷電時能夠檢測到中斷,LINK應(yīng)同時啟用上升沿和下降沿。
PHY必須遵循下表中的規(guī)則來設(shè)置任何鎖存寄存器位。需要注意的是,如果寄存器讀取數(shù)據(jù)在設(shè)置USB中斷鎖存位的同一周期內(nèi)返回到LINK,則中斷條件會立即在寄存器讀取數(shù)據(jù)中給出,而鎖存位不會設(shè)置。
注意,LINK在同步模式下讀取USB中斷鎖存寄存器是可選的,因為RX CMD字節(jié)已經(jīng)直接指示中斷源。
1.4.9 調(diào)試寄存器
地址:15h(只讀)
指示對調(diào)試有用的各種信號的當(dāng)前值。
1.4.10 自定義使用寄存器Scratch寄存器
地址:16h-18h(讀取)、16h(寫入)、17h(設(shè)置)、18h(清除)。
用戶可自定義寫入任何值,可作為測試使用
1.4.11 Carkit控制寄存器
地址:19h-1Bh(讀取)、19h(寫入)、1Ah(設(shè)置)、1Bh(清除)。
此寄存器是可選的控制PHY內(nèi)Carkit電路的操作。如果未設(shè)置接口控制寄存器中的CarkitMode位,則忽略TxdEn和RxdEn位。如果CarkitMode位被設(shè)置,而RxdEn位未被設(shè)置,則數(shù)據(jù)(1)引腳保持在邏輯高。
1.4.12 Carkit中斷延遲
地址:1Ch(讀取),1Ch(寫入)。
此寄存器是可選的當(dāng)Carkit中斷電話時,它會在很長一段時間內(nèi)將D+拉低。如果D+在TPH_DP_INT時間內(nèi)低于VPH_DP_LO電壓閾值,則電話必須檢測到中斷。
只要設(shè)置了Carkit中斷啟用寄存器中的CarIntDet位,PHY中的Carkit中斷定時器就會啟用。如果啟用,當(dāng)D+電壓低于VPH_DP_LO時,Carkit中斷定時器會遞增。如果D+電壓高于VPH_DP_LO,則車載套件中斷定時器復(fù)位。當(dāng)D+高于VPH_DP_LO的時間短至TCR_INJ_WDTH時,Carkit中斷定時器必須復(fù)位。
當(dāng)Carkit中斷定時器達到存儲在CarIntDly中的值時,設(shè)置Carkit中斷鎖存寄存器中的CarIntDet位,并生成中斷。
1.4.13 Carkit中斷使能
地址:1Dh-1Fh(讀取)、1Dh(寫入)、1Eh(設(shè)置)、1Fh(清除)。
此寄存器是可選的如果設(shè)置,則當(dāng)相應(yīng)的PHY信號發(fā)生變化時,該寄存器中的位會導(dǎo)致生成中斷事件通知。默認情況下,此寄存器中的所有位都被清除。
1.4.14 Carkit狀態(tài)寄存器
地址:20h(只讀)。
此寄存器是可選的當(dāng)carkit中斷事件通知發(fā)生時,LINK可以讀取此寄存器,以確定是哪個事件觸發(fā)了中斷。
1.4.15 Carkit中斷鎖存
地址:21h(只讀,自動清除)
此寄存器是可選的上一頁當(dāng)LINK讀取此寄存器時,或當(dāng)進入低功率模式時,PHY將自動清除所有位。
PHY必須遵循下表中的規(guī)則來設(shè)置任何鎖存寄存器位。需要注意的是,如果寄存器讀取數(shù)據(jù)在與設(shè)置Carkit中斷鎖存位相同的周期內(nèi)返回到LINK,則中斷條件會立即在寄存器讀取數(shù)據(jù)中給出,而鎖存位不會設(shè)置。
1.4.16 Carkit脈沖控制
地址:22h-24h(讀取)、22h(寫入)、23h(設(shè)置)、24h(清除)。
此寄存器是可選的它在PHY內(nèi)的音頻功能期間控制Carkit數(shù)據(jù)的操作。如果未設(shè)置接口控制寄存器中的車載設(shè)備模式位,則忽略TxPlsEn和RxPlsEn。
TxPlsEn:當(dāng)設(shè)置TxPlsSen位,并設(shè)置Carkit控制寄存器中的SpkLeftEn位時,PHY應(yīng)在79UTMI+低引腳接口規(guī)范(修訂版1.1,2004年10月20日)數(shù)據(jù)(0)線上的每個上升沿或下降沿后,在D線上輸出一個正脈沖,然后輸出一個負脈沖。當(dāng)生成這樣的脈沖對時,PHY應(yīng)執(zhí)行Carkit規(guī)范中定義的步驟。以下步驟列表提供了有關(guān)Carkit規(guī)格意圖的信息。
1.三態(tài)驅(qū)動D線的揚聲器緩沖器
2.將D線驅(qū)動至3.3V+/-10%的電壓
3.等待傳輸正寬度寄存器中指定的時間
4.將D路驅(qū)動至地
5.等待傳輸負寬度寄存器中規(guī)定的時間
6.停止將D路驅(qū)動器至地
7.啟用驅(qū)動D線揚聲器緩沖器
RxPlsEn:當(dāng)RxPlsSen位被設(shè)置,并且Carkit控制寄存器中的MicEn位被設(shè)置時,每當(dāng)在D+線上檢測到下降沿超過VPH_DP_LO的車載套件中斷閾值時,PHY應(yīng)切換數(shù)據(jù)(1)輸出。設(shè)置RxPlsEn位時,應(yīng)啟用接收極性恢復(fù)計時器。
1.4.17 發(fā)送正脈沖寬度
地址:25h(讀),25h(寫)
此寄存器是可選的它指定設(shè)置TxPlsEn位時在D線上輸出的正脈沖的寬度。%1小時必須支持的最小TxPosWdth為8。必須支持的最大TxPosWdth為64。
1.4.18 發(fā)送負脈沖寬度
地址:26h(讀),26h(寫)
此寄存器是可選的它指定設(shè)置TxPlsEn位時在D線上輸出的負脈沖的寬度。%1小時必須支持的最小TxNegWdth為8。必須支持的最大TxNegWdth為64。
1.4.19 接收極性恢復(fù)
地址:27h (Read), 27h (Write)
該寄存器是可選的
當(dāng)在Carkit中啟用了音頻中的數(shù)據(jù)功能時,然后,Carkit通過將非歸零(NRZ)的UART信號轉(zhuǎn)換為一系列脈沖,將UART數(shù)據(jù)發(fā)送到手機,將這些脈沖信號通過D+發(fā)送到手機。
然后,在每次接收到一個脈沖時,手機中的PHY通過切換到數(shù)據(jù)(1)線,將這些脈沖轉(zhuǎn)換為NRZ UART信號。如果PHY錯誤地錯過了一個脈沖,或者檢測到一個額外的脈沖,那么數(shù)據(jù)(1)線上的極性將是不正確的。為了從此條件中恢復(fù),當(dāng)數(shù)據(jù)(1)行的極性為邏輯極性低時,PHY自動將數(shù)據(jù)(1)行的極性重置為邏輯高。
只有在設(shè)置了Carkit脈沖控制寄存器中的RxPlsEn位時,接收極性恢復(fù)才會被激活。時間以0.25 ms為單位測量。必須支持的最小RxPolRcvry為1。必須支持的最大RxPolRcvry為255。
1.4.20 保留
28H~2EH部分保留以后使用。
1.4.21 訪問擴展寄存器集
2FH(讀/寫)
命令字中的低6位填該值,在下一個CLJ中發(fā)送8位的擴展寄存器地址。
1.4.22 廠商指定
30H~3FH
廠商自定義使用
1.5擴展寄存器
擴展寄存器集的地址00h到3Fh直接映射到立即寄存器集。對擴展地址00h到3Fh的讀、寫、設(shè)置或清除操作實際是在立即寄存器組上操作。地址40h到7Fh被保留以供將來使用。地址80h至FFh被分配給供應(yīng)商特定用途。
1.6所有上行和下行信號模型的寄存器設(shè)置
前面也說過ULPI是通過將UTMI的一部分相對靜態(tài)的的信號映射到寄存器,通過寄存器去操作這些信號來減少引腳的數(shù)量的。
下表顯示了LINK必須應(yīng)用哪些寄存器設(shè)置才能實現(xiàn)所需的信號模式。PHY必須根據(jù)需要自動生成正確的信號、準(zhǔn)備SYNC和附加EOP。該表還顯示了由于寄存器設(shè)置而啟用的電阻器。
以下信號概念上存在于PHY內(nèi)部。所有電阻器信號均為高電平有效,值1b啟用電阻器,值0b禁用電阻器。
1.rpu_dp_en啟用D+上的1.5k?上拉電阻器
2.rpu_dm_en啟用D-上的1.5k?上拉電阻器
3.rpd_dp_en啟用D+下的15k?下拉電阻器
4.rpd-dm_en啟用D-上的15kΩ下拉電阻器
5.hsterm_en啟用D+和D-上的45?終端電阻器。
1.7總結(jié)
以上詳細介紹了PHY相關(guān)的寄存器內(nèi)容,標(biāo)準(zhǔn)部分是所有PHY都需要按照該規(guī)范實現(xiàn)的,還有廠商自定義部分可以自定義。正是因為規(guī)范對寄存器功能進行了規(guī)范所以LINK部分的IP才能做到兼容通過。
PHY寄存器的內(nèi)軟件開發(fā)人員容一般情況接觸不到,但是真正遇到底層疑難問題時可能只有通過PHY的一些寄存器才能進行進一步分析,所以也是需要了解的。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
接口
+關(guān)注
關(guān)注
33文章
8575瀏覽量
151015 -
usb
+關(guān)注
關(guān)注
60文章
7936瀏覽量
264473 -
驅(qū)動開發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12072 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
125
發(fā)布評論請先 登錄
相關(guān)推薦
評論