USB 之傳輸編碼格式 NRZI 介紹


NRZI (Non-Return-to-Zero Inerted code) 非歸零翻轉編碼,之前,我先稍微記錄一下他的前身

RZ 編碼(Return- to - zero coding)

  RZ 編碼,簡單的來說,就是在每一位普通的編碼后面加了一個零電平。所以叫做歸零編碼,正電平代表1,后面再接一個0電平,告訴接收器該同步了,負電平代表0,然后又接一個0電平。 如下圖所示。

  可以看到,每一位后面都接了一位0電平,所以接收器在接收到 0 以后采樣即可,這樣就不用單獨的時鍾信號,實際上,RZ編碼就相當於把時鍾信號用 0 編碼在數據之內,這樣的信號也叫自同步(self-clocking)信號。 這樣的做法雖然在物理上少了一根時鍾線,但是在帶寬上確有一大部分都用在歸零上面了。

第二種演變,去掉歸零 NRZ (Non - Return - to - Zero - code)編碼,就是講 RZ 編碼的歸零去掉

  NRZ編碼既是將邏輯1編碼作為一個DC電平,邏輯0做為另一個DC電平。它與RZ碼的區別就是它不用歸零,也就是說,一個周期可以全部用來傳輸數據,這樣傳輸的帶寬就可以完全利用。一般常見的帶有時鍾線的傳輸協議都是使用NRZ編碼或者差分的NRZ編碼。因此,使用NRZ編碼若想傳輸高速同步數據,基本上都要帶有時鍾線,因為本身NRZ編碼無法傳遞時鍾信號。但在低速異步傳輸下可以不存在時鍾線,但在通信前,雙方設備要約定好通信波特率,例如UART。

NRZ一般用於設備內的信號傳輸,對於串行傳輸,它有許多缺點:

(1)數據本身不攜帶時鍾信息,因此不能自定時(即這樣做雖然我們帶寬不浪費了,但是我們的時鍾線的同步信號又要另外給。);此外,一個全是1或全是0的長串編碼結果就是一個固定的電平,沒有跳變。

(2)它的DC分量隨着數據流內容的變化而變化,低頻內容往往占主導地位。

        由於這些原因,除了低速短距離通訊,比如SPI等 外,NRZ很少用於串行傳輸。

第三種演變,NRZI(Non - Return - to - Zero - Inverted - code) 非歸零反相編碼

  和NRZ 編碼不同的是,NRZI 編碼利用的電平的翻轉來代表一個邏輯,當前電平相對於前一個電平不變代表0,當前電平相對於前一個電平相反代表1 USB 的傳輸就是用的 NRZI 編碼格式,在USB 中,電平翻轉代表邏輯1,電平不變代表邏輯0。限定最大0的數目,NRZI就可以實現自定時能力。比如,將全0的同步碼反向,於是產生連續的跳變,這樣便於PLL鎖定。NRZI頻譜依然有一個相對較高的低頻分量,且它的直流分量也不是自由的(反轉用0或是1,並不是一定的)。

 

 

數據同步問題

  NRZ 和 NRZI 都沒有同步的特性,但是,可以用一些比較特殊的技巧來解決,比如,先發送一個同步頭,內容是0101010, 讓接收着通過這個同步頭來計算發出的頻率,然后再用這個頻率去接收之后的數據信號。

  在USB 中,每一個USB的數據包,最開始的時候都有一個同步域,這個域定義為 0000 0001,這個域通過 NRZI 編碼后,就是一個正負正負的方波,接收者可以通過這個方波計算頻率,然后同步后面的數據。

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

  但是,這樣還會有一個問題,接收者可以主動和發送者之間頻率匹配,但是兩者之間總會有誤差,假如數據是1000個邏輯0,經過 NRZI 編碼后,很長時間都是同一個電平,這種情況下,即是接收者和發送者之間的頻率相差千分之一,就是造成采樣 999 個0或者是1001 個0

  USB 對這種問題的解決方法就是強制插一個1,規定為傳輸6個0后在數據中插入一個1,即發送前就會在第6個0后面強制插入一個1,就讓發送的信號強制出現翻轉,從而強制接受者調整頻率,接受者只要刪除6個1之后的那個0,就可以恢復原有的數據。

 


免責聲明!

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



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