top of page

USB 音訊基礎

2012 年 6 月 27 日



作者:Henk Muller,XMOS Ltd. 首席技術專家


USB(Universal Serial Bus,通用序列匯流排)已經存在數十年,並且在個人電腦世界中是一個被廣泛使用的標準。隨身碟、外接硬碟、滑鼠以及網路攝影機等,都透過 USB 介面連接。


在本文中,我們將探討 USB Audio:一種用於數位音訊的標準,被用於 PC、智慧型手機以及平板電腦,以連接音訊周邊設備,例如喇叭、麥克風或混音器。在本文中,我們將說明 USB Audio 如何運作、需要注意哪些事項,以及如何使用 USB Audio 來實現高保真多聲道輸入與輸出。


USB 基礎


USB 是一種協定,其中 PC(USB 主機)會發起傳輸,而裝置(例如 USB 喇叭)會回應。每一次傳輸都會被指定給某一個特定裝置,以及該裝置上的某一個特定 endpoint(端點)。


IN 傳輸會將資料送到 PC。當主機發起一個 IN 傳輸時,裝置必須回傳資料給主機。OUT 傳輸則是將資料送到裝置

當主機執行 OUT 傳輸時,它會送出一個資料封包,裝置必須接收並擷取該資料。在 USB Audio 的世界中,IN 與 OUT 傳輸可以用來傳送音訊樣本:OUT 傳輸將音訊資料從 PC 傳送到喇叭,而 IN 傳輸則是將音訊資料從麥克風傳送到 PC。


USB 中有四種 IN 與 OUT 傳輸類型:


  • Bulk

  • Isochronous

  • Interrupt

  • Control


Bulk 傳輸用於在主機與裝置之間可靠地傳輸資料。所有 USB 傳輸都會包含 CRC(checksum,校驗碼),用來表示是否發生錯誤。在 Bulk 傳輸中,資料接收方必須驗證 CRC。如果 CRC 正確,該傳輸會被確認(acknowledged),資料就被視為已經無錯誤地傳輸。如果 CRC 不正確,該傳輸不會被確認,並且會重新傳送。


如果裝置尚未準備好接收資料,它可以回傳一個負確認(NAK),這會導致主機重新嘗試傳輸。Bulk 傳輸不被視為時間關鍵(time critical),並且會在下面討論的時間關鍵傳輸之間進行排程。


Isochronous 傳輸用於在主機與裝置之間即時傳輸資料。當主機建立一個 isochronous endpoint 時,主機會為該 endpoint 分配一定數量的頻寬,並定期在該 endpoint 上執行 IN 或 OUT 傳輸。例如,主機可能每 125 微秒向裝置 OUT 1KB 的資料。由於只分配了固定且有限的頻寬,因此如果發生錯誤,沒有時間重新傳送資料。資料仍然會包含 CRC,但如果接收端檢測到錯誤,並沒有重新傳送的機制。


Interrupt 傳輸用於主機定期輪詢(poll)裝置,以查看是否發生了某些值得注意的事件。例如,主機可以輪詢一個音訊裝置,檢查 MUTE 按鈕是否被按下。Interrupt 傳輸這個名稱稍微令人困惑,因為它其實不會中斷任何東西。然而,定期輪詢資料提供的功能與主機中斷(host interrupt)所提供的功能類似。


Control 傳輸非常類似 Bulk 傳輸。Control 傳輸會被確認,可以回傳 NAK,並且以非即時方式傳遞。Control 傳輸用於正常資料流之外的操作,例如查詢裝置能力或 endpoint 狀態。關於裝置能力如何描述的解釋超出本文範圍,我們只指出存在一些預先定義的類別,例如 USB Audio Class 或 USB Mass Storage Class,它們可以實現跨平台的互通性。


所有傳輸都在 USB frame(幀)中進行。High Speed USB 的 frame 長度為 125 微秒(Full Speed USB 為 1 毫秒),並由主機發送 Start-Of-Frame(SOF)訊息來標記。Isochronous 與 Interrupt 傳輸最多每個 frame 傳送一次。


