《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于I2S的USB 聲卡系統(tǒng)設計
基于I2S的USB 聲卡系統(tǒng)設計
摘要: 本文介紹了基于S3C2410處理器平臺,,利用I2S總線的USB聲卡系統(tǒng)設計。詳細闡述了USB聲卡通訊的實現(xiàn),,并且根據I2S總線DMA傳輸?shù)奶攸c實現(xiàn)了環(huán)形緩沖區(qū),,以提高系統(tǒng)性能,,滿足音頻實時性的要求。
關鍵詞: ARM USB 聲卡 音頻
Abstract:
Key words :

  引言

  近年來USB產品層出不窮,,USB音頻類在USB開發(fā)者論壇的努力下,,成為一種標準的規(guī)范,USB聲卡也開始在市場上悄然出現(xiàn),。因為USB聲卡內置了DAC和有源功放,,音頻數(shù)據以數(shù)字方式進入USB聲卡,完全杜絕了PC的內部干擾,,所以,,USB聲卡將有可能成為現(xiàn)有內置聲卡的替代品。本文介紹了一種基于ARM處理器的USB聲卡設計,。

  USB聲卡原理

  由USB聲卡數(shù)據流圖(見圖1)可以看出USB聲卡的工作原理,。在主機端播放音樂時,應用軟件或驅動程序把各類音頻信號轉換為統(tǒng)一的格式,,如PCM,、MPEG等格式的數(shù)據流,,通過主機的USB接口發(fā)送給USB聲卡。聲卡的USB接口接收到數(shù)據后,,通過I2S接口把并行音頻數(shù)據轉為串行,,再發(fā)送給音頻編解碼芯片進行D/A轉換,即可在音頻芯片連接的揚聲器中發(fā)音,。錄音過程和播放過程正好相反,。

USB聲卡數(shù)據流

  圖1 USB聲卡數(shù)據流

  硬件設計

  USB聲卡硬件主要包括MCU和音頻編解碼芯片。MCU采用三星公司的處理器S3C2410,,S3C2410內置I2S總線控制器和USB Slaver控制器。S3C2410的I2S控制器實現(xiàn)了一個外部8/16位立體聲音頻CODEC IC的接口,,支持I2S總線數(shù)據格式和MSB-justified數(shù)據格式,,并且支持DMA傳輸模式。

 

  音頻芯片采用UDA1341TS,。UDA1341TS提供標準的I2S接口,,可以直接和S3C2410的I2S引腳連接。另外,,此芯片還提供標準的L3,、麥克風和揚聲器接口。L3接口的引腳分別連到S3C2410的3個GPIO輸出引腳上,,通過GPIO控制L3接口,。UDA1341TS音頻芯片集成數(shù)字化音頻和混頻器功能。數(shù)字化音頻功能可以播放數(shù)字化聲音或錄制聲音,,因為包括這個功能,,所以常把此類芯片稱為CODEC設備?;祛l器用來控制各種輸入/輸出的音量大小等,,在本芯片中通過L3接口進行控制。

  軟件設計

  軟件設計包括兩部分:USB聲卡固件程序設計和主機端Windows驅動設計,。因為USB音頻類設備是一種標準設備,,在Windows 操作系統(tǒng)上有標準的USB音頻驅動,所以只需要開發(fā)者根據USB音頻類的協(xié)議開發(fā)固件程序,。

  USB聲卡的固件程序主要包括兩部分,,第一部分主要是USB通訊,第二部分實現(xiàn)I2S接口數(shù)據傳輸以及數(shù)據流的緩沖區(qū)控制等,。

  USB通訊

  USB聲卡描述符

  為了有效地定義出USB聲卡的描述符,,可先根據USB音頻類協(xié)議,并結合需要實現(xiàn)的USB聲卡功能,,確定出USB聲卡的拓撲圖(見圖2),,然后再根據拓撲圖和USB音頻類描述符的協(xié)議,,寫出USB聲卡的描述符。

