USB PHY芯片


參考:

https://www.zhihu.com/question/51436808

ULPI_v1_1

https://www.sparkfun.com/datasheets/Components/SMD/ULPI_v1_1.pdf

http://cross-hair.co.uk/tech-articles/ULPI%20interface.html

https://www.beyondlogic.org/usbnutshell/usb3.shtml

https://www.usb.org/documents?search=&tid_2%5B0%5D=40&items_per_page=50

https://www.mentor.com/products/ip/usb/usb20otg/phy_interfaces

https://www.ti.com/lit/ds/sllse16e/sllse16e.pdf?ts=1592220488191&ref_url=https%253A%252F%252Fwww.google.com%252F

https://www.techdesignforums.com/practice/technique/usb-3-0-physical-layer/

https://ip.cadence.com/ipportfolio/ip-portfolio-overview/interface-ip/usb-ip/usb-3-0-phy-2/usb3-ss-phy

usb3.0

https://www.eefocus.com/liangziusb/blog/11-12/236193_34684.html

hs usb2.0

http://ww1.microchip.com/downloads/en/DeviceDoc/evb3320.pdf

http://ww1.microchip.com/downloads/en/Appnotes/AN19.0-Application-Note-DS00002959A.pdf

http://ww1.microchip.com/downloads/en/DeviceDoc/evb3320user.pdf

http://ww1.microchip.com/downloads/en/DeviceDoc/00001792E.pdf

opencores

https://opencores.org/projects/usb1_funct

https://opencores.org/projects/usb

USB 2.0 Physical
USB 2.0 Physical Layer(PHY
Layer(PHY ) Design
) Design
 

低速設備D-上有一個1.5k歐的上拉電阻。

高速和全速設別在D+上有一1.5k歐上拉電阻。

連接后通過檢測電壓變化來了解設備是否為低速設別。

低速下:D+為“0”,D-為“1”是為“J”狀態,“K”狀態相反;

全速下:D+為“1”,D-為“0”是為“J”狀態,“K”狀態相反;

高速同上。

低速下空閑狀態為“K”狀態;//1.5Mbps

全速下空閑狀態為“J”狀態;//12Mbps

高速下空閑狀態為“SE0”狀態;//480Mbps

//----------------------------------------------

J態:DP=0,DN=1

K態:DP=1,DN=0

SE0態:DP=0,DN=0

從J到K或者從K到J,信號翻轉,說明發送的是信號0;從J到J或從K到K,信號保持不變,說明發送的是信號1。這就是差分信號0/1的發送。

高速設備的J和K相反。

 

NRZ與NRZI編碼解釋

RZ 編碼(Return-to-zero Code),即歸零編碼。

在 RZ 編碼中,正電平代表邏輯 1,負電平代表邏輯 0,並且,每傳輸完一位數據,信號返回到零電平,也就是說,信號線上會出現 3 種電平:正電平、負電平、零電平:

 

 

從圖上就可以看出來,因為每位傳輸之后都要歸零,所以接受者只要在信號歸零后采樣即可,這樣就不在需要單獨的時鍾信號。實際上, RZ 編碼就是相當於把時鍾信號用歸零編碼在了數據之內。這樣的信號也叫做自同步(self-clocking)信號。

這樣雖然省了時鍾數據線,但是還是有缺點的,因為在 RZ 編碼中,大部分的數據帶寬,都用來傳輸“歸零”而浪費掉了。

那么,我們去掉這個歸零步驟,NRZ 編碼(Non-return-to-zero Code)就出現了,和 RZ 的區別就是 NRZ 是不需要歸零的:

這樣,浪費的帶寬又回來了,不過又喪失寶貴的自同步特性了,貌似我們又回到了原點,其實這個問題也是可以解決的,不過待會兒再講,先看看什么是 NRZI:

NRZI 編碼(Non-Return-to-Zero Inverted Code)和 NRZ 的區別就是 NRZI 用信號的翻轉代表一個邏輯,信號保持不變代表另外一個邏輯。

USB 傳輸的編碼就是 NRZI 格式,在 USB 中,電平翻轉代表邏輯 0,電平不變代表邏輯1:

 

翻轉的信號本身可以作為一種通知機制,而且可以看到,即使把 NRZI 的波形完全翻轉,所代表的數據序列還是一樣的,對於像 USB 這種通過差分線來傳輸的信號尤其方便~

現在再回到那個同步問題:

的確,NRZ 和 NRZI 都沒有自同步特性,但是可以用一些特殊的技巧解決。比如,先發送一個同步頭,內容是 0101010 的方波,讓接受者通過這個同步頭計算出發送者的頻率,然后再用這個頻率來采樣之后的數據信號,就可以了。

在 USB 中,每個 USB 數據包,最開始都有個同步域(SYNC),這個域固定為 0000 0001,這個域通過 NRZI 編碼之后,就是一串方波(復習下前面:NRZI 遇 0 翻轉遇 1 不變),接受者可以用這個 SYNC 域來同步之后的數據信號。

   此外,因為在 USB 的 NRZI 編碼下,邏輯 0 會造成電平翻轉,所以接受者在接受數據的同時,根據接收到的翻轉信號不斷調整同步頻率,保證數據傳輸正確。

但是,這樣還是會有一個問題,就是雖然接受者可以主動和發送者的頻率匹配,但是兩者之間總會有誤差。假如數據信號是 1000 個邏輯 1,經過 USB 的 NRZI 編碼之后,就是很長一段沒有變化的電平,在這種情況下,即使接受者的頻率和發送者相差千分之一,就會造成把數據采樣成 1001 個或者 999 個 1了。

USB 對這個問題的解決辦法,就是強制插 0,也就是傳說中的 bit-stuffing,如果要傳輸的數據中有 7 個連續的 1,發送前就會在第 6 個 1 后面強制插入一個 0,讓發送的信號強制出現翻轉,從而強制接受者進行頻率調整。接受者只要刪除 6 個連續 1 之后的 0,就可以恢復原始的數據了。

 

既然說編碼,那就順便把另一種極常用的編碼也說一下把:曼徹斯特編碼

曼徹斯特( Manchester )碼是一種雙相碼。用高電平到低電平的轉換邊表示 0 ,而用低電平到高高電平的轉換邊表示 1 。

注:以上關於電平的表示,具體環境或者不同教材給出的規定可能不同,但是原理相同!

 

低速設備:

J態:DP=0,DN=1

K態:DP=1,DN=0

SE0態:DP=0,DN=0

從J到K或者從K到J,信號翻轉,說明發送的是信號0;從J到J或從K到K,信號保持不變,說明發送的是信號1。這就是差分信號0/1的發送。

高速設備的J和K相反

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM