USB基本原理
USB是一種由PC(USB主機(jī))發(fā)起一次傳輸,設(shè)備(例如一套USB揚(yáng)聲器)繼而響應(yīng)的通信協(xié)議。每次傳輸都尋址到一個(gè)特定設(shè)備,并尋址到該設(shè)備的一個(gè)特定端點(diǎn)。IN傳輸將數(shù)據(jù)發(fā)送至PC。當(dāng)主機(jī)發(fā)起一次IN傳輸時(shí),設(shè)備必須用主機(jī)所需的數(shù)據(jù)做出響應(yīng)。OUT傳輸將數(shù)據(jù)傳輸至設(shè)備。當(dāng)主機(jī)執(zhí)行一次OUT傳輸時(shí),它發(fā)送設(shè)備必須捕獲的數(shù)據(jù)包。在USB音頻領(lǐng)域,IN傳輸和OUT傳輸可以用于傳輸音頻樣本:一個(gè)OUT傳輸將音頻數(shù)據(jù)從PC發(fā)送至揚(yáng)聲器,而IN傳輸用于將音頻數(shù)據(jù)從麥克風(fēng)發(fā)送至PC。
USB規(guī)范中有4種類型的IN傳輸和OUT傳輸:批量傳輸、同步傳輸、中斷傳輸和控制傳輸。
批量傳輸用于在主機(jī)和設(shè)備之間可靠地傳輸數(shù)據(jù)。所有USB傳輸都帶有CRC(校驗(yàn)和),它表明是否有錯(cuò)誤發(fā)生。在一次批量傳輸中,數(shù)據(jù)的接收端必須驗(yàn)證CRC。如果CRC正確,傳輸被應(yīng)答,數(shù)據(jù)被假定已經(jīng)傳輸無(wú)誤。如果CRC不正確,傳輸不會(huì)被應(yīng)答,然后將會(huì)重試。如果設(shè)備未準(zhǔn)備好接收數(shù)據(jù),它將傳送一個(gè)否定應(yīng)答(NAK)信號(hào),該信號(hào)將會(huì)使主機(jī)重試傳輸。批量傳輸不被認(rèn)為對(duì)時(shí)間要求嚴(yán)格,因此將會(huì)安排在以下將要討論的、對(duì)時(shí)間要求嚴(yán)格的各種傳輸?shù)闹苓厱r(shí)間。
同步傳輸用于在主機(jī)和設(shè)備之間實(shí)時(shí)傳輸數(shù)據(jù)。若主機(jī)建立了同步端點(diǎn),主機(jī)會(huì)為同步端點(diǎn)分配一定數(shù)量的帶寬,并且它將在該端點(diǎn)上規(guī)律地執(zhí)行IN傳輸或OUT傳輸。例如,主機(jī)可以每125μs對(duì)該設(shè)備OUT 1KB數(shù)據(jù)。由于分配了固定的、有限數(shù)量的帶寬,如果出現(xiàn)了任何異常,都將沒(méi)有時(shí)間重發(fā)數(shù)據(jù)。數(shù)據(jù)具有正常的CRC,但是如果接收端檢測(cè)到錯(cuò)誤,將沒(méi)有重發(fā)機(jī)制。
中斷傳輸被主機(jī)用于定期探詢?cè)O(shè)備,以發(fā)現(xiàn)是否有值得做的事情發(fā)生。例如,主機(jī)可以探詢音頻設(shè)備,核對(duì)靜音(MUTE)按鈕是否已被按下。“中斷”傳輸這個(gè)名稱有一點(diǎn)混淆視聽,因?yàn)槠洳⒉恢袛嗳魏问虑?。然而,?shù)據(jù)的定期探詢給出了主機(jī)中斷將會(huì)提供的相同類型的功能。
控制傳輸與批量傳輸非常相似??刂苽鬏敃?huì)被應(yīng)答(即可以被NAK),并且以非實(shí)時(shí)方式傳送??刂苽鬏斢糜谡?shù)據(jù)流以外的操作,例如詢問(wèn)設(shè)備功能或端點(diǎn)狀態(tài)。設(shè)備功能描述的說(shuō)明在本文范疇之外,本文僅陳述諸如“USB音頻類”或“USB大容量存儲(chǔ)類”等預(yù)定義的類型,它們能夠?qū)崿F(xiàn)跨平臺(tái)的互操作性。
USB幀中制定了所有的傳輸類型。高速USB幀的長(zhǎng)度為125μs(Full Speed USB幀為1ms),并由主機(jī)發(fā)送幀起始(SOF)消息進(jìn)行標(biāo)記。同步傳輸和中斷傳輸每幀至多發(fā)送一次。
USB音頻
USB音頻使用了同步傳輸、中斷傳輸和控制傳輸。所有音頻數(shù)據(jù)通過(guò)同步傳輸來(lái)傳輸;中斷傳輸用于轉(zhuǎn)發(fā)關(guān)于音頻時(shí)鐘可用性的信息;控制傳輸用于設(shè)置音量、請(qǐng)求采樣率等(參見圖1)。
這里假設(shè)去設(shè)計(jì)一個(gè)具有96kHz采樣率和24位樣本的立體聲音頻揚(yáng)聲器系統(tǒng),為了簡(jiǎn)化主機(jī)和設(shè)備上的數(shù)據(jù)編組,24位值一般用一個(gè)零字節(jié)填充,因此,總數(shù)據(jù)吞吐速率為96,000×2通道×4B=768,000Bps。同步端點(diǎn)以每125μs進(jìn)行一次傳輸(或8000次傳輸/s)的速率工作。用所需的字節(jié)速率除以幀速率,可以得到每次同步傳輸?shù)淖止?jié)數(shù):768,000/8,000=每次傳輸96B。
假若使用例如44,000Hz 的CD唱片速率,傳輸速率經(jīng)計(jì)算為44.1次傳輸/s。在USB音頻中,每次傳輸總是運(yùn)送整數(shù)個(gè)樣本;傳輸在48B和40B(6個(gè)和5個(gè)立體聲樣本)之間交替進(jìn)行,以至于平均速率算出為每次傳輸44.1B。
單次同步傳輸可運(yùn)送1024B,最多能夠運(yùn)送256個(gè)樣本(在24/32位時(shí))。這意味著,單個(gè)同步端點(diǎn)在48kHz時(shí)能傳輸42個(gè)通道,或者在192kHz時(shí)能傳輸10個(gè)通道——假定使用的是高速USB(High Speed USB)——全速USB(Full Speed USB)在48kHz時(shí)無(wú)法運(yùn)送多于一個(gè)立體聲IN和OUT對(duì)。
當(dāng)發(fā)送數(shù)字音頻時(shí),將會(huì)有延遲引入。在高速USB的情況下,延遲為250μs。數(shù)據(jù)包在每個(gè)125μs窗口中傳輸一次,但是考慮到它可能會(huì)在該窗口中的任何時(shí)候發(fā)送,需要有一個(gè)250μs的緩沖器。在該250μs延遲的頂端,操作系統(tǒng)(O/S)驅(qū)動(dòng)程序和編解碼器(CODEC)中可能引起額外延遲。注意:全速USB的固有延遲遠(yuǎn)遠(yuǎn)更高(為2ms),因?yàn)閿?shù)據(jù)在每個(gè)1ms窗口中僅發(fā)送一次。
[page]
1s在“朋友”之間是什么?
在數(shù)字音頻中,商定一個(gè)共同的時(shí)間概念是大問(wèn)題。上文已經(jīng)定義了USB幀的傳輸速率為8,000次/s,并設(shè)定了揚(yáng)聲器播放樣本的速率為96,000次/s。僅當(dāng)揚(yáng)聲器和主機(jī)約定了1s的長(zhǎng)度,這才能夠奏效。USB音頻提供了3種模式,來(lái)確保主機(jī)和揚(yáng)聲器共同約定時(shí)序:
1、在同步模式中,1s的長(zhǎng)度由主機(jī)設(shè)備定義。這就是說(shuō),主機(jī)以某個(gè)速率發(fā)送數(shù)據(jù),設(shè)備必須精確匹配這個(gè)速率。
2、在異步模式中,這正好相反——設(shè)備設(shè)置1s的定義,主機(jī)必須對(duì)設(shè)備進(jìn)行匹配。
3、在自適應(yīng)模式中,數(shù)據(jù)流決定時(shí)鐘。
自適應(yīng)模式和同步模式并不理想,因?yàn)镻C保持時(shí)鐘穩(wěn)定的能力非常差,而且經(jīng)常有其他音頻源介入,例如一臺(tái)外部數(shù)字錄音機(jī)。異步模式使外部時(shí)鐘源(或是設(shè)備內(nèi)的低抖動(dòng)時(shí)鐘)能夠用作主時(shí)鐘。一般兩者都依賴于基于晶振的鎖相環(huán)(PLL),如圖2所示。
這些時(shí)鐘的頻率會(huì)略有不同,其差別會(huì)隨時(shí)間略微變化。因此,每幀音頻樣本的平均數(shù)會(huì)稍微高于或低于期望的比率。例如,在本文96,000Hz采樣率的情況下,樣本的平均數(shù)為12.001。為了確保主機(jī)發(fā)送正確數(shù)量的數(shù)據(jù),并且不會(huì)太多或太低,主機(jī)向中斷端點(diǎn)請(qǐng)求當(dāng)前的采樣率。每隔幾個(gè)毫秒,上一個(gè)周期的平均采樣率將以16.16位定點(diǎn)數(shù)格式回報(bào)。如果上一個(gè)周期取平均數(shù)為12.001幀,那么報(bào)告值將為0x000C0041(65536×12.001)。
給定該平均速率,主機(jī)將能計(jì)算出在一次傳輸中在何時(shí)發(fā)送額外樣本;在此例中,每秒8次傳輸將運(yùn)送一個(gè)額外樣本。此外,主機(jī)能夠利用該值與音頻設(shè)備進(jìn)行同步。這使得DVD播放器等主機(jī)應(yīng)用能夠?qū)⒁曨l保持為與音頻同步。如果沒(méi)有同步,音頻會(huì)慢慢地跑到視頻前面,兩個(gè)小時(shí)以后,音頻將會(huì)有1s誤差。
為了保持反饋回路較短,訣竅是不對(duì)音頻包和反饋包做不必要的緩沖。任何附加的緩沖都會(huì)產(chǎn)生報(bào)告延遲,該延遲使得保持通信流的平滑變得更加困難。這意味著,底層USB棧和USB音頻棧應(yīng)緊密集成,而無(wú)需在它們之間緩沖。盡管這在應(yīng)用處理器上難以達(dá)到,但是把軟件在執(zhí)行時(shí)間可預(yù)測(cè)的嵌入式處理器上來(lái)實(shí)現(xiàn),這點(diǎn)將非常容易達(dá)到。諸如XMOS等公司現(xiàn)在可以提供這種可預(yù)測(cè)的嵌入式處理器,如XMOS的xCORE多核MCU等處理器系列。借助其豐富的內(nèi)置USB接口,它們緊密地將底層USB棧和USB音頻棧集成在一起。
[page]
多個(gè)時(shí)鐘源
以上方案僅考慮了兩個(gè)時(shí)鐘源——或者USB設(shè)備提供時(shí)鐘,或是主機(jī)提供時(shí)鐘。在調(diào)音臺(tái)等更復(fù)雜的設(shè)備中,可能還有其他設(shè)備提供采樣率,例如,通過(guò)ADAT或S/PDIF等數(shù)字接口,或通過(guò)攜帶字時(shí)鐘的BNC連接器提供。對(duì)于這樣的系統(tǒng),USB音頻標(biāo)準(zhǔn)使設(shè)計(jì)人員能夠在設(shè)備當(dāng)中置入時(shí)鐘選擇器。
時(shí)鐘選擇器規(guī)定采用哪個(gè)時(shí)鐘作為采樣率。時(shí)鐘選擇器有多個(gè)輸入時(shí)鐘(例如,一個(gè)S/PDIF接口上的輸入時(shí)鐘、本地晶振、以及一個(gè)ADAT接口上的輸入時(shí)鐘),并帶有一個(gè)用戶可選擇哪個(gè)時(shí)鐘用作輸入的控制傳輸,例如S/PDIF接口上的輸入時(shí)鐘。
符合性及原生支持
一旦一款設(shè)備符合USB音頻類協(xié)議,它將會(huì)很便捷地集成到操作系統(tǒng)中。圖3顯示了USB音頻設(shè)備插入到Mac OS/X系統(tǒng)中的控制界面截屏。它表明,時(shí)鐘選擇、采樣率選擇、通道音量控制以及靜音控制等都是可以控制的,就像對(duì)于任何其他的音頻設(shè)備那樣。
的確,相同的USB音頻實(shí)現(xiàn)能夠進(jìn)行參數(shù)化,以實(shí)現(xiàn)不同數(shù)量的通道,并且相同的驅(qū)動(dòng)程序能夠用于連接設(shè)備。
結(jié)語(yǔ)
USB-Audio Class 2.0利用了高速USB 2.0標(biāo)準(zhǔn),支持在PC和一臺(tái)所連接的音頻設(shè)備之間對(duì)音頻進(jìn)行低延遲傳輸。高速USB 2.0的高吞吐率可用于實(shí)現(xiàn)多個(gè)音頻通道,并且具有高的音頻質(zhì)量。USB音頻類標(biāo)準(zhǔn)可服務(wù)于多種設(shè)備的,從復(fù)雜的、具備多個(gè)通道、多個(gè)時(shí)鐘源和復(fù)雜控制的調(diào)音臺(tái),到環(huán)繞立體聲系統(tǒng)、PC揚(yáng)聲器和麥克風(fēng)。
目前,頂級(jí)的消費(fèi)性音頻產(chǎn)生已經(jīng)推出了各種USB-Audio產(chǎn)品,并且受到了市場(chǎng)的好評(píng),如Sony和OPPO已經(jīng)推出了基于XMOS公司xCORE多核MCU產(chǎn)品的USB-Audio耳機(jī)放大器和音響組合單元。預(yù)計(jì)該項(xiàng)應(yīng)用將在不遠(yuǎn)的將來(lái)為更多用戶所選用。
相關(guān)閱讀:
熟練掌握它:USB接口數(shù)模轉(zhuǎn)換電路設(shè)計(jì)
工程師值得推敲的設(shè)計(jì):嵌入式USB工業(yè)U盤系統(tǒng)的設(shè)計(jì)
牛人解讀:從RS 232接口向USB接口通訊的華麗轉(zhuǎn)變