實(shí)現比特完美(Bit-Perfect) 的USB音頻
采用USB接口來(lái)確保高品質(zhì)音頻傳輸到外部設備是一種常用方法。由于使用者只需要把設備插入到預裝了驅動(dòng)程序的通用接口即可,因此其對于音頻應用極富吸引力。盡管有這些優(yōu)勢,使用USB音頻類(lèi)時(shí)仍然需要對系統設計進(jìn)行明智的選擇,以確保傳送音頻流時(shí)不會(huì )發(fā)生錯誤或更加糟糕的頻率失配。這篇文章《選擇USB音頻MCU須小心:來(lái)自測試臺的可怕故事》給出了幾個(gè)有趣的故障案例。
本文引用地址:http://dyxdggzs.com/article/201609/297019.htmUSB音頻系統是一個(gè)串行橋接系統,,它將來(lái)自USB總線(xiàn)的數據包轉換成音頻(I2S)總線(xiàn)數據包。這條總線(xiàn)通常連接一個(gè)編解碼器或下游音頻處理器(圖1)。I2S 總線(xiàn)的棘手之處在于,其需要精準的時(shí)鐘信號,才能實(shí)現高品質(zhì)音頻。

圖一:基于USB的音頻系統將來(lái)自USB總線(xiàn)的數據包轉換到I2S總線(xiàn),后者通常連接編解碼器或下游音頻處理器
舉例來(lái)說(shuō),典型的音頻采樣率是48 k個(gè)樣本/秒。大多數商用編解碼器IC需要一個(gè)頻率為音頻采樣率整數倍(通常是128或256倍)的純凈時(shí)鐘。這迫使編解碼器的時(shí)鐘頻率達到恐怖的12.288 MHz,而這個(gè)頻率難以從標準的晶振震蕩時(shí)鐘源中獲得。更為復雜的是,支持44.1 k個(gè)樣本/秒等多個(gè)采樣率需要為每一個(gè)采樣率采用同樣高品質(zhì)的時(shí)鐘。這意味著(zhù)系統或者配置多個(gè)晶振振蕩器,或采用非常靈活的時(shí)鐘方案。
可以使用貼片(SMD)振蕩器,但這些通常功耗較大的器件需要高達20 mA的功率,因此不適合電池供電型設備。也可以使用鎖相環(huán)(PLL)實(shí)現靈活的時(shí)鐘方案。例如,賽普拉斯的PSoC 4-L系列芯片內置PLL和高度可配置的通用數字模塊(UDB),可讓開(kāi)發(fā)人員設計出靈活的時(shí)鐘方案。
Clocking Woes—the I2S Bus
時(shí)鐘悲劇—I2S總線(xiàn)

圖二:編解碼器和主芯片之間一條典型的I2S總線(xiàn)連接
I2S是用于在兩個(gè)芯片之間傳送音頻的標準接口。該協(xié)議類(lèi)似于一個(gè)串行外設接口(SPI),只是增加了幾個(gè)額外的信號。但是,音頻數據的性質(zhì)使得為I2S總線(xiàn)計時(shí)比想象的要困難。圖2顯示了編解碼器和主芯片之間典型的I2S總線(xiàn)連接。
I2S總線(xiàn)包括(圖3):
• Bit clock:用于從Data In和Data Out線(xiàn)路讀取數據的時(shí)鐘。
• Word select:也被稱(chēng)為L(cháng)eft-Right Clock。該信號用于區分左右信道。
• Data out: 主芯片輸出的串行數據流。
• Data in:來(lái)自編解碼器的串行數據流。

