原創(chuàng)聲明:
本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
PGL22G/PGL12G
1. 實(shí)驗(yàn)簡(jiǎn)介
在其他實(shí)驗(yàn)中我們已經(jīng)完成了單獨(dú)的SD卡讀寫(xiě)和音頻模塊的錄音播放,本實(shí)驗(yàn)通過(guò)搜索SD卡中WAV音樂(lè)文件,然后送到音頻模塊播放,完成一個(gè)簡(jiǎn)單音樂(lè)播放器的功能。
2. 實(shí)驗(yàn)原理
本實(shí)驗(yàn)一個(gè)關(guān)鍵是在沒(méi)有文件系統(tǒng)的情況下,搜索SD卡每個(gè)扇區(qū)的內(nèi)容,匹配出WAV文件,這里有一個(gè)假設(shè):假設(shè)每一個(gè)文件都是從一個(gè)扇區(qū)第一個(gè)字節(jié)開(kāi)始而且文件是連續(xù)存儲(chǔ)的,經(jīng)過(guò)大量實(shí)驗(yàn),發(fā)現(xiàn)FAT32文件格式中的文件確實(shí)如此。
WAV文件格式
大部分的文件都有文件頭,WAV也不例外,我們通過(guò)分析SD卡一個(gè)扇區(qū)的前幾個(gè)字節(jié),判斷這個(gè)文件是否為WAV文件。
WAV文件作為多媒體中使用的聲波文件格式之一,它是以RIFF格式為標(biāo)準(zhǔn)的。RIFF是英文Resource Interchange File Format的縮寫(xiě),每個(gè)WAV文件的頭四個(gè)字節(jié)便是“RIFF”,所以本實(shí)驗(yàn)就簡(jiǎn)單的以每個(gè)扇區(qū)的前4個(gè)字節(jié)是否為“RIFF”判斷該文件是否為WAV文件,緊接著4個(gè)字節(jié)表示文件的大小,這樣我們就可以確定要讀取的數(shù)據(jù)量。WAV文件頭大小是88字節(jié),在播放時(shí)要把前88個(gè)字節(jié)的文件頭去掉。

3. 程序設(shè)計(jì)
例程中通過(guò)wav_read搜尋SD卡中的WAV文件,并將WAV文件讀取出來(lái)寫(xiě)入FIFO,最后再?gòu)腇IFO中將數(shù)據(jù)輸出并寫(xiě)入音頻模塊。

由于在前面的例程中已經(jīng)講過(guò)其他模塊的原理及使用這里不再贅述,僅說(shuō)明wav_read模塊。
wav_read模塊完成了從SD卡中搜索wav文件,讀取wav文件,狀態(tài)機(jī)如下,如果有搜索請(qǐng)求(按鍵按下),則進(jìn)入搜索狀態(tài)“S_FIND”,如果搜索到WAV文件,進(jìn)入“S_PLAY_WAIT”狀態(tài),檢查FIFO的剩余空間是否夠512個(gè)字節(jié),如果有512個(gè)字節(jié)空間,就進(jìn)入“S_PLAY”狀態(tài)讀取wav的一個(gè)扇區(qū)內(nèi)容。

在程序設(shè)計(jì)中,搜尋SD卡里圖片的文件頭是按每8個(gè)扇區(qū)地址(4K字節(jié))搜尋一次的形式操作,所以在一次搜尋結(jié)束后,下一次搜尋時(shí)需要將地址左移3位對(duì)齊以保證下一次搜尋的地址和圖片在SD卡中存儲(chǔ)的地址一致。