USB Audio


USB Audio 使用 isochronous、interrupt 以及 control 傳輸。


所有音訊資料都透過 isochronous 傳輸interrupt 傳輸用於傳遞關於音訊時鐘可用性的資訊;control 傳輸用於設定音量、請求取樣率等。這些在圖 1 中顯示。



Figure1 : 主機與 USB 裝置之間的傳輸包括:Isochronous IN 與 OUT 用於音訊資料、Control 用於設定參數,以及 Interrupt 用於狀態監控。


USB Audio 系統的資料需求取決於:

  • 聲道數

  • 每個樣本的位元數

  • 取樣率


典型的聲道數為 2(立體聲)、6(5.1)或在錄音室與 DJ 使用情境下更高。通常樣本大小為 24 bit,雖然 16 bit 可用於舊式音訊,而 32 bit 用於高品質音訊。典型取樣率為 44.1、48、96 與 192 kHz。最後一種用於高品質音訊。


假設我們設計一個立體聲喇叭,取樣率為 96 kHz,樣本為 24 bit。為了簡化主機與裝置端的資料封裝,24 位元的數值通常會補上一個 0 byte,因此總資料吞吐量為:

96,000 × 2 聲道 × 4 bytes = 768,000 bytes/秒


Isochronous endpoint 的運作速率是每 125 微秒一次傳輸,也就是每秒 8,000 次傳輸。將所需的位元組速率除以 frame 速率,可得到每次 isochronous 傳輸所需的位元組數:

768,000 ÷ 8,000 = 96 bytes 每次傳輸


當使用 CD 取樣率,例如 44,100 Hz 時,傳輸速率會變成每秒 44.1 次傳輸。在 USB Audio 中,每次傳輸必須包含整數個樣本;因此傳輸會交替攜帶 48 與 40 bytes(6 與 5 個立體聲樣本),使平均速率達到每次傳輸 44.1 bytes。


單一 isochronous 傳輸最多可以攜帶 1024 bytes,最多可攜帶 256 個樣本(以 24/32 bit 計算)。這意味著單一 isochronous endpoint 可以傳輸:

  • 48 kHz 時 42 個聲道

  • 或 192 kHz 時 10 個聲道


(假設使用 High Speed USB —— Full Speed USB 不能承載超過 48 kHz 的單一立體聲 IN 與 OUT)。


在傳輸數位音訊時會引入延遲。在 High Speed USB 的情況下,這個延遲為 250 微秒。一個資料封包在每個 125 微秒窗口內傳送一次,但由於它可能在該窗口內的任意時間傳送,因此需要 250 微秒的 buffer。除了這個 250 微秒延遲外,額外延遲可能來自作業系統驅動程式以及 CODEC。請注意 Full Speed USB 的內在延遲要高得多,為 2 毫秒,因為資料只會在每 1 毫秒窗口傳送一次。


朋友之間的一秒算什麼?



在數位音訊中最大的問題是要對時間的概念達成一致。上面我們定義 USB frame 每秒傳送 8,000 次,並設定喇叭每秒播放 96,000 個樣本。只有當喇叭與主機對「一秒鐘」的長度有一致理解時,這才能正常運作。


USB Audio 提供三種模式來確保主機與喇叭在時間上保持一致:

同步模式(synchronous mode):一秒鐘的長度由主機裝置定義。也就是說主機會以某個速率送資料,而裝置必須精確匹配該速率。

非同步模式(asynchronous mode):情況相反,由裝置定義一秒鐘的長度,而主機必須匹配裝置。

自適應模式(adaptive mode):資料流本身決定時鐘。

Adaptive 與 synchronous 模式並不理想,因為 PC 的時鐘穩定度通常很差,而且常常還涉及其他音訊來源,例如外部數位播放設備。Asynchronous 模式允許使用外部時鐘來源作為 master,或者使用裝置中的低抖動時鐘。通常這依賴於基於晶體的 PLL,如圖 2 所示。



