當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解碼的過程
2020年7月30日 星期四
NRZI 來源https://beeway.pixnet.net/blog/post/16803410
訂閱:
張貼留言 (Atom)
algorithm
#include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv) { for(int j=2;j<=100;j++)//j...
-
本文旨在補充《 超圖解Arduino互動設計入門 》第18章「RFID無線識別裝置與問答遊戲製作」單元,書本採用的RFID讀卡機模組是採用9600bps, TTL序列通訊介面,RFID的通訊頻率為125KHz。這種模組的接線和程式都很簡單,每當感測到RFID卡,讀卡機就把...
-
/* 多重按鈕開關 */ //==宣告區================================ #include // 定義8051暫存器之標頭檔,P2-17~19 #include "myio.h" // 自己寫的I/O程式庫 sbit PB...
沒有留言:
張貼留言