基於STM32F4和CPLD的高品質立體聲USB數字音頻接口設計

2020-12-01 電子產品世界


本文引用地址:http://www.eepw.com.cn/article/202010/419295.htm

引言

在高品質音頻回放系統中,USB協議[1]被廣泛應用於音頻數據的傳輸。目前高品質音頻設備大多基於USB Audio Devices Class(以下簡稱ADC)2.0規範[2]開發USB音頻接口。當前較為常見的USB音頻接口方案的核心晶片有如下以下幾種選擇:1、專用USB音頻接口晶片;2、XMOS系列晶片;3、帶有USB2.0模塊的通用單片機;4、FPGA晶片。從產品成本和生命周期考慮,產品方案中核心晶片應該選擇市場上佔有率大產品線成熟產品支持完善且價格相對低廉的型號。專用晶片底層不透明適用範圍窄難以根據需求進行個性化開發,XMOS晶片產品支持較少開發文檔不豐富,FPGA晶片開發難度和成本較高。通用單片機是一個較好的選擇,但通用單片機的數字音頻輸出功能通常較薄弱需要對其進行一定的擴充。本文基於市場上應用廣泛的STM32F4晶片和CPLD晶片設計了一款高性能USB數字音頻接口。

本文所設計音頻接口指標和特性如下:

1)支持的音頻數據流格式:16bit PCM、32bit PCM、DoP(DSD Audio over PCM Frames)、NativeDSD;

2)支持的最高數據規格:384kHz PCM、DSD256;

3)輸出接口規範:I2S、DSD;

4)異步反饋模式,主機時鐘與設備時鐘完全解耦,數字輸出信號質量可控;

5)適配Windows、Linux系統原生ADC 2.0音頻驅動。

1   基於ADC 2.0規範的立體聲音頻架構設計

ADC 2.0規範相較於其1.0版本架構更複雜包含的內容更為豐富,也增加了開發的難度。ADC 2.0物理層面上基於USB 2.0協議,完全支持高速USB傳輸,帶寬不再受限。邏輯層面上,ADC 2.0規範為儘可能滿足不同的音頻數據傳輸需求,規定了一套較為複雜的抽象層邏輯。其中USB音頻功能通過定義完善的接口來實現與外部的連通。每個音頻功能都必須包含一個音頻控制接口和可選的音頻流接口。音頻控制接口用於訪問對應的音頻功能,音頻流接口用於傳輸音頻數據。

為有效操地操作各種音頻功能,ADC規範將其分割為不同的實體,依據功能特徵實體可分為三大類:單元、埠、時鐘。音頻設備通過設備描述符定義音頻控制接口、音頻流接口和功能實體並將其從邏輯上串接在一起向主機描述設備所能實現的邏輯行為。

基於ADC2.0規範設計功能架構如圖1所示。

1)Audio Streaming Interface定義了主機到設備的數據傳輸接口。該接口有3個備選接口設置分別用於傳輸32bit PCM、16bit PCM和NativeDSD數據。

2)Audio Control Interface定義了主機到設備的控制接口,該接口下包含了用於傳輸音頻數據和實現部分功能的實體,主機通過設備請求來訪問不同實體的具體功能。ID1是input terminal用於接收USB數據流也定義了輸出聲道的數量;ID2是output terminal相當於一個消耗USB數據的終端,主機一般需要結合audio streaming接口和端點描述符來確定此終端的具體特徵行為;ID3是feature unit使能了音量控制和靜音控制;ID4、ID5是clock source,用於描述時鐘特徵;ID6是clock selector,用於選擇時鐘信號的連接方式。

依據ADC規範編寫設備的配置描述符即可定義此架構的邏輯結構,主機通過獲取配置描述符來知曉設備所具有的接口和功能。需要注意的是ADC僅僅提供了一個完整的協議框架,本身並不實現任何具體功能,開發者遵循ADC規範開發設備和驅動可提高產品和驅動的通用性。

圖1 基於ADC 2.0規範的音頻接口邏輯架構

2 基於STM32F4 的USB Audio Class設備設計

