USB編碼方式(NRZI)及時鐘同步方式

2021-10-13 07:35:38 字數 2814 閱讀 6404

目錄

1.概述

2.usb自同步傳輸

3. rz 編碼(return-to-zero code)

4. nrz 編碼(non-return-to-zero code)

5.nrzi 編碼(non-return-to-zero inverted code)

6.usb使用nrzi編碼同步原理

7.usb中用bit-stuffing來同步時鐘訊號

在同步通訊系統中,兩個裝置通訊則需要同步訊號,同步訊號分為時鐘同步訊號和自同步訊號兩種,時鐘同步方式在通訊鏈路上具有時鐘訊號(iic、spi),自同步方式在通訊鏈路中沒有同步訊號(pcie、usb),自同步方式常常適用於高速通訊系統中。

首先,usb 的資料是序列傳送的,就像 uart、i2c、spi 等等,連續的01 訊號只通過一根資料線傳送給接受者。但是因為傳送者和接收者執行的頻率不一樣,訊號的同步就是個問題,比如,接受者接收到了乙個持續一段時間的低電平,無法得知這究竟是代表了 5 個 0 還是 1000 個 0。

乙個解決辦法,就是在傳輸資料訊號的同時,附加乙個時鐘訊號,用來同步兩端的傳輸,接受者在時鐘訊號的輔助下對資料訊號取樣,就可以正確解析出發送的資料了,比如 i2c 就是這樣做的,sda 來傳輸資料,scl 來傳輸同步時鐘:

雖然這樣解決了問題,但是卻需要附加一根時鐘訊號線來傳輸時鐘。因為usb沒有時鐘訊號,有沒有不需要附加的時鐘訊號,也能保持兩端的同步呢?

有的,這就是 rz 編碼(return-to-zero code),也叫做歸零編碼。

rz 編碼(return-to-zero code),也叫做歸零編碼。在 rz 編碼中,正電平代表邏輯 1,負電平代表邏輯 0,並且,每傳輸完一位資料,訊號返回到零電平,也就是說,訊號線上會出現 3 種電平:正電平、負電平、零電平:

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

這樣雖然省了時鐘資料線,但是還是有缺點的,因為在 rz 編碼中,大部分的資料頻寬,都用來傳輸「歸零」而浪費掉了。

去掉這個歸零步驟,nrz 編碼(non-return-to-zero code)就出現了,和 rz 的區別就是 nrz 是不需要歸零的:

這樣,浪費的頻寬又回來了,不過又喪失寶貴的自同步特性了,貌似我們又回到了原點,繼續往下看。

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,如果要傳輸的資料中有 6個連續的 1傳送前就會在第 6 個 1 後面強制插入乙個 0,讓傳送的訊號強制出現翻轉,從而強制接受者進行頻率調整。

接受者只要刪除 6 個連續 1 之後的 0,就可以恢復原始的資料了。

4.對於不遵守此宣告或者其他違法使用本文內容者,本人依法保留追究權等。

NRZ與NRZI編碼解釋

nrz與nrzi編碼解釋 rz 編碼 return to zero code 即歸零編碼。在 rz 編碼中,正電平代表邏輯 1,負電平代表邏輯 0,並且,每傳輸完一位資料,訊號返回到零電平,也就是說,訊號線上會出現 3 種電平 正電平 負電平 零電平 從圖上就可以看出來,因為每位傳輸之後都要歸零,所...

1 USB協議學習 USB的NRZI訊號格式

在usb匯流排上,通過d 和d 兩個資料訊號線來傳輸,而並沒有像i2c匯流排那樣會有一根scl時鐘線來同步,那麼usb匯流排是如何來進行同步兩端訊號傳輸呢?此時我們得來了解一些編碼方式,以便處理因usb線纜所產生的訊號延遲及誤差等問題。在該編碼試工中,正電平代表邏輯1,負電平 邏輯0,並且每次傳輸完...

編碼方式,編碼之問題

編碼方式對於程式的重要不言而喻,若是不能徹底理解編碼方式,則在許多的地方都會困擾著你。對於編碼方式的困擾,在剛學習jsp時出現的亂碼問題到現在一年有餘,一直在模糊狀態,如今,也不知道是不是真的徹底明白,只是有一點小小的收穫,期待以後的徹底理解,在此先記錄一下點點滴滴。從開始的亂碼起。首先是jsp中的...