轉:基於iMXRT1052 快速實現7.1聲道FLAC播放器
本文介紹了採用飛凌嵌入式FET1052-C核心板快速的實現7.1聲道FLAC播放器。核心板CPU採用i.MX RT1052,具備528MHz的主頻,其Arm Cortex-M7核心支援三個SAIs和SAI1有四個傳輸(TX)資料線,支援7.1環繞聲資料傳輸。CPU的高效能和四線SAI為本方案的實現提供支援。
i.MX RT1052是NXP i.MX RT1050系列跨界處理器中價效比較高的一款,所謂跨界指的是其兼具MPU的高效能和MCU的低功耗與實時性。
1、i.MX RT1052 SAI特性介紹
•具有獨立位時鐘和幀同步的傳送器,支援四條資料線。
•接收器與獨立位時鐘和幀同步,支援四資料線。
•每個資料線支援最大32字的幀大小。
•字大小從8位到32位可程式設計。
•幀的第一個字和其餘字大小分別可配置。
•每個傳輸和接收資料線支援非同步32×32位FIFO。
•支援在FIFO錯誤後自動重啟,無需軟體干預。
•支援將8位和16位資料打包到每個32位FIFO字中。
•支援將多資料線FIFOs組合成單資料線FIFO。
2、FLAC解碼
FLAC(Free Lossless Audio Codec)是一種類似於MP3但無損的音訊格式,這意味著FLAC中的音訊壓縮沒有任何質量損失。
我們所說的FLAC是自由(free)的不僅僅意味著你可以不花錢而得到它。更重要的是FLAC的檔案格式是對公眾完全開放的,你可以以任何目的使用它(FLAC 專案只FLAC保留維護 FLAC 格式規格和確認相容特性的權利),FLAC的檔案格式和編碼/解碼的實現方式都不受任何已知專利的限制。還有,所有的原始碼都在開放原始碼的授權方式下可以得到。它是第一個真正開放和免費無損音訊格式。
八個頻道分配是:前左、前右、前中、LFE、後左、後右、左、右。
FLAC在i.MX RT1052上的解碼完全是通過軟體實現的。
3、方案實現
3.1硬體實現原理
圖1 7.1聲道系統架構
RT1052核心板從SD卡和USB解碼FLAC檔案並將資料傳輸到SAI1, SAI1有四條傳輸資料線(一條資料線包含兩個資料通道)。然後,Codec晶片CS42448 獲取4個數據線和時鐘來處理資料並使用DACs向後級功放傳輸8個聲道的模擬音訊訊號。
筆者帶著大家來熟悉使用PINMUX表選擇核心板上的引腳,用於製作原理圖。
首先開啟“**_PINMUX.xlsx”檔案,表頭中Pin Name是引腳的名稱,用這個名字可以從i.MX RT1052 CPU手冊中找到關於引腳的詳細說明;Coords是CPU的球號座標;Alt0~7是引腳的8種功能描述。
那麼我們以本文中最關鍵的SAI1功能做示例,從表中可以找到支援4個數據線的SAI1,如下圖2:
圖2
根據這些CPU球號,就可以在飛凌提供的OK1052-C底板原理圖中找到這些引腳在底板聯結器上的位置(如圖3),不過可以發現,這幾個引腳已經被QSPI所佔用,而QSPI在核心板上用做了QSPI的ROM,所以不建議使用這幾個引腳了。
圖3
換一組其它引腳,可以找到另外一組支援4 TX線的SAI1引腳,如下圖:
圖4
同樣的方法,可以在OK1052-C底板原理圖中找到引腳所在位置,通過圖5可以看出,目前飛凌預設配置的是LCD的功能,但是本方案用不到LCD,可以將其用於SAI1的。
圖5
按照表格中引腳功能名稱,修改原理圖示號如下:
圖6
其它引腳的配置也是同樣的方法,如果所用功能和飛凌OK1052-C底板一致的,可以不修改其功能引腳位置,這樣也便於程式的修改、開發。
3.2軟體實現流程
S1、CPU、功能引腳和時鐘初始化,如USDHC、USB、IIC和SAI。
S2、看門狗初始化,以防止程式錯誤。
S3、使用IIC實現CS42448編解碼器的初始化和配置。
S4、建立和初始化一個新的FLAC流解碼器。
S5、檢測FLAC檔案的資訊以配置SAI TX。
S6、解碼過程中的音訊回放。
S7、當一個音訊檔案結束,下一個檔案開始(到步驟4)。如果SD卡上的所有檔案都播放完成後,從頭播放音訊。
4、附件說明
4.1:《Sch》資料夾,參考原理圖原始檔。
4.2:《CDB42448_DB2.pdf》CS42448評估板參考手冊
4.3:《CS42448_F5.pdf》CS42448晶片手冊
4.4:《FET1052-C&FLAC7.1player_PINMUX.xlsx》FET1052-C核心板引腳配置表