USB NRZI 編碼與傳輸技術摘要: --- **USB 傳輸的小秘密:NRZI 編碼** 各位同學好!我們每天都在用 USB,但你知道裡面的資料是怎麼傳送的嗎?今天我們要來揭開 USB 傳輸的一個重要小秘密:**NRZI 編碼**。 **1. USB 是什麼?** * 全名是 **Universal Serial Bus** (通用序列匯流排),就像電腦跟很多不同裝置(滑鼠、鍵盤、隨身碟等)溝通的「萬用連接線」。 * 它超方便,**即插即用**,而且可以**邊用邊拔插**(熱插拔)。 * 除了傳**資料**,很多時候它也能**供電**。 **2. USB 資料是怎麼傳送的?** * USB 傳送資料的方式是**序列傳輸**,意思是資料是**一位元一位元排隊送出**,不像有些線是一次送很多位元。 * 它用兩條特別的線 (叫做 D+ 和 D-) 來傳送訊號,這種方式比較**不怕雜訊**干擾。 * 而最特別的是,USB 會把我們要傳的 0 和 1 資料,先用一種叫做 **NRZI 的「密碼」**方式轉換後才送出去。 **3. NRZI 編碼是什麼?** * NRZI 是 Non-Return to Zero Inverted 的縮寫。 * 它的原理很簡單:看你要傳的資料是 0 還是 1: * 如果要傳 **1**:訊號的狀態(電壓高或低)就**不變**。 * 如果要傳 **0**:訊號的狀態就**切換**(原來高就變低,原來低就變高)。 * 你可以想像,資料 1 就像「維持現狀」,資料 0 就像「變身」。 **4. 為什麼 USB 要用 NRZI?** * 最主要原因:幫助接收端跟傳送端「**對準節奏**」(這叫做**時脈同步**)。 * 因為 NRZI 在遇到 0 的時候訊號會切換,這個切換就像是一個**節拍點**。接收端偵測到這些切換點,就能更準確地判斷什麼時候要讀取下一個位元,這叫做**改善時鐘恢復能力**。 * 這樣能**避免訊號一直不變**,導致接收端「抓不到節奏」的問題。 * 最終目的是讓 USB 的資料傳輸更**穩定可靠**。 **5. NRZI 有個小問題,怎麼辦?** * NRZI 的問題是:如果資料中**連續出現很多很多的 1**,訊號就會**長時間不變**,這樣接收端還是會失去節奏,沒辦法同步。 * 解決方法:USB 會搭配一個聰明的技術,叫做 **bit stuffing (位元填充)**。 * 規則:當資料中看到**連續六個 1** 時,USB 會**自動在後面「塞」一個 0 進去**。這個額外塞的 0 會讓 NRZI 訊號強制切換一次,幫助接收端重新對準節奏。 **6. USB 資料的包裝** * USB 資料不是零散傳送的,它們會被包裝成一個一個的「**框架 (Frame)**」。 * 每個框架裡包含幾個部分: * **SYNC**:開始訊號,告訴接收端資料要來了。 * **PID**:告訴接收端這個框架是哪種類型。 * **Payload**:真正要傳的資料本體。 * **CRC**:用來檢查資料在傳送過程中是否出錯。 **7. NRZI 在 USB 傳輸流程中的位置** * 就像一個「資料處理管線」: * **從電腦/裝置送出時:** 原始資料 → 經過 **NRZI 編碼** → 檢查並做 **bit stuffing** → 送出去。 * **到接收端時:** 收到訊號 → 先把塞進來的 0 **拿掉** (去 stuffing) → 進行 **NRZI 解碼** → 還原回原始資料。 **總結一下**: NRZI 編碼是 USB 實現穩定傳輸的**關鍵技術**之一。它透過「資料為 0 時切換訊號」的規則,加上 **bit stuffing** 的輔助,有效地幫助 USB 接收端跟上傳送端的時脈節奏,解決了高速序列傳輸中的同步問題,讓我們的 USB 裝置可以快速又穩定地工作。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up