實現(xiàn)比特完美(Bit-Perfect) 的USB音頻
采用USB接口來確保高品質(zhì)音頻傳輸?shù)酵獠吭O(shè)備是一種常用方法。由于使用者只需要把設(shè)備插入到預(yù)裝了驅(qū)動程序的通用接口即可,因此其對于音頻應(yīng)用極富吸引力。盡管有這些優(yōu)勢,使用USB音頻類時仍然需要對系統(tǒng)設(shè)計進(jìn)行明智的選擇,以確保傳送音頻流時不會發(fā)生錯誤或更加糟糕的頻率失配。這篇文章《選擇USB音頻MCU須小心:來自測試臺的可怕故事》給出了幾個有趣的故障案例。
本文引用地址:http://2s4d.com/article/201609/297019.htmUSB音頻系統(tǒng)是一個串行橋接系統(tǒng),,它將來自USB總線的數(shù)據(jù)包轉(zhuǎn)換成音頻(I2S)總線數(shù)據(jù)包。這條總線通常連接一個編解碼器或下游音頻處理器(圖1)。I2S 總線的棘手之處在于,其需要精準(zhǔn)的時鐘信號,才能實現(xiàn)高品質(zhì)音頻。
圖一:基于USB的音頻系統(tǒng)將來自USB總線的數(shù)據(jù)包轉(zhuǎn)換到I2S總線,后者通常連接編解碼器或下游音頻處理器
舉例來說,典型的音頻采樣率是48 k個樣本/秒。大多數(shù)商用編解碼器IC需要一個頻率為音頻采樣率整數(shù)倍(通常是128或256倍)的純凈時鐘。這迫使編解碼器的時鐘頻率達(dá)到恐怖的12.288 MHz,而這個頻率難以從標(biāo)準(zhǔn)的晶振震蕩時鐘源中獲得。更為復(fù)雜的是,支持44.1 k個樣本/秒等多個采樣率需要為每一個采樣率采用同樣高品質(zhì)的時鐘。這意味著系統(tǒng)或者配置多個晶振振蕩器,或采用非常靈活的時鐘方案。
可以使用貼片(SMD)振蕩器,但這些通常功耗較大的器件需要高達(dá)20 mA的功率,因此不適合電池供電型設(shè)備。也可以使用鎖相環(huán)(PLL)實現(xiàn)靈活的時鐘方案。例如,賽普拉斯的PSoC 4-L系列芯片內(nèi)置PLL和高度可配置的通用數(shù)字模塊(UDB),可讓開發(fā)人員設(shè)計出靈活的時鐘方案。
Clocking Woes—the I2S Bus
時鐘悲劇—I2S總線
圖二:編解碼器和主芯片之間一條典型的I2S總線連接
I2S是用于在兩個芯片之間傳送音頻的標(biāo)準(zhǔn)接口。該協(xié)議類似于一個串行外設(shè)接口(SPI),只是增加了幾個額外的信號。但是,音頻數(shù)據(jù)的性質(zhì)使得為I2S總線計時比想象的要困難。圖2顯示了編解碼器和主芯片之間典型的I2S總線連接。
I2S總線包括(圖3):
• Bit clock:用于從Data In和Data Out線路讀取數(shù)據(jù)的時鐘。
• Word select:也被稱為Left-Right Clock。該信號用于區(qū)分左右信道。
• Data out: 主芯片輸出的串行數(shù)據(jù)流。
• Data in:來自編解碼器的串行數(shù)據(jù)流。
圖三:I2S總線的主要構(gòu)件包括bit clock、word select、data in和data out
此外,大多數(shù)編解碼器還需要一個主時鐘(MCLK),用于為編解碼器的內(nèi)部邏輯計時。
音頻數(shù)據(jù)有兩種典型的分辨率:16位和24位。如果我們考慮一個立體聲數(shù)據(jù)流,一個采樣周期中的總數(shù)據(jù)流為32或48位。這個周期通常是48/44.1/32 kHz。大多數(shù)編解碼器在一個word-select周期中最多支持32位,但分辨率可能仍為24位,因為要用0填充到最后。
這將每個采樣周期的總數(shù)據(jù)增至64位。如果我們考慮48-kHz的24位立體聲,我們所需的位時鐘將為48 × 64 × 2,即6.144 MHz。
編解碼器對主時鐘的要求取決于所用的編解碼器的品牌和類型?,F(xiàn)代編解碼器支持多個時鐘模式,但每個模式都是采樣頻率(fS).的整數(shù)倍。主時鐘的值通常為fS的128/256/512倍。因此,48-kHz采樣頻率的時鐘值為 6.144/12.288/24.576 MHz。
USB音頻同步
同步來自于I2S 接口的流入/流出數(shù)據(jù)包是實現(xiàn)USB音頻需要克服的一個基礎(chǔ)性的問題。USB類別規(guī)范定義了幾種不同的實現(xiàn)方法:
• 同步模式:在同步模式中,從設(shè)備的音頻時鐘將與USB幀起始同步(每1 ms)。這簡化了系統(tǒng)的緩沖器管理工作,更加便于維持一個一致的數(shù)據(jù)流。
• 異步模式:在異步模式中,音頻電路的從設(shè)備運(yùn)行一個完全獨立于USB時鐘的時鐘。使用一個通過USB接口的反饋路徑來保持?jǐn)?shù)據(jù)速率之間的同步。
同步端點模式
在同步端點模式中,所生成的音頻時鐘與每1ms進(jìn)入一次的USB幀起始(SOF)包同步(圖4)。本質(zhì)而言,我們從USB恢復(fù)時鐘,并用它運(yùn)行編解碼器主時鐘和I2S模塊。同步模式極大簡化了緩沖器管理,因為出入的數(shù)據(jù)包基于同一個時鐘。
圖四:在同步端點模式中,音頻時鐘與USB幀起始同步
生成用于支持標(biāo)準(zhǔn)采樣率的部分時鐘頻率依然棘手,涉及一些數(shù)學(xué)問題。一種方法是使用前饋和反饋混合架構(gòu)。所需的fS的整數(shù)倍由一個高品質(zhì)的PLL生成??梢允褂?1-3 MHz之間的一個參考時鐘頻率,然后乘以一個可配置的有理分?jǐn)?shù),以此生成純凈的輸出時鐘。
PLL的參考時鐘由一個快速前饋一級生成。該級計算出本地晶振震蕩源生成所需參考時鐘所必需除以的分?jǐn)?shù)因子,然后暗中運(yùn)行這個除法運(yùn)算。運(yùn)算由一個雙模前置分頻器執(zhí)行,其除法控制輸入由一個△Σ調(diào)制器驅(qū)動,后者接受一個代表分?jǐn)?shù)分頻的輸入。
一個噪聲整形環(huán)路提供一個兩級輸出,后者代表一個數(shù)字的分?jǐn)?shù)部分,我們需要將本地時鐘頻率除以該數(shù)字以獲取所需參考頻率。有關(guān)如何恢復(fù)USB時鐘的詳細(xì)解釋,請參閱:USB音頻系統(tǒng)中可編程時鐘的生成和同步。
異步模式
圖五:在異步模式中,一個獨立的時鐘源提供主時鐘
在異步模式中,主時鐘由一個獨立的本地時鐘源提供(圖5)。該模式可實現(xiàn)研發(fā)時間和生產(chǎn)成本所能實現(xiàn)的時鐘純凈度。系統(tǒng)擁有兩個獨立的時鐘域。PSoC系列可在芯片內(nèi)創(chuàng)建獨立的時鐘域,而且能夠靈活地確保UDB與CPU和系統(tǒng)時鐘完全異步。
我們還遇到了多個音頻速率的支持問題。選擇合適的晶振和內(nèi)置PLL,我們有可能創(chuàng)建一個可實現(xiàn)常用音頻頻率的頻率集。這個神奇的數(shù)字就是17.2032 MHz(見下表)。
使用PLL異步模式可提供一個沒有鎖定和同步問題的低抖動時鐘,但該模式給系統(tǒng)的緩沖器管理增加了復(fù)雜性。這是因為本地晶振振蕩器不一定被鎖定到主機(jī)認(rèn)為的48 kHz。微小的頻率失配將最終導(dǎo)致上溢/下溢,從而導(dǎo)致音頻污染。
為了解決這個問題,USB類別規(guī)范提供一個反饋端點,它可用于調(diào)節(jié)主機(jī)數(shù)據(jù)速率,以匹配輸入數(shù)據(jù)包和I2S輸出數(shù)據(jù)流之間的數(shù)據(jù)速率。系統(tǒng)計算I2S發(fā)出的數(shù)據(jù)包數(shù)量,將其與USB SOF進(jìn)行對比,然后調(diào)節(jié)反饋端點的值,以匹配平均數(shù)據(jù)流。簡而言之,主機(jī)縮小或擴(kuò)大數(shù)據(jù)樣本數(shù)量,以便讓一段時間內(nèi)的平均速率匹配音頻采樣率。CY8CKIT-046套件中演示了異步模式USB音頻。
評論