圖三:I2S總線(xiàn)的主要構件包括bit clock、word select、data in和data out
此外,大多數編解碼器還需要一個(gè)主時(shí)鐘(MCLK),用于為編解碼器的內部邏輯計時(shí)。
音頻數據有兩種典型的分辨率:16位和24位。如果我們考慮一個(gè)立體聲數據流,一個(gè)采樣周期中的總數據流為32或48位。這個(gè)周期通常是48/44.1/32 kHz。大多數編解碼器在一個(gè)word-select周期中最多支持32位,但分辨率可能仍為24位,因為要用0填充到最后。
這將每個(gè)采樣周期的總數據增至64位。如果我們考慮48-kHz的24位立體聲,我們所需的位時(shí)鐘將為48 × 64 × 2,即6.144 MHz。
編解碼器對主時(shí)鐘的要求取決于所用的編解碼器的品牌和類(lèi)型?,F代編解碼器支持多個(gè)時(shí)鐘模式,但每個(gè)模式都是采樣頻率(fS).的整數倍。主時(shí)鐘的值通常為fS的128/256/512倍。因此,48-kHz采樣頻率的時(shí)鐘值為 6.144/12.288/24.576 MHz。
USB音頻同步
同步來(lái)自于I2S 接口的流入/流出數據包是實(shí)現USB音頻需要克服的一個(gè)基礎性的問(wèn)題。USB類(lèi)別規范定義了幾種不同的實(shí)現方法:
• 同步模式:在同步模式中,從設備的音頻時(shí)鐘將與USB幀起始同步(每1 ms)。這簡(jiǎn)化了系統的緩沖器管理工作,更加便于維持一個(gè)一致的數據流。
• 異步模式:在異步模式中,音頻電路的從設備運行一個(gè)完全獨立于USB時(shí)鐘的時(shí)鐘。使用一個(gè)通過(guò)USB接口的反饋路徑來(lái)保持數據速率之間的同步。
同步端點(diǎn)模式
在同步端點(diǎn)模式中,所生成的音頻時(shí)鐘與每1ms進(jìn)入一次的USB幀起始(SOF)包同步(圖4)。本質(zhì)而言,我們從USB恢復時(shí)鐘,并用它運行編解碼器主時(shí)鐘和I2S模塊。同步模式極大簡(jiǎn)化了緩沖器管理,因為出入的數據包基于同一個(gè)時(shí)鐘。

圖四:在同步端點(diǎn)模式中,音頻時(shí)鐘與USB幀起始同步
生成用于支持標準采樣率的部分時(shí)鐘頻率依然棘手,涉及一些數學(xué)問(wèn)題。一種方法是使用前饋和反饋混合架構。所需的fS的整數倍由一個(gè)高品質(zhì)的PLL生成??梢允褂?1-3 MHz之間的一個(gè)參考時(shí)鐘頻率,然后乘以一個(gè)可配置的有理分數,以此生成純凈的輸出時(shí)鐘。
PLL的參考時(shí)鐘由一個(gè)快速前饋一級生成。該級計算出本地晶振震蕩源生成所需參考時(shí)鐘所必需除以的分數因子,然后暗中運行這個(gè)除法運算。運算由一個(gè)雙模前置分頻器執行,其除法控制輸入由一個(gè)△Σ調制器驅動(dòng),后者接受一個(gè)代表分數分頻的輸入。
一個(gè)噪聲整形環(huán)路提供一個(gè)兩級輸出,后者代表一個(gè)數字的分數部分,我們需要將本地時(shí)鐘頻率除以該數字以獲取所需參考頻率。有關(guān)如何恢復USB時(shí)鐘的詳細解釋?zhuān)垍㈤啠篣SB音頻系統中可編程時(shí)鐘的生成和同步。
異步模式

圖五:在異步模式中,一個(gè)獨立的時(shí)鐘源提供主時(shí)鐘
在異步模式中,主時(shí)鐘由一個(gè)獨立的本地時(shí)鐘源提供(圖5)。該模式可實(shí)現研發(fā)時(shí)間和生產(chǎn)成本所能實(shí)現的時(shí)鐘純凈度。系統擁有兩個(gè)獨立的時(shí)鐘域。PSoC系列可在芯片內創(chuàng )建獨立的時(shí)鐘域,而且能夠靈活地確保UDB與CPU和系統時(shí)鐘完全異步。
我們還遇到了多個(gè)音頻速率的支持問(wèn)題。選擇合適的晶振和內置PLL,我們有可能創(chuàng )建一個(gè)可實(shí)現常用音頻頻率的頻率集。這個(gè)神奇的數字就是17.2032 MHz(見(jiàn)下表)。

使用PLL異步模式可提供一個(gè)沒(méi)有鎖定和同步問(wèn)題的低抖動(dòng)時(shí)鐘,但該模式給系統的緩沖器管理增加了復雜性。這是因為本地晶振振蕩器不一定被鎖定到主機認為的48 kHz。微小的頻率失配將最終導致上溢/下溢,從而導致音頻污染。
為了解決這個(gè)問(wèn)題,USB類(lèi)別規范提供一個(gè)反饋端點(diǎn),它可用于調節主機數據速率,以匹配輸入數據包和I2S輸出數據流之間的數據速率。系統計算I2S發(fā)出的數據包數量,將其與USB SOF進(jìn)行對比,然后調節反饋端點(diǎn)的值,以匹配平均數據流。簡(jiǎn)而言之,主機縮小或擴大數據樣本數量,以便讓一段時(shí)間內的平均速率匹配音頻采樣率。CY8CKIT-046套件中演示了異步模式USB音頻。
評論