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

基于DWC2的USB驅動開發-0x05 DWC2 USB2.0 IP 寄存器介紹

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

基于DWC2的USB驅動開發-控制傳輸中斷相關寄存器

將LDC1000配置了0X0B寄存器,各寄存器的值都變成了相應寄存器的Deffault值,為什么?
新思 DWC2 的參考手冊從哪里可以下載
基于DWC2的USB驅動開發-0x0A ULPI接口同步模式介紹

評論