由於ADC2.0規範是基於USB2.0協議的[2],需要設備具有高速傳輸能力。STM32F4的高速USB OTG模塊沒有片上高速PHY,只有UPLI接口,因此需要外接USB UPLI晶片來實現高速USB功能。本設計採用了較為常用的USB3300晶片與STM32F4連接,STM32F4提供完整的UPLI協議硬體支持[3],只需要操作對應的寄存器即可實現相應的通信功能,不需要過多關注USB控制器具體底層的操作,大大降低了程序設計難度。

2.1 音頻數據傳輸和頻率反饋控制

依據ADC規範,設備需要使用等時端點來傳輸音頻數據。由於主機和設備的時鐘存在頻率誤差、相位誤差和相位抖動,為保證音頻數據傳輸的完整連貫性,必須在主機和設備間建立一種同步機制。USB協議針對等時傳輸提供了三種同步方案[1],以設備角度來分析如下

1)將設備時鐘同步到主機SOF(幀起始)信號上;

2)設備根據主機發送數據的速率調整數據消耗速率;

3)設備和主機獨立運行在自己的時鐘上,設備提供時鐘速度的顯式反饋。

方案1)音頻回放質量依賴於主機時鐘質量和頻率跟蹤誤差,方案2)設備為保持同步必須在軟體裡動態調節回放頻率直接造成失真。只有方案3)才能完全消除主機和設備間的時鐘耦合,這是高品質回放的必要條件。

在一般音頻驅動程序中,主機使用EP1 OUT端點來傳輸音頻數據,使用EP1 IN端點來進行傳輸頻率的反饋。當播放開始後,主機每個微幀都會向EP1發送音頻數據,主機每4微幀向EP1請求一次4位元組的IN傳輸。IN傳輸返回的數據是一個頻率參數,主機根據此參數動態地調整每個微幀發送的數據幀數量從而調節數據發送速率。

由於主機和設備獨立運行在各自的時鐘源上,因此主機發送數據頻率和設備消耗數據頻率不可能完全一致,如果不進行處理會出現數據溢出和丟失問題。解決方案是在設備程序中設計一個緩衝區暫存數據,根據緩衝區長度向主機發送需要的數據速率來進行滯環控制,從而實現對緩衝區數據長度的跟蹤。環寬和跟蹤目標的選擇需結合主機和設備時鐘的最大可能誤差以及控制晶片允許的存儲空間來確定。依據USB 2.0協議,高速傳輸的比特率精度應控制在500ppm(0.05%)以內,設環寬為,數據速率為則。

因主機傳輸數據以微幀為單位,設每個微幀內可能傳輸的最大數據量為字節,為防止數據上溢或下溢,追蹤數據長度應大於。

2.2 音頻輸出接口與STM32F4間的通信實現

由於STM32F4晶片自身音頻接口功能有限,且不能直接輸出DSD信號,所以只能考慮駁接外部晶片來實現設計目標。這部分功能主要是完成音頻信號時序輸出,因此選用CPLD晶片較為合理。

從主機接收的USB音頻數據在STM32F4晶片中處理後輸出到CPLD晶片,二者之間需要一個傳輸的通道。本設計最高數據規格是PCM 32bit/384kHz,計算可得數據帶寬為24.576Mbit/s,由參考手冊[3]可知SPI1通道與高速USB接口復用無法使用其SPI功能,而其它SPI通道最高速率為21Mbit/s無法滿足設計要求。因此需用並行傳輸來提高接口帶寬,由於音頻數據量大且對實時性要求很高,不宜直接通過操作IO口來輸出數據,考慮使用STM32的DMA功能來實現並行傳輸。

得益於STM32F4的DMA IP核基於多層總線矩陣的設計,可以利用DMA和GPIO埠進行並行同步傳輸,其本質原理是利用某種觸發機制實現數據從SRAM到GPIO的DMA傳輸[4]

1)DMA控制器選擇