說(shuō)明:因?yàn)镾D卡格式化的時(shí)候按最小單元4K格式化,音樂(lè)文件的頭文件一般都是在SD卡的4K分區(qū)的起始位置開(kāi)始放置。
wav_read模塊的管腳說(shuō)明:
信號(hào)名稱 | 方向 | 說(shuō)明 |
clk | in | 時(shí)鐘輸入 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
ready | out | 空閑狀態(tài)指示 |
find | in | 搜索播放請(qǐng)求 |
sd_init_done | in | sd卡初始化完成 |
state_code | out | 狀態(tài)碼0,表示sd還在初始化1,sd卡初始化完成,等待按鍵按下2,正在搜索WAV文件3,找到WAV文件,正在播放 |
sd_sec_read | out | sd卡讀請(qǐng)求 |
sd_sec_read_addr | out | sd卡讀請(qǐng)求扇區(qū)地址 |
sd_sec_read_data | in | sd卡讀到的數(shù)據(jù) |
sd_sec_read_data_valid | in | sd卡讀數(shù)據(jù)有效 |
sd_sec_read_end | in | sd卡讀請(qǐng)求完成 |
fifo_wr_cnt | in | fifo寫(xiě)端口已經(jīng)使用量 |
wav_data_wr_en | out | wav文件寫(xiě)使能 |
wav_data | out | wav文件的音頻數(shù)據(jù) |
4. 實(shí)驗(yàn)現(xiàn)象
1)格式化sd卡(fat32格式),sd卡必須是2.0以上的版本(容量大于4G)

2)我們已經(jīng)在demo的目錄下為大家準(zhǔn)備了一下的2個(gè)wav文件,把wav格式文件放到sd卡中,注意:這里的wav文件是立體聲雙聲道,48K采樣率,16bit的音頻文件。

3)將準(zhǔn)備好的sd卡注入開(kāi)發(fā)板的sd卡槽(sd卡不能帶電插拔),音頻模塊接開(kāi)發(fā)板J9擴(kuò)展口,上電,下載實(shí)驗(yàn)程序,等待LED1滅、LED2、LED3、LED4亮(4'b0001)時(shí),按下KEY2,這個(gè)時(shí)候等待LED1亮、LED2滅、LED3、LED4亮(4'b0010),表示正在搜索wav文件,如果找到LED1、LED2滅、LED3、LED4亮,這時(shí)候就可以聽(tīng)到音樂(lè)了。
-
FPGA
+關(guān)注
關(guān)注
1642文章
21920瀏覽量
612052 -
音頻
+關(guān)注
關(guān)注
29文章
2995瀏覽量
82820 -
SD
+關(guān)注
關(guān)注
1文章
165瀏覽量
34218 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5389瀏覽量
100932 -
紫光同創(chuàng)
+關(guān)注
關(guān)注
5文章
91瀏覽量
27819
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第八章】SD卡讀寫(xiě)實(shí)驗(yàn)

【紫光同創(chuàng)國(guó)產(chǎn)FPGA教程】【第十四章】SD卡讀取BMP圖片顯示例程

2024新品|紫光同創(chuàng)盤(pán)古系列FPGA開(kāi)發(fā)板套件,100%國(guó)產(chǎn)化方案
國(guó)產(chǎn)FPGA介紹-紫光同創(chuàng)
紫光同創(chuàng)FPGA有哪些型號(hào)
【國(guó)產(chǎn)FPGA必備教程】——紫光同創(chuàng)FPGA圖像視頻教程,適用于小眼睛FPGA盤(pán)古全系列開(kāi)發(fā)板
明德?lián)P視頻分享點(diǎn)撥FPGA課程---第十二章??學(xué)習(xí)自檢方法
紫光同創(chuàng)簡(jiǎn)介
正點(diǎn)原子開(kāi)拓者FPGA開(kāi)發(fā)板資料連載第四十二章 音樂(lè)播放器實(shí)驗(yàn)
紫光同創(chuàng)FPGA開(kāi)發(fā)套件,高性能國(guó)產(chǎn)FPGA方案
國(guó)家金卡工程第十二次全國(guó)工作會(huì)在京召開(kāi)
【正點(diǎn)原子Linux連載】第十二章官方SDK移植試驗(yàn)-摘自【正點(diǎn)原子】I.MX6U嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)指南V1.0

評(píng)論