因此系統中至少有兩個不同的時鐘:

USB 時鐘,由主機以每秒 8,000 次傳輸驅動樣本時鐘,例如 96,000 Hz 的取樣率

這些時鐘的頻率會略有不同,而且差異會隨時間略微變化。因此每個 frame 的平均音訊樣本數會稍微多於或少於預期值。例如在 96,000 Hz 的情況下,平均樣本數可能為 12.001。


為了確保主機傳送適量的資料,而不是太多或太少,主機會透過 interrupt endpoint 請求目前的樣本速率。每隔幾毫秒,過去一段時間內的平均取樣率會以 16.16 位元固定小數格式回傳。例如,如果平均為 12.001 個 frame,則回報值為:

0x000C0041(65536 × 12.001)


根據這個平均速率,主機可以計算何時在某次傳輸中多送一個樣本;在這個例子中,每秒有 8 次傳輸會多帶一個樣本。此外,主機也可以利用這個數值與音訊裝置同步。這使得像 DVD 播放器這樣的主機應用程式能夠讓影片與音訊保持同步。如果沒有這樣做,音訊會慢慢跑在影片前面,兩小時後可能會差到一秒。


為了保持短的回饋迴路,關鍵技巧是不要不必要地緩衝音訊封包與回饋封包。任何額外緩衝都會在回報中產生延遲,而這種延遲會讓平滑的資料流更難維持。這意味著低層 USB stack 與 USB Audio stack 應該緊密整合,中間不要有緩衝。雖然在應用處理器上很難做到,但如果軟體在具有可預測執行時間的嵌入式處理器上實作,則相對容易。


多個時鐘來源


上述方案只考慮兩個時鐘來源——USB 裝置提供時鐘,或主機提供時鐘。但在更複雜的裝置(例如混音器)中,可能還有其他裝置提供取樣率,例如透過數位介面:

  • ADAT

  • SPDIF

  • 或透過 BNC 連接的 word clock


對於這樣的系統,USB Audio 標準允許設計者在裝置中放置一個 clock selector。


Clock selector 用來指定哪一個時鐘作為取樣率來源。該 selector 具有多個輸入時鐘(例如 SPDIF 連線的時鐘、本地晶體時鐘、以及 ADAT 連線的時鐘),並且透過 control transfer 讓使用者選擇要使用哪個輸入時鐘,例如選擇 SPDIF 的輸入時鐘。


相容性與原生支援


一旦裝置符合 USB Audio Class 標準,它就能與作業系統良好整合。圖 3 顯示了一個 USB Audio 裝置插入 Mac OS/X 後的控制畫面。畫面顯示時鐘選擇、取樣率選擇、聲道音量控制以及靜音控制,都可以像任何其他音訊裝置一樣被控制。



符合該標準可以讓裝置互通。作業系統廠商可以提供單一 USB Audio driver,來驅動多種不同能力的裝置。


事實上,同一個 USB Audio 實作可以透過參數化來支援不同的聲道數,而同一個 driver 也可以用來與該裝置介接。


總結


USB Audio Class 2.0 利用了 High Speed USB 2.0,使得 PC 與連接的音訊裝置之間可以進行低延遲的音訊傳輸。High Speed USB 2.0 的高吞吐量可以用來提供大量音訊聲道,以及高品質音訊。USB Audio Class 標準能夠支援各種裝置,從具有多聲道、多時鐘來源以及複雜控制的混音器,到環繞聲系統、PC 喇叭以及麥克風。


作者 Henk Muller 是 XMOS Ltd. 的首席技術專家。在該角色中,他參與了即時系統的硬體與軟體設計與實作。在此之前,他在學術界從事電腦架構、編譯器以及普適運算研究長達 20 年,並擁有阿姆斯特丹大學博士學位。




留言

評等為 0(最高為 5 顆星)。
暫無評等

新增評等

©2025 ALXC 版權所有。

bottom of page