STM32F4片上集成2個DMA IP。每個DMA各有一個存儲器埠和一個外設埠。利用外部總線矩陣和專用DMA路徑,不僅在DMA級兩個埠可以同時工作,還可以實現DMA和系統其它主設備同時工作。GPIO位於AHB1總線上,由參考手冊[3]可知STM32F4的DMA1的AHB外設埠沒有連接到總線矩陣,因此只有DMA2可實現從SRAM到AHB1外設的訪問。

2)觸發機制選擇

同步傳輸根據同步信號的提供者可將設備分為主從兩方。本文以STM32F4作為從設備,CLPD作為主設備進行設計。CLPD向STM32發出同步信號來請求數據,當STM32接收到一個合法的觸發信號應觸發一次DMA傳輸,將存儲器(源地址)上的數據由DMA控制器傳輸到GPIO(目標地址)上。這裡就需要一個外設來接收並處理外部觸發信號並產生DMA請求,顯然定時器模塊很適合完成這項工作。

由參考手冊[3]可知只有兩個高級控制定時器TIM1和TIM8可以產生DMA2的請求,但可產生DMA請求的事件比較豐富,本設計選擇了TRIG事件來觸發DMA請求。具體實現方法是將定時器設置為外部時鐘觸發模式,選擇一個GPIO埠x的上升沿觸發TRIG事件,每當CPLD在埠x處產生一個上升沿信號即觸發DMA傳輸請求,數據從預設的地址傳輸到GPIO埠上,CPLD即可從相應埠並行地讀入取此數據。

3)最大傳輸帶寬計算

此設計中影響STM32F4到CPLD傳輸帶寬的因素主要有DMA傳輸時間、定時器收入捕獲數字濾波時間和CPLD埠建立時間。由於CPLD埠建立時間較短,此處不予考慮。

本設計DMA設置是從存儲器傳輸數據到AHB外設,使用突發傳輸,不需要進行總線仲裁,則DMA數據流的總傳輸時間為:

TS=TSP+TSM

其中是DMA外設埠訪問和傳輸的總時間,TSM是DMA存儲器埠訪問和傳輸的總時間。依據參考文獻[5]計算可得,最壞情況下DMA傳輸時間為8個AHB周期。

定時器輸入捕獲數字濾波器是為了消除幹擾引起的誤觸發,數字濾波器由事件計數器組成,每N個事件才視為一個有效邊沿,將其設置為連續4個AHB周期。則從CPLD給出上升沿觸發信號到CPLD讀取到數據的延時為12個AHB周期。將AHB頻率設置為84MHz,在用8位GPIO口並行輸出的情況下,接口帶寬為:

可見傳輸帶寬完全滿足設計需要。若使用整組16位GPIO做輸出可降低晶片主時鐘頻率且為帶寬留出較大裕度,為設備功能升級留有裕量。

2.3 音頻信號的輸出

本設計中,PCM音頻信號輸出採用I2S接口,DSD音頻信號輸出由DSD時鐘信號和DSD左右聲道數據信號構成[6]

對於PCM數據,主機傳入設備的數據是低字節在前高字節在後,而I2S協議是從數據高字節開始串行輸出的;對於DSD數據而言主機整幀的傳入數據而在信號輸出端左右聲道卻是同時輸出的。因此設備需要對原始數據進行重新組合處理。CPLD門資源較為有限,為降低片上資源的使用率和綜合布線難度,處理數據的工作全部由STM32晶片負責。CPLD依據前述設計方案從STM32緩衝區依次並行讀取數據再將數據按各播放模式的時序邏輯串行輸出即可。

2.4 硬體連接框圖

設備的主要硬體連接框圖如圖2所示。STM32通過ULPI PHY晶片與主機通信,與CPLD相連接的信號中CMD為控制信號,本設計使用SPI總線向CPLD發送控制指令。RDY為程序通知CLPD可以進行數據請求的信號。REQ為CPLD向STM32發送的數據請求信號,此信號即用於觸發DMA請求。DATA為並行的數據信號。CPLD向外輸出I2S和DSD時序信號,外部控制晶片可通過AUX接口來讀取設備的相關狀態。

主機時鐘源1和負責提供回放時鐘的時鐘源2相互獨立,因此時鐘源2可以選用低相位噪聲的時鐘來提升音頻回放質量。

