




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 嵌入式系統(tǒng)原理 課程設(shè)計(jì)說(shuō)明書(shū)題 目: 利用STM32實(shí)現(xiàn)MP3播放器 院 (系): 信息與電氣工程學(xué)院 專(zhuān)業(yè)班級(jí): 通信二班 學(xué)生姓名: 周波 學(xué) 號(hào): 0904040209 指導(dǎo)教師: 羅 朝 輝 20 12 年 2 月 30 日至20 12 年 3 月 23 日 STM32芯片應(yīng)用 實(shí)驗(yàn)設(shè)計(jì)任務(wù)書(shū)一、設(shè)計(jì)題目利用STM32處理器實(shí)現(xiàn)簡(jiǎn)易MP3 Player的設(shè)計(jì)二、設(shè)計(jì)主要內(nèi)容(1) 廣泛查找文獻(xiàn)資料,認(rèn)真研究,反復(fù)論證,精心設(shè)計(jì)技術(shù)方案。(2) 較為深入的掌握ARM處理器的體系結(jié)構(gòu)、指令系統(tǒng)、編程方法,初步了解ARM應(yīng)用系統(tǒng)的軟硬件開(kāi)發(fā)方法及手段,較熟練地掌握ARM處理器幾種重要的片
2、內(nèi)外設(shè)(定時(shí)器、PLL、I2C、RTC等)的基本原理及編程方法,初步掌握ARM處理器外圍電路的擴(kuò)展方法。(3) 了解STM32、SPI接口、SD卡、TIMER、中斷、FAT文件系統(tǒng)、USB等的應(yīng)用。(4) 考慮簡(jiǎn)易聲波播放器、簡(jiǎn)易MP3播放器兩種方案實(shí)現(xiàn)。三、原始資料硬件資源:STM32系統(tǒng)板、用于ARM處理器的JTAG仿真器、PC機(jī)Pentium100以上。設(shè)計(jì)指導(dǎo)書(shū):STM32系統(tǒng)板配套光盤(pán)四、要求的設(shè)計(jì)成果(1)使用STM103V100評(píng)估板令計(jì)時(shí)器TIM4工作在PWM模式下,將wav格式的聲波文件從SD卡中讀出,由TIM4產(chǎn)生不同頻率的方波通過(guò)低通濾波器和放大器送喇叭實(shí)現(xiàn)與通過(guò)額外解碼
3、芯片實(shí)現(xiàn)。(2)撰寫(xiě)課程設(shè)計(jì)說(shuō)明書(shū),要求簡(jiǎn)潔、通順,格式規(guī)范,設(shè)計(jì)方案正確,實(shí)現(xiàn)技術(shù)路線明確,論述內(nèi)容完整、清楚、規(guī)范,數(shù)據(jù)、資料真實(shí)可靠,軟件程序運(yùn)行良好。(3)要求有完整的電路設(shè)計(jì)原理圖及軟件源代碼。五、進(jìn)程安排(1)第 1 天:任務(wù)布置及相關(guān)知識(shí)講解(2)第2-3天:資料查閱與方案制定(3)第4-8天:硬件設(shè)計(jì)、程序編制與調(diào)試階段(4)第 9 天:撰寫(xiě)設(shè)計(jì)報(bào)告六、主要參考資料1 田澤. 嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用實(shí)驗(yàn)教程. 北京航空航天工業(yè)大學(xué)出版社,2005.2 郭榮佐,王霖. 嵌入式系統(tǒng)原理.北京航空航天大學(xué)出版社,.2008.3 周根林.嵌入式系統(tǒng)原理與應(yīng)用.南京大學(xué)出版社, 2006.
4、4 譚浩強(qiáng). C語(yǔ)言程序設(shè)計(jì)(第2版).清華大學(xué)出版社,20085 丁峰. ARM系統(tǒng)開(kāi)發(fā)從實(shí)踐到提高. 中國(guó)電力出版社,2007.指導(dǎo)教師(簽名): 20 年 月 日第一種方案是簡(jiǎn)易聲波播放器,僅使用STM103V100評(píng)估板,令計(jì)時(shí)器TIM4工作在PWM模式下,將wav格式的聲波文件從SD卡中讀出,由TIM4產(chǎn)生不同頻率的方波通過(guò)低通濾波器和放大器送喇叭,如圖1所示;第二種方案則是簡(jiǎn)易MP3播放器,還需要使用額外的解碼芯片,將MP3格式的文件從SD卡讀出,然后送解碼芯片解碼播放,如圖2所示。本節(jié)將先介紹SD卡、FAT16文件格式、VS1003編解碼器等關(guān)鍵部分,然后再分別給出兩種設(shè)計(jì)方案的
5、軟件設(shè)計(jì)。圖1 簡(jiǎn)易聲波播放器方案圖2 簡(jiǎn)易MP3 Player方案1 SD卡的結(jié)構(gòu)及讀寫(xiě)方法STM103V100評(píng)估板有SD連接器,其使用SPI總線與STM32處理器連接,如圖3所示。圖3 SD連接器與STM32處理器SPI連接圖SD卡(Secure Digital Memory Card)是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種新型存儲(chǔ)器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式。本小節(jié)僅簡(jiǎn)要介紹在SPI模式下,STM32處理器如何讀寫(xiě)SD卡,如果讀者如希望詳細(xì)了解SD卡,可以參考相關(guān)資料。SD卡內(nèi)部結(jié)構(gòu)及引腳如圖4所示。圖4 S
6、D卡內(nèi)部結(jié)構(gòu)及引腳SD卡主要引腳和功能為:n CLK:時(shí)鐘信號(hào),每個(gè)時(shí)鐘周期傳輸一個(gè)命令或數(shù)據(jù)位,頻率可在025MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生025MHz的頻率;n CMD:雙向命令和回復(fù)線,命令是一次主機(jī)到從卡操作的開(kāi)始,命令可以是從主機(jī)到單卡尋址,也可以是到所有卡;回復(fù)是對(duì)之前命令的回答,回復(fù)可以來(lái)自單卡或所有卡;n
7、0; DAT03:數(shù)據(jù)線,數(shù)據(jù)可以從卡傳向主機(jī)也可以從主機(jī)傳向卡。 SD卡以命令形式來(lái)控制SD卡的讀寫(xiě)等操作??筛鶕?jù)命令對(duì)多塊或單塊進(jìn)行讀寫(xiě)操作。在SPI模式下其命令由6個(gè)字節(jié)構(gòu)成,其中高位在前。SD卡命令的格式如表1所示,其中相關(guān)參數(shù)可以查閱SD卡規(guī)范。-表1 SPI命令格式Byte 1/ Byte2-5/Byte 67,6,5,0/31,0/7,00,1/Command/Command Argument/CRC,1-下面分別給出讀寫(xiě)SD卡的兩個(gè)函數(shù):n
8、0; 讀取SD卡函數(shù)u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);/* Function Name : MSD_ReadBlock* Description : Reads a block of data from the MSD.* Input : - pBuffer : pointer to the buffer that recei
9、ves the data read* from the MSD.* - ReadAddr : MSD's internal address to read fr
10、om.* - NumByteToRead : number of bytes to read from the MSD.* Output : None* Return : The MSD Response
11、: - MSD_RESPONSE_FAILURE: Sequence failed* - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead) u32 i = 0; u8 rvalue = MSD_RESPONSE
12、_FAILURE; /* MSD chip select low */ MSD_CS_LOW(); /* Send CMD17 (MSD_READ_SINGLE_BLOCK) to read one block */ MSD_SendCmd(MSD_READ_SINGLE_BLOCK, ReadAddr, 0xFF); /* Check if the MSD acknowledged the read block command: R1 response (0x00: no errors) */ if (!MSD
13、_GetResponse(MSD_RESPONSE_NO_ERROR) /* Now look for the data token to signify the start of the data */ if (!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ) /* Read the MSD block data : read NumByteToRead da
14、ta */ for (i = 0; i < NumByteToRead; i+) /* Save the received data */ *pBuffer = MSD_ReadByte(); /* Point to t
15、he next location where the byte read will be saved */ pBuffer+; /* Get CRC bytes (not really needed by us, but required by MSD) */ MSD_ReadByte();
16、60; MSD_ReadByte(); /* Set response value to success */ rvalue = MSD_RESPONSE_NO_ERROR; /* MSD chip select high */ MSD_CS_HIGH(); /* Send dummy byte: 8 Clock pulses of delay */ MSD_Wri
17、teByte(DUMMY); /* Returns the reponse */ return rvalue;n 寫(xiě)讀取SD卡函數(shù)u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite) /* Function Name : MSD_WriteBlock* Description : Writes a block on the MSD* Input
18、0; : - pBuffer : pointer to the buffer containing the data to be* written on the MSD.*
19、0; - WriteAddr : address to write on.* - NumByteToWrite: number of data to write* Output : None* Return
20、; : The MSD Response: - MSD_RESPONSE_FAILURE: Sequence failed* - MSD_RESPONSE_NO_ERROR: Sequence succeed */u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAdd
21、r, u16 NumByteToWrite) u32 i = 0; u8 rvalue = MSD_RESPONSE_FAILURE; /* MSD chip select low */ MSD_CS_LOW(); /* Send CMD24 (MSD_WRITE_BLOCK) to write multiple block */ MSD_SendCmd(MSD_WRITE_BLOCK, WriteAddr, 0xFF); /* Check if the MSD acknowledged the write b
22、lock command: R1 response (0x00: no errors) */ if (!MSD_GetResponse(MSD_RESPONSE_NO_ERROR) /* Send a dummy byte */ MSD_WriteByte(DUMMY); /* Send the data token to signify the start of the data */ MSD_WriteByte(0xFE)
23、; /* Write the block data to MSD : write count data by block */ for (i = 0; i < NumByteToWrite; i+) /* Send the pointed byte */ MSD_WriteByte(*pBuffer);
24、 /* Point to the next location where the byte read will be saved */ pBuffer+; /* Put CRC bytes (not really needed by us, but required by MSD) */ MSD_ReadByte(); MSD_ReadByte(); /*
25、 Read data response */ if (MSD_GetDataResponse() = MSD_DATA_OK) rvalue = MSD_RESPONSE_NO_ERROR; /* MSD chip select high */ MSD_CS_HIGH(); /* Send dummy byte: 8 Clock pulses of delay */
26、; MSD_WriteByte(DUMMY); /* Returns the reponse */ return rvalue; 2 FAT16文件系統(tǒng)簡(jiǎn)介 SD卡如果采用FAT16文件格式,按照其不同的特點(diǎn)和作用大致可分為5 部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)和DATA區(qū)。由于SD卡一般不做引導(dǎo)盤(pán),一般也不分區(qū),因此通常無(wú)MBR區(qū),直接從DBR區(qū)開(kāi)始。下面對(duì)后面四個(gè)區(qū)分別作簡(jiǎn)介:n DBR區(qū) &
27、#160; 內(nèi)容為系統(tǒng)引導(dǎo)記錄,它包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(Bios Parameter Block)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時(shí),判斷本分區(qū)根目錄是否有操作系統(tǒng)引導(dǎo)文件,如果有則將其讀入內(nèi)存,并把控制權(quán)交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、根目錄大小、FAT個(gè)數(shù),分配單元大小等重要參數(shù)。本系統(tǒng)采用的DBR結(jié)構(gòu)為:typedef _packed struct/* 由于Cortex-M3內(nèi)核默認(rèn)以對(duì)齊方式訪問(wèn),因此可能導(dǎo)致結(jié)構(gòu)體元素之間有“空隙”,讀出的結(jié)構(gòu)體元素有誤,因此需要加上關(guān)鍵字_packed,強(qiáng)制其以壓
28、縮方式存儲(chǔ)結(jié)構(gòu)體。這樣該結(jié)構(gòu)體在內(nèi)存空間上是一片連續(xù)的空間,不存在“空隙”情況。其它地方同理 */ u8 BS_jmpBoot3; /ofs:0.典型的如:0xEB,0x3E,0x90 u8 BS_OEMName8; /ofs:3.典型的如:“MSWIN4.1”
29、 u16 BPB_BytesPerSec; /ofs:11.每扇區(qū)字節(jié)數(shù) u8 BPB_SecPerClus; /ofs:13.每簇扇區(qū)數(shù) u16
30、0; BPB_RsvdSecCnt; /ofs:14.保留扇區(qū)數(shù),從DBR 到FAT 的扇區(qū)數(shù) u8 BPB_NumFATs; /ofs:16.FAT 的個(gè)數(shù),通常為2 u16 &
31、#160; BPB_RootEntCnt; /ofs:17.根目錄項(xiàng)數(shù) u16 BPB_TotSec16; /ofs:19.分區(qū)總扇區(qū)數(shù)(<32M 時(shí)用) u8
32、; BPB_Media; /ofs:21.分區(qū)介質(zhì)標(biāo)識(shí),SD卡一般用0xF8 u16 BPB_FATSz16; /ofs:22.每個(gè)FAT 占的扇區(qū)數(shù)
33、160; u16 BPB_SecPerTrk; /ofs:24.每道扇區(qū)數(shù),對(duì)于SD卡無(wú)意義 u16 BPB_NumHeads; /ofs:26.磁頭數(shù),對(duì)于SD卡無(wú)意義 u3
34、2 BPB_HiddSec; /ofs:28.隱藏扇區(qū)數(shù),從MBR到DBR的扇區(qū)數(shù) u32 BPB_TotSec32; /ofs:32.分區(qū)總扇區(qū)數(shù)(32M時(shí)用) u8
35、0; BS_DrvNum; /ofs:36.軟盤(pán):0x00,硬盤(pán):0x80,SD卡無(wú)意義 u8 BS_Reservedl; /ofs:37.保留 u8 &
36、#160; BS_BootSig; /ofs:38.擴(kuò)展引導(dǎo)標(biāo)記:0x29,通常對(duì)于SD卡無(wú)意義 u32 BS_VolID; /ofs:39.盤(pán)序列號(hào) u8
37、; BS_VolLab11; /ofs:43.如“Msdos ” u8 BS_FilSysType8; /ofs:54.“FAT16 ” u8 ExecutableCode448;
38、; /ofs:62.引導(dǎo)代碼 u8 ExecutableMarker2; /ofs:510.結(jié)束標(biāo)識(shí):0xAA55 FAT_BPB;n FAT區(qū) 該區(qū)內(nèi)容為文件分配表,F(xiàn)AT16文件系統(tǒng)進(jìn)行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通過(guò)查
39、文件分配表可以得知任一簇的使用情況。對(duì)于FAT16來(lái)說(shuō),F(xiàn)AT表每項(xiàng)占用兩個(gè)字節(jié)。FAT表的第一項(xiàng)通常為FFF8H。對(duì)于其它項(xiàng),若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個(gè)簇,F(xiàn)FF0H-FFF6H之間為保留值;其它值則指示下一個(gè)簇的簇號(hào)。n FDT區(qū) 該區(qū)的內(nèi)容為文件目錄表,F(xiàn)AT文件系統(tǒng)的一個(gè)重要思想是把目錄(文件夾)當(dāng)作一個(gè)特殊的文件來(lái)處理,F(xiàn)AT32甚至將根目錄當(dāng)作文件處理。FAT分區(qū)中所有目錄
40、文件,實(shí)際上可以看作是一個(gè)存放其它文件(文件夾)入口參數(shù)的數(shù)據(jù)表。因此,目錄占用空間的大小并不等同于其下所有數(shù)據(jù)的大小,但也不等于0,通常是占很小的空間。其具體的存儲(chǔ)原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區(qū)、多少字節(jié);系統(tǒng)都會(huì)以32個(gè)字節(jié)為單位,進(jìn)行目錄文件所占簇的分配。本系統(tǒng)目錄項(xiàng)使用的結(jié)構(gòu)體如下:typedef _packed structu8 FileName8;
41、60; /ofs:0.文件名u8 ExtName3; /ofs:8.擴(kuò)展名u8 Attribute;
42、; /ofs:11.文件屬性。典型值:存檔(0x20)、卷標(biāo)(0x08)u8 Reserved10; /ofs:21.保留u16 Time;
43、160; /ofs:22.時(shí)間u16 Data; /ofs:24.日期u16
44、0; StartClus; /ofs:26.開(kāi)始簇號(hào)u32 FileLength;
45、 /ofs:28.文件長(zhǎng)度 DIR; 由于篇幅關(guān)系,這里不能對(duì)上面各字段進(jìn)行一一介紹。本系統(tǒng)支持長(zhǎng)文件名和漢字顯示,如果使用短文件名,則以ASCII編碼;當(dāng)文件名超過(guò)8個(gè)字節(jié),擴(kuò)展名超過(guò)3字節(jié)時(shí),就以長(zhǎng)文件名的形式存儲(chǔ),長(zhǎng)文件名中的字符采用UNICODE形式編碼,每個(gè)字符占據(jù)2個(gè)字節(jié)的空間,其目錄項(xiàng)中偏移為11的字節(jié)即Attribute字段為0FH。在存儲(chǔ)時(shí)將長(zhǎng)文件名以13個(gè)字符為單位進(jìn)行切割,每一組占據(jù)一個(gè)目錄項(xiàng),所以可能一個(gè)文件需要多個(gè)目錄項(xiàng),這時(shí)長(zhǎng)文件名的各個(gè)目錄項(xiàng)按倒序排列在目錄表中,以防與其他文件名混淆。本系統(tǒng)采用串口作為輸
46、入輸出接口,通過(guò)在PC的超級(jí)終端中輸入命令來(lái)對(duì)其進(jìn)行控制,并在超級(jí)終端中顯示輸出的結(jié)果,如路徑、目錄列表、文件名等相關(guān)信息。超級(jí)終端輸入輸出的漢字以GB2312編碼、輸入輸出英文字符以ASCII編碼,而長(zhǎng)文件名以UNICODE編碼。因此需要將UNICODE編碼轉(zhuǎn)化為GB2312或ASCII編碼來(lái)和用戶交互。這里使用一張排序二維表,里面有7000多個(gè)漢字UNICODE編碼對(duì)應(yīng)的GB2312編碼。這里查找算法采用二分查找算法,大大提高了查找效率,這對(duì)于嵌入式應(yīng)用很關(guān)鍵。n DATA區(qū)
47、0; 該數(shù)據(jù)區(qū)存放文件的內(nèi)容,SD卡所占用的空間絕大部分為此部分。如果文件長(zhǎng)度大于一個(gè)簇的大小,需要多個(gè)簇存放該文件,這些放通過(guò)FAT鏈表串連起來(lái)。3 VS1003-MP3/WMA音頻編解碼器簡(jiǎn)介 VS1003是由芬蘭VLSI Solution Oy公司所設(shè)計(jì)的一款單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器,它包含一個(gè)高性能、自主產(chǎn)權(quán)的低功耗DSP處理器核VS_DSP4。該芯片內(nèi)部結(jié)構(gòu)如圖5所示,其特點(diǎn)如下:圖5 VS1003內(nèi)部結(jié)構(gòu)及引腳n
48、0; 可解碼MPEG 1和MPEG 2音頻層III(CBR+VBR+ABR)、WMA 4.0/4.1/7/8/9 5-384kbps 所有流文件;WAV(PCM+IMA AD-PCM),可產(chǎn)生MIDI/SP-MIDI 文件;n 可對(duì)話筒輸入或線路輸入的音頻信號(hào)進(jìn)行IMA ADPCM編碼;n 支持MP3和WAV流;n
49、0; 高音、低音控制;n 單時(shí)鐘操作(12.13MHz);n 內(nèi)部PLL鎖相環(huán)時(shí)鐘倍頻器;n 低功耗n 內(nèi)含高性能片上立體聲數(shù)模轉(zhuǎn)換器,兩聲道間無(wú)相位差;n
50、 內(nèi)含能驅(qū)動(dòng)30歐負(fù)載的耳機(jī)驅(qū)動(dòng)器;n 模擬、數(shù)字、I/O單獨(dú)供電;n 為用戶代碼和數(shù)據(jù)準(zhǔn)備了5.5KB片上RAM;n 串行的控制、數(shù)據(jù)接口;n 可被用作微處理器的從機(jī)
51、;n 特殊應(yīng)用的SPI Flash引導(dǎo);n 供調(diào)試用途的UART接口;n 新功能可以通過(guò)軟件和4個(gè)GPIO添加。 限于篇幅,這里不對(duì)VS1003芯片作詳細(xì)介紹,讀者有興趣可查閱相關(guān)資料及數(shù)據(jù)手冊(cè)。注意,VS1003可以作為一個(gè)微控制器的從機(jī),通過(guò)串行SPI接口來(lái)接收輸入的比特
52、流,輸入的比特流被解碼后,可以通過(guò)一個(gè)數(shù)字音量控制器到達(dá)一個(gè)18 位過(guò)采樣多位DAC。這樣利用一個(gè)VS1003芯片與STM32F103x處理器配合,STM32處理器讀取SD卡中的MP3文件,將其通過(guò)SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來(lái)控制VS1003即可以實(shí)現(xiàn)一個(gè)MP3 Player的原形設(shè)計(jì)。 2 FAT16文件系統(tǒng)簡(jiǎn)介 SD卡如果采用FAT16文件格式,按照其不同的特點(diǎn)和作用大致可分為5 部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)和DATA區(qū)。由于SD卡一般不做引導(dǎo)盤(pán),一般也不分區(qū),因此通
53、常無(wú)MBR區(qū),直接從DBR區(qū)開(kāi)始。下面對(duì)后面四個(gè)區(qū)分別作簡(jiǎn)介:n DBR區(qū) 內(nèi)容為系統(tǒng)引導(dǎo)記錄,它包括一個(gè)引導(dǎo)程序和一個(gè)被稱為BPB(Bios Parameter Block)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時(shí),判斷本分區(qū)根目錄是否有操作系統(tǒng)引導(dǎo)文件,如果有則將其讀入內(nèi)存,并把控制權(quán)交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、根目錄大小、FAT個(gè)數(shù),分配單元大小等重要參數(shù)。本系統(tǒng)采用的DBR結(jié)構(gòu)為:ty
54、pedef _packed struct/* 由于Cortex-M3內(nèi)核默認(rèn)以對(duì)齊方式訪問(wèn),因此可能導(dǎo)致結(jié)構(gòu)體元素之間有“空隙”,讀出的結(jié)構(gòu)體元素有誤,因此需要加上關(guān)鍵字_packed,強(qiáng)制其以壓縮方式存儲(chǔ)結(jié)構(gòu)體。這樣該結(jié)構(gòu)體在內(nèi)存空間上是一片連續(xù)的空間,不存在“空隙”情況。其它地方同理 */ u8 BS_jmpBoot3; /ofs:0.典型的如:0xEB,0x3E,0x90 &
55、#160; u8 BS_OEMName8; /ofs:3.典型的如:“MSWIN4.1” u16 BPB_BytesPerSec; /ofs:11.每扇區(qū)字節(jié)數(shù) u8 BPB_SecPerClus;
56、60; /ofs:13.每簇扇區(qū)數(shù) u16 BPB_RsvdSecCnt; /ofs:14.保留扇區(qū)數(shù),從DBR 到FAT 的扇區(qū)數(shù) u8 BPB_Nu
57、mFATs; /ofs:16.FAT 的個(gè)數(shù),通常為2 u16 BPB_RootEntCnt; /ofs:17.根目錄項(xiàng)數(shù) u16 BPB_TotSec16;
58、0; /ofs:19.分區(qū)總扇區(qū)數(shù)(<32M 時(shí)用) u8 BPB_Media; /ofs:21.分區(qū)介質(zhì)標(biāo)識(shí),SD卡一般用0xF8 u16 BPB_FATSz
59、16; /ofs:22.每個(gè)FAT 占的扇區(qū)數(shù) u16 BPB_SecPerTrk; /ofs:24.每道扇區(qū)數(shù),對(duì)于SD卡無(wú)意義 u16 &
60、#160; BPB_NumHeads; /ofs:26.磁頭數(shù),對(duì)于SD卡無(wú)意義 u32 BPB_HiddSec; /ofs:28.隱藏扇區(qū)數(shù),從MBR到DBR的扇區(qū)數(shù) u32 BPB_TotSec32;
61、0; /ofs:32.分區(qū)總扇區(qū)數(shù)(32M時(shí)用) u8 BS_DrvNum; /ofs:36.軟盤(pán):0x00,硬盤(pán):0x80,SD卡無(wú)意義 u8 BS_Reservedl;
62、160; /ofs:37.保留 u8 BS_BootSig; /ofs:38.擴(kuò)展引導(dǎo)標(biāo)記:0x29,通常對(duì)于SD卡無(wú)意義 u32 BS_VolID; &
63、#160; /ofs:39.盤(pán)序列號(hào) u8 BS_VolLab11; /ofs:43.如“Msdos ” u8 BS_FilSysType8; /ofs:54.“FAT16 ”
64、160; u8 ExecutableCode448; /ofs:62.引導(dǎo)代碼 u8 ExecutableMarker2; /ofs:510.結(jié)束標(biāo)識(shí):0xAA55 FAT_BPB;n
65、160; FAT區(qū) 該區(qū)內(nèi)容為文件分配表,F(xiàn)AT16文件系統(tǒng)進(jìn)行空間分配的最基本單位是簇。文件分配表反映了SD卡所有簇的使用情況,通過(guò)查文件分配表可以得知任一簇的使用情況。對(duì)于FAT16來(lái)說(shuō),F(xiàn)AT表每項(xiàng)占用兩個(gè)字節(jié)。FAT表的第一項(xiàng)通常為FFF8H。對(duì)于其它項(xiàng),若其值為0000H表示可用;FFF7H表示為壞簇;FFF8H-FFFFH之間表示該簇為某文件或目錄的最后一個(gè)簇,F(xiàn)FF0H-FFF6H之間為保留值;其它值則指示下一個(gè)簇的簇號(hào)。n
66、FDT區(qū) 該區(qū)的內(nèi)容為文件目錄表,F(xiàn)AT文件系統(tǒng)的一個(gè)重要思想是把目錄(文件夾)當(dāng)作一個(gè)特殊的文件來(lái)處理,F(xiàn)AT32甚至將根目錄當(dāng)作文件處理。FAT分區(qū)中所有目錄文件,實(shí)際上可以看作是一個(gè)存放其它文件(文件夾)入口參數(shù)的數(shù)據(jù)表。因此,目錄占用空間的大小并不等同于其下所有數(shù)據(jù)的大小,但也不等于0,通常是占很小的空間。其具體的存儲(chǔ)原理是:不管目錄文件所占空間為多少簇,一簇為多少扇區(qū)、多少字節(jié);系統(tǒng)都會(huì)以32個(gè)字節(jié)為單位,進(jìn)行目錄文件所占簇的分配。本系統(tǒng)目錄項(xiàng)使用的結(jié)構(gòu)體如下:typedef _packed structu8
67、160; FileName8; /ofs:0.文件名u8 ExtName3; /ofs:8.擴(kuò)展名u8
68、0; Attribute; /ofs:11.文件屬性。典型值:存檔(0x20)、卷標(biāo)(0x08)u8 Reserved10; /ofs
69、:21.保留u16 Time; /ofs:22.時(shí)間u16 Data;
70、 /ofs:24.日期u16 StartClus; /ofs:26.開(kāi)始簇號(hào)u32
71、 FileLength; /ofs:28.文件長(zhǎng)度 DIR; 由于篇幅關(guān)系,這里不能對(duì)上面各字段進(jìn)行一一介紹。本系統(tǒng)支持長(zhǎng)文件名和漢字顯示,如果使用短文件名,則以ASCII編碼;當(dāng)文件名超過(guò)8個(gè)字節(jié),擴(kuò)展名超過(guò)3字節(jié)時(shí),就以長(zhǎng)文件名的形式存儲(chǔ),長(zhǎng)文件名中的字符采用UNICODE形式編碼,每個(gè)字符占據(jù)2個(gè)字節(jié)的空間,其目錄項(xiàng)中偏移為11的字節(jié)即Attribute字段為
72、0FH。在存儲(chǔ)時(shí)將長(zhǎng)文件名以13個(gè)字符為單位進(jìn)行切割,每一組占據(jù)一個(gè)目錄項(xiàng),所以可能一個(gè)文件需要多個(gè)目錄項(xiàng),這時(shí)長(zhǎng)文件名的各個(gè)目錄項(xiàng)按倒序排列在目錄表中,以防與其他文件名混淆。本系統(tǒng)采用串口作為輸入輸出接口,通過(guò)在PC的超級(jí)終端中輸入命令來(lái)對(duì)其進(jìn)行控制,并在超級(jí)終端中顯示輸出的結(jié)果,如路徑、目錄列表、文件名等相關(guān)信息。超級(jí)終端輸入輸出的漢字以GB2312編碼、輸入輸出英文字符以ASCII編碼,而長(zhǎng)文件名以UNICODE編碼。因此需要將UNICODE編碼轉(zhuǎn)化為GB2312或ASCII編碼來(lái)和用戶交互。這里使用一張排序二維表,里面有7000多個(gè)漢字UNICODE編碼對(duì)應(yīng)的GB2312編碼。這里查找
73、算法采用二分查找算法,大大提高了查找效率,這對(duì)于嵌入式應(yīng)用很關(guān)鍵。n DATA區(qū) 該數(shù)據(jù)區(qū)存放文件的內(nèi)容,SD卡所占用的空間絕大部分為此部分。如果文件長(zhǎng)度大于一個(gè)簇的大小,需要多個(gè)簇存放該文件,這些放通過(guò)FAT鏈表串連起來(lái)。3 VS1003-MP3/WMA音頻編解碼器簡(jiǎn)介 VS1003是由芬蘭VLSI Solution Oy公司所設(shè)計(jì)的一款單片MP3/WMA/MIDI音頻解碼器和ADPCM編碼器,它包含一個(gè)高性能、自
74、主產(chǎn)權(quán)的低功耗DSP處理器核VS_DSP4。該芯片內(nèi)部結(jié)構(gòu)如圖5所示,其特點(diǎn)如下:圖5 VS1003內(nèi)部結(jié)構(gòu)及引腳n 可解碼MPEG 1和MPEG 2音頻層III(CBR+VBR+ABR)、WMA 4.0/4.1/7/8/9 5-384kbps 所有流文件;WAV(PCM+IMA AD-PCM),可產(chǎn)生MIDI/SP-MIDI 文件;n 可對(duì)話筒輸入或線路輸入的音頻信號(hào)進(jìn)行IMA ADPCM編碼;n
75、60; 支持MP3和WAV流;n 高音、低音控制;n 單時(shí)鐘操作(12.13MHz);n 內(nèi)部PLL鎖相環(huán)時(shí)鐘倍頻器;n 低功耗n&
76、#160; 內(nèi)含高性能片上立體聲數(shù)模轉(zhuǎn)換器,兩聲道間無(wú)相位差;n 內(nèi)含能驅(qū)動(dòng)30歐負(fù)載的耳機(jī)驅(qū)動(dòng)器;n 模擬、數(shù)字、I/O單獨(dú)供電;n 為用戶代碼和數(shù)據(jù)準(zhǔn)備了5.5KB片上RAM;n
77、; 串行的控制、數(shù)據(jù)接口;n 可被用作微處理器的從機(jī);n 特殊應(yīng)用的SPI Flash引導(dǎo);n 供調(diào)試用途的UART接口;n 新功能可以通過(guò)軟件和4個(gè)GPIO添加。
78、160; 限于篇幅,這里不對(duì)VS1003芯片作詳細(xì)介紹,讀者有興趣可查閱相關(guān)資料及數(shù)據(jù)手冊(cè)。注意,VS1003可以作為一個(gè)微控制器的從機(jī),通過(guò)串行SPI接口來(lái)接收輸入的比特流,輸入的比特流被解碼后,可以通過(guò)一個(gè)數(shù)字音量控制器到達(dá)一個(gè)18 位過(guò)采樣多位DAC。這樣利用一個(gè)VS1003芯片與STM32F103x處理器配合,STM32處理器讀取SD卡中的MP3文件,將其通過(guò)SPI接口送往VS1003芯片播放,然后再利用STM32F10X處理器的一些GPIO口來(lái)控制VS1003即可以實(shí)現(xiàn)一個(gè)MP3 Player的原形設(shè)計(jì)。 5 簡(jiǎn)易MP3 Player的設(shè)計(jì)與實(shí)現(xiàn)第4小節(jié)所介紹
79、的聲音播放器,是通過(guò)定時(shí)器TIM4產(chǎn)生不同頻率方波來(lái)產(chǎn)生聲音的,因此只適合播放wav聲波文件,其音質(zhì)也非常粗糙。如果希望播放MP3文件,并產(chǎn)生高品質(zhì)的聲音,則需要使用專(zhuān)用聲音解碼芯片,這將得到一個(gè)簡(jiǎn)易MP3 Player原型設(shè)計(jì)。5.1 硬件設(shè)計(jì) 如圖8所示,STM32F103x使用SPI2端口與VS1003芯片的SI、SO、SCLK連接;VS1003芯片的控制引腳xCS、xRESET、xDCS分別與STM32F103的PA1、PA0和PA2連接,低電平有效;VS1003的狀態(tài)引腳DREQ與STM32F103處理器的PA3連接,低電平表示需要送數(shù)據(jù),高電平表
80、示正在處理數(shù)據(jù)。 讀者如果沒(méi)有條件制作硬件,可以使用一塊VS1003的評(píng)估板和STM103V100評(píng)估板配置,只需要使用電纜實(shí)現(xiàn)上述連接及供電即可,實(shí)驗(yàn)成本也非常低。圖8 簡(jiǎn)易MP3 Player硬件原理圖5.2 軟件程序設(shè)計(jì) 由上面所述內(nèi)容及圖2、圖8可以得到簡(jiǎn)易MP3 Player的軟件工作過(guò)程:通過(guò)SPI1從SD卡中讀取MP3文件,將所讀取的內(nèi)容通過(guò)SPI2發(fā)送到VS1003解碼器中播放;PC機(jī)可通過(guò)USB總線讀寫(xiě)SD卡的內(nèi)容,傳送MP3文件;PC機(jī)的超級(jí)終端用于發(fā)送MP3播放命令、顯示MP3 播放狀態(tài)。
81、 由于SPI1讀取SD卡的速度遠(yuǎn)超過(guò)VS1003播放聲音的速度,因此在VS1003播放SPI2送給其的聲音數(shù)據(jù)期間,SPI1能從SD卡中讀取下次播放所須的數(shù)據(jù),不會(huì)產(chǎn)生聲音不連續(xù)的情況。 該系統(tǒng)軟件程序主要包含以下源文件,下面分別介紹其中主要的一些函數(shù)。限于篇幅這里不能給出工程的源代碼,讀者可在附件里下載所有源代碼。n main.c 該源文件包含以下幾個(gè)主要函數(shù):l
82、160; USART_Scanf_Name和USART_Scanf_Cmd:用于從超級(jí)終端獲取輸入字符串;l PrintPass:用于在超級(jí)終端上輸出提示符“X:>”;l main: 主函數(shù),首先初始化系統(tǒng)時(shí)鐘、串口、USB接口、SPI1、SPI2,通過(guò)命令啟動(dòng)VS1003芯片,檢測(cè)并在超級(jí)終端上打印SD卡的信息;然后根據(jù)用戶在超級(jí)中輸入的命令進(jìn)行操作
83、,這里有“dir”、“cd”、“read”、“free”、“usb”、“vstest”、“play”七個(gè)簡(jiǎn)單的命令,分別是目錄項(xiàng)列表、目錄更換、以文本方式讀取文件、查詢SD空余空間、啟動(dòng)讀卡器功能、VS1003正弦測(cè)試、和播放MP3聲音文件;如果輸入“Play *.mp3”,則處理器開(kāi)始從SD卡中讀取相應(yīng)的MP3文件,并將其送VS1003芯片播放;n VS1003.c 該文件主要提供VS1003芯片的驅(qū)動(dòng),包含以下幾個(gè)主要函數(shù):l
84、; VS1003_Config:配置STM32處理器與VS1003芯片連接的相關(guān)引腳,包括SPI2、PA1、PA0、PA2、PA3;l SPIGetChar:通過(guò)SPI從VS1003讀取一個(gè)數(shù)據(jù);l SPIPutChar:通過(guò)SPI向VS1003寫(xiě)一個(gè)數(shù)據(jù),如果是MP3聲音數(shù)據(jù),則VS1003將解碼并播放;l Mp3ReadRegister:讀取VS1003寄存器的值;l Mp3WriteRegister:寫(xiě)VS1003
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六年級(jí)下冊(cè)數(shù)學(xué)教學(xué)設(shè)計(jì)-總復(fù)習(xí) 雞兔同籠|北師大版
- 三年級(jí)下冊(cè)數(shù)學(xué)教案-6.1 面積的初步認(rèn)識(shí) 丨蘇教版
- 六年級(jí)下冊(cè)數(shù)學(xué)教案-1.2 百分?jǐn)?shù)和分?jǐn)?shù)、小數(shù)的互化 ︳西師大版
- 2025年學(xué)習(xí)雷鋒精神62周年主題活動(dòng)方案 合計(jì)3份
- 2024年槽鋼項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2025年河北司法警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完美版
- 專(zhuān)題21 信息的傳遞-2025年中考《物理》一輪復(fù)習(xí)知識(shí)清單與解題方法
- 2025年廣西自然資源職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)參考答案
- 2025年度代養(yǎng)大型豬群養(yǎng)殖基地合作協(xié)議
- 2025年度專(zhuān)業(yè)瓷磚鋪貼班組勞務(wù)合同
- 生物產(chǎn)品檢驗(yàn)檢疫基礎(chǔ)知識(shí)單選題100道及答案
- 江蘇省中職《英語(yǔ)》學(xué)業(yè)水平考試備考試題集(含歷年真題)
- Unit 3 Environmental Protection Reading and Thinking 選擇性必修第三冊(cè)
- 2025年合伙型公司新合伙人加入?yún)f(xié)議
- 小學(xué)道德與法治課堂教學(xué)中提升學(xué)生核心素養(yǎng)策略
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)(創(chuàng)新創(chuàng)業(yè)課程)完整全套教學(xué)課件
- 人教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)第一單元測(cè)試卷附答案(共9套)
- 廣西版三年級(jí)美術(shù)下冊(cè)全冊(cè)教案
- 統(tǒng)編版六年級(jí)下冊(cè)道德與法治1-學(xué)會(huì)尊重-課件(54張課件)
- 2024年新改版青島版(六三制)三年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)復(fù)習(xí)資料
- 排列五歷史開(kāi)獎(jiǎng)數(shù)據(jù)(2004年11月至2013年7月)
評(píng)論
0/150
提交評(píng)論