USB聲卡拓撲圖

  圖2 USB聲卡拓撲圖

  USB聲卡的描述符包括5部分,,分別為設備描述符,、配置描述符、接口描述符,、端點描述符和字符串描述符,。接口描述符是其中的難點。USB聲卡的接口描述符包括兩部分:音頻控制(AudioControl)接口描述符和音頻數(shù)據流(AudioStreaming)接口描述符,。

  1. USB音頻控制接口描述符,。根據USB聲卡的拓撲圖所示,當聲卡用于回放功能時,,其聲卡功能的控制流程,,通過IT1(Input Teminal),OT3(Out Teminal)和Feature單元表示,,IT1表示的是PC向USB聲卡發(fā)送的音頻數(shù)據流,,OT3表示的是發(fā)向DAC的數(shù)據流,在IT1和OT3之間的Feature單元用于調節(jié)音量和音效功能等,。當聲卡執(zhí)行錄音功能時,,USB的功能拓撲通過IT2,OT4表示,,IT2表示A/D采樣的音頻數(shù)據流,,OT4表示的是通過USB接口發(fā)向PC的數(shù)據流。USB音頻控制接口的數(shù)據傳輸一般使用默認端點0,。

  在USB聲卡的拓撲圖中,,F(xiàn)表示的是USB音頻類的Feature單元,F(xiàn)eature單元的主要作用是控制音量,、靜音,、低音等。如果在描述符中聲明了Feature單元,,在Windows操作系統(tǒng)下,,控制面板中的聲音和音頻設備的一些功能才能使用。那么在Windows中進行調節(jié)音量等控制時,,就會觸發(fā)固件程序對UDA1341TS芯片L3接口的控制,。

  2. USB音頻數(shù)據流接口描述符。因為USB 音頻有回放和錄音兩種功能,,所以需要兩個同步數(shù)據流接口,,兩個接口使用雙向端點1進行數(shù)據傳輸。

  通過USB聲卡的拓撲圖,,可以分析出音頻接口的流程和功能,,從而得出USB聲卡的描述符,。

  USB通訊的程序實現(xiàn)

  S3C2410有5個雙向FIFO端點,其中0端點是控制傳輸端點,,其他4個端點支持批量,、中斷、同步傳輸?shù)确绞?。在本系統(tǒng)中使用0,、1兩個雙向傳輸端點。端點0執(zhí)行控制傳輸(CONTROL),,一方面?zhèn)鬏擴SB協(xié)議的控制信息,,例如Setup事件、握手信號,、枚舉信息等,,另一方面?zhèn)鬏斠纛l控制信息,例如采樣率控制,、音量控制等。端點1采用同步傳輸方式( ISOCHRONOUS),,傳輸時間間隔為1ms,,用于實時傳遞主機和I2S之間的錄音或放音數(shù)據。

 

  根據USB協(xié)議,,USB設備的任何數(shù)據傳輸,,都由USB主機分配,然后USB設備響應相應的USB主機總線請求,。S3C2410的USB控制器采用的是中斷方式響應,,那么在S3C2410的USB中斷服務程序中要作以下工作:

Isr_USB()
{
if(USB_INT_REG&RESET_INT)     Reset_USB();   //重啟USB設備
if(USB_INT_REG&RESUME_INT)   Resume_USB();  //喚醒USB設備
if(USB_INT_REG&SUSPEND_INT)  Suspend_USB(); //掛起USB設備
if(EP_INT_REG&EP0_INT)         Handle_EP0(); //執(zhí)行控制傳輸端點0處理程序
if(EP_INT_REG&EP1_INT)         Handle_EP1(); //執(zhí)行同步傳輸端點1處理程序
}

  USB聲卡的控制傳輸

  在主機端應用程序中,執(zhí)行音量調節(jié),、靜音等事件時,,USB音頻驅動通過默認端點0執(zhí)行一個控制傳輸。一次控制傳輸主要包括兩個步驟,,第一步,,由主機向設備發(fā)送一個建立(Setup)信息,描述控制訪問的類型,,設備將執(zhí)行此控制訪問,。第二步,零個或多個控制數(shù)據信息的傳送,,這是訪問的具體信息,。根據USB音頻類協(xié)議分解控制信息包,然后再根據控制信息,,執(zhí)行相應的操作,。例如,,在主機端應用程序中播放音樂前,USB聲卡就會從主機端收到如下的兩個包:

  Setup包  22 01 00 01 01 00 03 00

  控制數(shù)據包 40 1F 00

  根據USB音頻類協(xié)議分解Setup包,,可以得知,,本次控制傳輸?shù)淖饔檬窃O置USB聲卡的采樣頻率,并且收到的3字節(jié)控制數(shù)據信息是采樣頻率,,即8KHz,。那么在播放音樂前,必須把I2S和UDA1341TS芯片的采樣頻率設置為8kHz,,才能和主機端保持同步,。

  I2S總線實現(xiàn)方法

  在S3C2410芯片中,I2S接口提供三種數(shù)據傳輸模式:正常傳輸模式,、DMA傳輸模式,、傳輸/接收模式。本系統(tǒng)采用的是傳輸/接收模式,,它具有雙通道DMA功能,,一方面竊取總線控制權,提高系統(tǒng)的吞吐能力,,另一方面,,可以實現(xiàn)同時接收和發(fā)送音頻數(shù)據,即全雙工模式,。

  在S3C2410芯片中,,有4個DMA通道控制器用于控制各種外部設備,其中I2S與其他串行外設共用兩個橋接DMA(BDMA)類型的DMA通道,。通過設置I2SFCON寄存器可以使I2S接口工作在DMA模式下,。此模式下FIFO寄存器組的控制權掌握在DMA控制器上。當FIFO滿時,,由DMA控制器對FIFO中的數(shù)據進行處理,。DMA模式的選擇由I2SCON寄存器的第四和第五位控制。

  為了使USB聲卡的回放和錄音可以同時進行,,即實現(xiàn)全雙工,,數(shù)據傳輸使用兩個BDMA通道,通道0用于回放,,通道1用于錄音,,因為S3C2410的BDMA中沒有內置DMA存儲區(qū)域,所以需要在SDRAM中分配DMA緩沖區(qū),。音頻數(shù)據回放時,,先由USB總線取得音頻數(shù)據,寫入DMA緩沖區(qū),由BDMA控制器通道0竊取總線控制權,,通過I2S控制器寫入I2S總線并傳輸給音頻芯片,。錄音采用BDMA控制器的通道1,其數(shù)據流過程和回放相反,。

  由于處理的音頻數(shù)據量比較大,,并且PC端接收/發(fā)送數(shù)據的速度和I2S處理數(shù)據的速度不能完全匹配,這就導致了放音失真或者錄音丟幀的現(xiàn)象,。為了解決這個問題,,最簡單易行的方法是使用比較大的環(huán)形緩存。但實際上大的緩存區(qū)需要更長的填充時間,,在使用時會出現(xiàn)延時,。為了解決延時的問題,使用環(huán)形,、多段緩存機制,。在這種機制下,將緩存區(qū)分割成若干個相同大小的塊,,并使用算法實現(xiàn)環(huán)形緩沖,。下面以8kHz/16位/單通道音頻流的播放為例說明緩沖區(qū)的操作。

  USB音頻類規(guī)定的USB同步傳輸周期為1ms,,即對于8kHz/16位/單通道PCM編碼的音頻流,,每隔1ms,USB設備就會收到一次主機傳來的數(shù)據,,數(shù)據包大小為16字節(jié),為了盡量保持I2S和USB傳輸同步,,可以取16字節(jié)作為一個緩存區(qū)段的大小,。當USB聲卡接收到數(shù)據后,MCU先判斷緩沖區(qū)中是否有空閑區(qū)域,,如果沒有足夠緩沖區(qū)就跳過一個樣本,,然后再逐一把FIFO中的數(shù)據復制到SDRAM的緩沖區(qū)。

  因為I2S的DMA控制器處理數(shù)據是按段進行,,每段長度為16字節(jié),,在DMA取數(shù)據前,先判斷緩沖區(qū)中的數(shù)據量,,如果沒有足夠數(shù)據(16字節(jié)),,則加入靜音數(shù)據,然后再執(zhí)行DMA傳輸,。

  結語

  本文所闡述的基于I2S總線的USB聲卡,,已經在基于S3C2410處理器的開發(fā)板上成功實現(xiàn),不過只是實現(xiàn)了USB聲卡的最基本功能??梢試L試把MP4,、U盤等和USB聲卡集成在一體,會更有應用價值,。

  參考文獻

  1. Samsung Inc. S3C44B0X Risc Microprocessor Datasheet. http://www.samsung.com.  2003

  2.Philips Semiconductors. UDA1341TS datasheet.http://www. semiconductor. philips.com. 2002

  3. Hyde, John, USB Design by Example. Intel. www.usb-by-example.com.2002.5

此內容為AET網站原創(chuàng),,未經授權禁止轉載。