2020年7月30日 星期四

NRZI 來源https://beeway.pixnet.net/blog/post/16803410

當PC主機對裝置發出控制信號時,所有連接的裝置都透過根集線器收到同樣的信號,但是經由比對所配置的裝置位址後,只能有一個裝置會作出相對應的動 作,這跟網路的架構有點類似。因此對一個裝置而言,不僅要無誤地接收主機端所送來的資料,又要正確地發出回應的信號。因此在D+與D-的差動資料線上就必 須採用一種特別的編號方式再加以傳送出去,以解決在USB纜線所產生訊號延遲,以及誤差等問題。

在此,USB採用了NRZI(Non Return to Zero Invert,不歸零就反向)的編碼方式,就無需同步的時脈信號也能產生同步的資料存取。NRZI的編碼規則是,當資料位元為 “1” 時不轉換,為 “0” 時再作轉換。如圖12所示,顯示了的NRZI編碼的範例。

圖12 NRZI編碼的範例說明


但如此的編碼方式會遇到一個很嚴重的問題,就是若重複相同的 “1” 信號一直進入時,資料就會造成長時間無法轉換,逐漸的累積,而導致“塞車”的狀況,這使得讀取的時序就會發生嚴重的錯誤。
因此,在NRZI編碼之間,還需執行所謂的位元填塞(Bit-stuffing)的工作。如圖13(a)所示,若是原始的串列資料中含有連續6個 “1” 位元的話,就需執行位元填塞的工作。此工作如圖13(b)所示,就在其後填塞一個 “0” 位元。但相對的在NRZI編碼的過程中,對這連續的6個 “1” 執行如圖13(c)轉換過程。
因此在發送端在作資料傳輸之前,需先執行位元填塞以及NRZI編碼的工作。相對的,接收端在作資料接收之前,就必需先執行NRZI解碼,然後再作位元反填塞(unBit-Stuffing)的工作。

圖13 NRZI解碼的過程

[資料來源]

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...