圖2 硬體連接框圖

3 應用程式框架

由於基於上述設計方案的軟體實現方案非常靈活,部分技術雖為通用技術但細節又較為繁瑣,本節僅對一種可行性方案概括性說明。

此方案主要由三個模塊構成:USB底層通信程序、Setup傳輸處理程序、播放處理程序。具體功能使用了三個狀態機實現,由於USB通信程序中包含了硬體中斷,三個狀態機之間的通信由消息隊列來實現異步通信。此處不對USB底層通信和Setup傳輸處理程序進行贅述,重點對播放處理的狀態機設計進行說明。

基於上述原理設計的播放處理狀態機的UML狀態圖如圖3所示,整個播放過程在播放監控狀態中運行,在PlayGuard_IDLE狀態中程序接收相關的參數設置信號為播放做準備。PlayGuard_PLAYING是一個組合狀態,其自身負責與USB底層模塊通信進行數據傳輸,其子狀態負責處理特定播放模式。

音頻數據的流轉是程序的核心算法。音頻數據通過OUT傳輸寫入程序緩衝區,數據由播放子狀態處理並寫入FIFO中。程序將DMA傳輸設置為雙緩衝模式,在DMA完成事件中從FIFO讀出一組數據對雙緩衝區進行交替填充。在IN傳輸完成事件中計算當前FIFO區數據長度據此反饋數據傳輸率給主機完成對數據長度的追蹤控制。

圖3 播放處理狀態圖

4 結語

基於上述設計製作了硬體實物如圖4,分別在Windows 10系統和Linux發行版下進行測試實驗,接口板在系統原生驅動下工作正常,可播放所支持規格的PCM音頻文件。在三方驅動下可正常通過DoP模式或NativeDSD模式播放DSD音頻文件。播放自定義音頻文件並用邏輯分析採集輸出接口的數據與源文件對比,接口板完整無失真的還原了源文件的數據。在軟體開發平臺上對緩衝隊列進行監控,程序能較好的跟蹤隊列長度的穩定,無數據溢出現象。最後將接口板連接至解碼器上進行試聽,主觀聽感良好。以上試驗證明設計達到了預期指標。

圖4 硬體實物圖

設計在以下方面還有進一步研究改進的空間:1、優化播放時鐘設計,進一步降低回放失真;2、增加對更多聲道音頻格式的支持;3、增加數字音效的功能;4、增加Bootloader程序,實現主機對設備功能和參數的在線升級與修改。

參考文獻

[1] Universal Serial Bus Specification[EB/OL]. Revision 2.0, USB-IF,(2000-4-27)[2020-4-25].https://www.usb.org.

[2] Universal Serial Bus Device Class Definition for Audio Devices[EB/OL]. Release 2.0,USB-IF, (2006-5-31)[2020-4-25].https://www.usb.org.

[3] STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit  MCUs Reference manual (RM0090)[EB/OL]. Rev 18, STMicroelectronics, (2019)[2020-4-25].https://www.st.com.

[4] Parallel synchronous transmission using GPIO and DMA(AN4666)[EB/OL]. Rev 1, STMicroelectronics, (2016)[2020-4-25].https://www.st.com.

[5] Using the STM32F2, STM32F4 and STM32F7 Series DMA controller(AN4031)[EB/OL]. Rev 3, STMicroelectronics, (2016)[2020-4-25].https://www.st.com.

[6] J. ROBERT STUART. Coding for High-Resolution Audio Systems[J]. Audio Eng. Soc., 2004,Vol. 52, No. 3:117-144.

相關焦點

  • usb音頻接口有哪些 usb音頻接口品牌介紹【詳解】
    隨著現代技術的發展,人們對高品質的要求越來越高,對於音樂的要求也越來越嚴苛。但是偏偏想要藉助簡單的錄音設備獲得出色的曲目成品從來都不是件容易的事,更不要說再涉及到產品大小和產品價格方面的因素了。小編這裡就推薦幾款比較好用的,也算是入門級的USB音頻接口,方便大家將自己的音頻設備與樂器和電腦聯結,達到更高的品質。
  • 基於CPLD的數字光端機的設計
    而由光纖作為傳輸介質的數字光端機,已經成為遠程監控應用中的首選。本文詳細介紹了數字光端機的架構與工作原理,完成基於CPLD的無壓縮2路視頻傳輸,2路音頻傳輸和一路反向數據傳輸的數字光端機的設計。實驗證明,系統工作性能穩定可靠,實時傳輸效果好,可廣泛應用於安防行業。
  • 基於SSM2603的立體聲數字音頻CODEC方案介紹
    利用SSM2603的立體聲數字音頻CODEC方案本文引用地址:http://www.eepw.com.cn/article/165993.htmADI公司的SSM2603是低功耗、高質量立體聲數字音頻CODEC,用於可攜式數字音頻應用,具有一組立體聲可編程增益放大器
  • 工程師用STM32F4造出最小音頻合成器
    Noise Nugget是一款緊湊型數字合成器,基於180MHz Cortex-M4和帶耳機放大器的高品質音頻DAC。我在這個項目中的目標是創造一個音頻合成的「瑞士軍刀」。 在最小和最便宜的板上包裝最大功能。
  • RME 發布小巧而實用的 Digiface USB ADAT / SPDIF 光纖盒音頻接口
    Digiface USB 光纖盒是一款小巧輕便的音頻接口(只有 220 g),它可以傳輸 SPDIF 和 ADAT 格式的數字音頻數據到 Windows
  • Tascam 宣布新的 DR-X 系列數字錄音機兼 USB 音頻接口
    DR-40X DR-40X 集成了單向立體聲話筒,可調節成 A/B 或 X/Y 配置,一對 XLR/1/4 英寸組合輸入,內置針對電容話筒的幻象電源,整合了 4軌能力,還有有線遙控,這讓它成為了單反視頻,音樂錄音,聲音設計等的方便工具,是攝像師、配音藝術家、創作歌手和播客的完美選擇。
  • SPDIF接口 S/PDIF光纖數字音頻接口
    導讀:近日,有很多小夥伴反應,家裡一些電子設備上標有SPDIF字樣的接口,然而卻不懂這個接口有什麼用,是用來做什麼的。下面,關於SPDIF接口和S/PDIF光纖數字音頻接口的詳細應用及使用技巧,讓小編細細道來。
  • 音頻接口知多少?科普市面主流音頻接口
    ,connecctor):不同的音頻標準都需要定義各自的的硬體接口標準,硬體接口定義了電子設備之間連接的物理特性,包括傳輸的信號頻率、強度,以及相應連線的類型、數量,還包括插頭、插座的機械結構設計。常見的數字音頻接口1、S/PDIF  S/PDIF(Sony/Philips Digital Interface,索尼和飛利浦數字接口)是由SONY公司與PHILIPS公司聯合制定的一種數字音頻輸出接口。
  • 基於EM8620的IPTV機頂盒設計
    機頂盒不同於通用計算機,他是一個嵌入式系統,低成本、低功耗和穩定性是硬體設計要遵循的原則,一些早期的iptv機頂盒設計方案採用了基於intel的高性能通用處理器架構,雖然性能很好,但是在功耗和成本方面最終很難被市場和運營商認可。
  • 常見音頻接口科普
    簡單來說,音頻接口是連接麥克風和其他聲源與計算機的設備,其在模擬和數位訊號之間起到了橋梁連接的作用。音頻接口通常與前置麥克風、線路輸入和其他一系列的輸入設備配合使用。2.5mm接頭在手機類便攜輕薄型產品上比較常見,因為接口可以做的很小;3.5mm接口在PC類產品以及家用設備上比較常見,也是我們最常見到的接口類型;6.22mm接頭是為了提高接觸面以及耐用度設計的模擬接頭,常見於監聽等專業音頻設備上。
  • 新手小白必讀 3分鐘看懂常見數字音頻接口
    關於數字音頻接口,比較常見的有同軸和光纖接口,此外還有AES/EBU和S/PDIF等;那麼接下來,我們先介紹一下同軸接口。同軸接口同軸接口分為兩種,一種是RCA同軸接口,另一種是BNC同軸接口。前者的外觀設計與模擬RCA接口沒有任何區別,而後者則與我們在電視機上常見的信號接口有點類似,而且還增加了鎖緊設計。
  • 基於CPLD的串並轉換和高速USB通信設計
    後者為隨機信號,它不是周期信號,可用數字濾波方法予以消弱或濾除。所謂數字濾波,就是通過一定的計算或判斷程序來減少幹擾信號在有用信號中的比重,故實際上它是一種軟體濾波。2.1 傳感器信號濾波由於要對傳感器信號進行數字濾波,CPLD要引入時鐘信號。因而我們對CPLD定義一輸入端clki,作為數字濾波器的計數脈衝輸入端。clki由單片機定時器1定時產生500Hz脈衝。以一路為例,泵衝信號濾波部分如圖1所示。摘 要:CPLD可編程技術具有功能集成度高、設計靈活、開發周期短、成本低等特點。
  • iPhone 7音頻技術解讀:AirPods無線耳機和立體聲揚聲器
    ;Plus這次終於取消了3.5mm音頻接口,改為Lightning接口。用戶如果想用3.5mm接口耳機,可以使用轉換器,蘋果將附送轉接頭。具體解讀可以參見《iPhone 7的音頻革命:Lightning真的會取代3.5mm音頻接口嗎?》。
  • 實現比特完美(Bit-Perfect) 的USB音頻
    採用USB接口來確保高品質音頻傳輸到外部設備是一種常用方法。由於使用者只需要把設備插入到預裝了驅動程序的通用接口即可,因此其對於音頻應用極富吸引力。儘管有這些優勢,使用USB音頻類時仍然需要對系統設計進行明智的選擇,以確保傳送音頻流時不會發生錯誤或更加糟糕的頻率失配。這篇文章《選擇USB音頻MCU須小心:來自測試臺的可怕故事》給出了幾個有趣的故障案例。
  • 基於stm32f4的三維旋轉顯示平臺
    本文引用地址:http://www.eepw.com.cn/article/201609/296520.htm  本作品搭建了基於stm32f4的三維旋轉顯示平臺,它的顯示原理屬於三維顯示中的體三維顯示一類。它是通過適當方式來激勵位於透明顯示體內的物質,利用可見輻射光的產生三維體像素。當體積內許多方位的物質都被激勵後,便能形成由許多分散的體像素在三維空間內構成三維圖像。
  • 數字音頻接口入門
    主流數字接口:  什麼是S/PDIF?  S/PDIF(Sony/Philips Digital Interface,索尼和飛利浦數字接口)是由SONY公司與PHILIPS公司聯合制定的一種數字音頻輸出接口。
  • 常見音頻接口匯總
    6.3mm的「大三芯」插頭可用來傳輸平衡信號或非平衡立體聲信號,也就是說它可以和我們後面要講的XLR平衡接口一樣,能夠傳輸平衡信號,但因製作這樣的平衡線成本比較高,所以一般只用在高檔專業音頻設備上。二芯6.3mm TRS電吉他線當然,既然能加芯,那也可以減芯。
  • USB IF發布USB音頻設備規範3.0版本 3.5mm耳機接口進入倒計時
    本周二USB開發者論壇(USB -IF)正式發布了USB音頻設備規範3.0版本( USB Audio Device Class 3.0 Specification
  • 最全的音頻接口科普在這裡
    還可以通過音頻輸出接口,連接功放、外接喇叭。簡單來說,音頻接口是連接麥克風和其他聲源與計算機的設備,其在模擬和數位訊號之間起到了橋梁連接的作用。音頻接口通常與前置麥克風、線路輸入和其他一系列的輸入設備配合使用。
  • 最具性價比的高品質USB麥克風-鋼鐵俠UBER
    最具性價比的高品質USB麥克風-鋼鐵俠UBER USB麥克風確實是很方便,但是對於很多專業人士來說,它們似乎缺乏一些專業性,要麼看起來很廉價