2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  本科畢業(yè)設(shè)計</b></p><p><b> ?。?0 屆)</b></p><p>  SD卡存儲系統(tǒng)的設(shè)計</p><p>  所在學(xué)院 </p><p>  專業(yè)班級 電子信息工程

2、 </p><p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p><b>  摘 要</b></p&g

3、t;<p>  近年來, SD存儲卡在嵌入式產(chǎn)品中的應(yīng)用越來越廣泛, 但SD卡接口一般僅集成在32位高端處理器中, 一般51單片機則由于資源限制沒有該接口。因此,如何解決51單片機應(yīng)用系統(tǒng)存取SD卡大容量數(shù)據(jù)就顯得很有實際意義。</p><p>  本系統(tǒng)使用STC12C5A60S2作為單片機與SD卡的接口芯片, 采用SPI串行方式對SD卡的扇區(qū)進(jìn)行讀寫,讀寫過程和結(jié)果通過串口調(diào)試助手在主機上顯示。

4、本論文的核心主要從硬件設(shè)計和軟件編程兩個大的方面介紹了系統(tǒng)的實現(xiàn)。硬件電路設(shè)計主要包括STC12C5A60S2最小系統(tǒng)電路、電源電路、串口電路、SD卡接口電路。程序采用C語言在Keil軟件下進(jìn)行編寫、調(diào)試,程序主要包括SD卡扇區(qū)讀寫程序、FAT文件系統(tǒng)、串口程序等軟件模塊。系統(tǒng)實現(xiàn)了對SD卡扇區(qū)的讀寫,并支持FAT文件系統(tǒng)達(dá)到了設(shè)計的要求和目的。</p><p>  關(guān)鍵字:STC12C5A60S2,SD卡,Ke

5、il</p><p><b>  ABSTRACT</b></p><p>  In recent years, SD memory card applications in the embedded products more widely, but generally only the integrated SD card interface in 32-bit

6、high-end processor, microcontroller 51 is generally not the interface due to resource constraints. Therefore, how to solve the 51 SCM applications to access data on large-capacity SD cards seem very practical. </p>

7、<p>  The system uses STC12C5A60S2 as SCM and SD card interface chip, using SPI mode on the SD card serial read and write sectors, reading and writing process and results through the serial port on the host displa

8、y debugging assistant. The core of this thesis, the main hardware and software design introduces two major aspects of the system implementation. Hardware design includes STC12C5A60S2 minimum system circuit, power circuit

9、, the serial port circuitry, SD card interface circuit. Program using C l</p><p>  Key Words:STC12C5A60S2,SD Card,Keil</p><p><b>  目 錄</b></p><p><b>  1 引言1<

10、/b></p><p><b>  2 系統(tǒng)方案3</b></p><p>  3 系統(tǒng)硬件設(shè)計4</p><p>  3.1 系統(tǒng)硬件平臺組成4</p><p>  3.2 電源模塊4</p><p>  3.3 STC12C5A60S2單片機最小系統(tǒng)5</p>

11、<p>  3.3.1 STC12C5A60S25</p><p>  3.3.2 時鐘復(fù)位電路6</p><p>  3.4 SD卡電路設(shè)計7</p><p>  3.4.1通訊模式選擇7</p><p>  3.4.2 電平匹配7</p><p>  3.4.3 硬件接口設(shè)計8</p

12、><p>  3.5 串口電路設(shè)計9</p><p>  4 軟件設(shè)計10</p><p>  4.1 主程序10</p><p>  4.2 SD卡的扇區(qū)讀寫11</p><p>  4.2.1 模擬SPI協(xié)議11</p><p>  4.2.2 SD卡命令格式12</p>

13、;<p>  4.2.3 SD卡的復(fù)位及初始化13</p><p>  4.2.4 數(shù)據(jù)塊的讀寫15</p><p>  4.3 FAT文件系統(tǒng)19</p><p>  4.3.1文件系統(tǒng)初始化20</p><p>  4.3.2打開文件21</p><p>  4.3.3讀取數(shù)據(jù)21<

14、/p><p>  4.4 串口程序21</p><p><b>  5 調(diào)試23</b></p><p>  5.1 系統(tǒng)硬件調(diào)試23</p><p>  5.2 軟件調(diào)試23</p><p>  5.3 軟硬件聯(lián)合調(diào)試23</p><p>  5.4 測試結(jié)果與分

15、析24</p><p>  5.4.1 設(shè)計所要達(dá)到的性能指標(biāo)24</p><p>  5.4.2 結(jié)果分析與論述26</p><p><b>  6 結(jié)論27</b></p><p>  致 謝錯誤!未定義書簽。</p><p><b>  參考文獻(xiàn)28</b>

16、;</p><p><b>  附錄29</b></p><p><b>  1 引言</b></p><p>  SD卡(Secure Digital Memory Card)中文翻譯為安全數(shù)碼卡,是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機、個人數(shù)碼助理(PDA)和多媒體播

17、放器等。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。大小猶如一張郵票的SD記憶卡,重量只有2克,但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性。</p><p>  SD卡多用于MP3隨身聽、數(shù)碼攝像機、數(shù)碼相機等,也有用于筆記本電腦上。其投影面積與MMC卡相同,只是略微厚一點,為2.1mm,但是SD卡的容量大得多,且讀寫速度也MMC卡快4倍。同時,SD卡的接

18、口與MMC卡是兼容的,支持SD卡的接口大多支持MMC卡。目前SD卡在數(shù)碼相機中正在迅速普及,大有成為主流之勢。SD卡在今年的發(fā)展很快,已經(jīng)開始威脅到CF卡的市場份額了。這是由于SD卡的體積要比CF卡小很多,并且SD卡在容量、性能和價格上和CF卡的差距越來越小,而這兩年支持SD卡的手機迅速在市場走熱,因此,SD卡的迅速成長絕對不是偶然的。最重要的一點就是MMC卡也能和SD卡相兼容,這也正是SD卡迅速走紅的原因之一。用戶可以使用一個USB的

19、讀卡器,在個人電腦上使用SD卡。現(xiàn)在很多新型電腦上已經(jīng)內(nèi)置了讀卡裝置。</p><p>  因閃存卡因其體積小、功耗低、容量大和非易失性等特點,在嵌入式存儲領(lǐng)域的也得到廣泛應(yīng)用。特別是近年來,隨著閃存技術(shù)的發(fā)展,閃存卡價格不斷下降且存儲容量不斷提高。當(dāng)數(shù)據(jù)采集系統(tǒng)需要長時間地采集和記錄海量數(shù)據(jù)時,應(yīng)用SD卡作為存儲介質(zhì)是很好的選擇,例如電能檢測、溫度濕度檢測、病人心肺數(shù)據(jù)記錄等。FAT32是Windows系統(tǒng)硬盤

20、分區(qū)格式的一種。這種格式采用32位的文件分配表,使其對磁盤的管理能力大大增強,突破了FAT16對每一個分區(qū)的容量只有2 GB的限制。同時,它具有出色的文件管理性能,能被當(dāng)前大多數(shù)操作系統(tǒng)識別。因此,將SD卡與FAT32文件系統(tǒng)相結(jié)合是嵌入式數(shù)據(jù)存儲、記錄系統(tǒng)的理想方案,可以將采集記錄的數(shù)據(jù)直接在PC上讀取和處理。本文研究和設(shè)計了基于AT89S52單片機和FAT16文件系統(tǒng)的SD卡讀寫系統(tǒng)。</p><p>  本

21、設(shè)計實現(xiàn)了51單片機系統(tǒng)對SD卡的讀寫操作,解決了51單片機應(yīng)用系統(tǒng)對大容量數(shù)據(jù)的讀取。本設(shè)計系統(tǒng)硬件主要包括電源模塊、單片機最小系統(tǒng)、SD卡接口、串口模塊等;軟件主要包括SPI通信模塊、扇區(qū)讀寫模塊、FAT文件系統(tǒng)模塊。開發(fā)環(huán)境采用Keil C,編程語言為C51語言。文中對每個部分功能、實現(xiàn)過程作了詳細(xì)介紹。本設(shè)計系統(tǒng)的核心是軟件部分中SPI通信模塊、扇區(qū)讀寫模塊。</p><p><b>  2

22、系統(tǒng)方案</b></p><p>  在多媒體設(shè)備中使用SD卡來作為大容量存儲設(shè)備已經(jīng)很常見。SD卡的解決方案有如下幾種:</p><p>  方案一:采用帶SD卡硬件控制器和有內(nèi)部大容量RAM的控制器的系統(tǒng)</p><p>  直接采用SD卡硬件控制器來完成SD卡的控制。這種控制方式速度快,控制簡單。同時MCU內(nèi)部RAM容量比較大,無需添加外部存儲器。

23、此方案優(yōu)點在于硬件電路和控制簡單,傳輸速度也快,但成本較高。</p><p>  方案二:采用SPI模式和外部存儲器的系統(tǒng)</p><p>  在SD卡數(shù)據(jù)讀寫時間要求不是很嚴(yán)格的情況下,選用SPI模式可以說是一種最佳的解決方案。因為在SPI模式下,通過四條線就可以完成所有的數(shù)據(jù)交換,并且目前市場上很多MCU都集成有現(xiàn)成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫操作可大大簡化硬件電路

24、的設(shè)計。同時,采用外部存儲器來滿足每次寫入扇區(qū)時要求的512字節(jié)數(shù)據(jù)的存儲空間。這種方案滿足了一般SD卡傳輸速度的要求,但外部存儲器增加了硬件系統(tǒng)的成本。</p><p>  方案三:采用SPI模式和有內(nèi)部大容量RAM的控制器的系統(tǒng)</p><p>  這種方案采用了帶有內(nèi)部大容量RAM的控制器與方案二相比,降低了硬件系統(tǒng)的設(shè)計的難度和成本。即使沒有硬件SPI控制器,也可以通過軟件模擬SP

25、I協(xié)議的方式來完成SIP通信。很適合低端嵌入式控制器的設(shè)計要求。</p><p>  比較這三種方案,可以得出。方案一成本高,硬件電路簡單;方案二比方案一成本低,但硬件電路設(shè)計較復(fù)雜;方案三成本最低,硬件電路簡單。綜上所述我們采用方案三。控制器采用STC12C5A60S2,它內(nèi)部有1k字節(jié)的RAM,可以滿足系統(tǒng)對內(nèi)存的要求。同時此控制器沒有SPI控制器,我們使用軟件模擬SPI協(xié)議的方式完成。這種解決方案,很好的利

26、用了系統(tǒng)資源,很適合低端嵌入式設(shè)備對數(shù)據(jù)存儲和低成本的要求。</p><p><b>  3 系統(tǒng)硬件設(shè)計</b></p><p>  3.1 系統(tǒng)硬件平臺組成</p><p>  根據(jù)系統(tǒng)的設(shè)計要求,硬件電路設(shè)計主要包括STC12C5A60S2最小系統(tǒng)電路、電源電路、串口電路、SD卡接口電路。電源電路采用5V和3.3V供電,5V電源給單片機

27、和串口芯片 供電,3.3V給SD卡供電,具體硬件總體結(jié)構(gòu)如圖3-1所示。</p><p>  圖3-1 硬件總體結(jié)構(gòu)框圖</p><p><b>  3.2 電源模塊</b></p><p>  電源電路由交流電降壓,整流濾波,穩(wěn)壓,濾波電路等組成。根據(jù)上述介紹設(shè)計,電源電路包括變壓器、整流電路、濾波電路、穩(wěn)壓電路等模塊組成,使用LED進(jìn)行電源

28、工作狀態(tài)指示。LM78XX系列三端穩(wěn)壓IC來組成穩(wěn)壓電源所需的外圍元件極少,電路內(nèi)部還有過流、過熱及調(diào)整管的保護(hù)電路,使用起來可靠、方便,而且價格便宜,因此使用LM7805穩(wěn)壓芯片進(jìn)行5V的電源電路設(shè)計。5V電源電路如下圖3-2所示。</p><p>  圖3-2 5V電源電路</p><p>  5V直流電源給單片機和MAX232供電,此外SD卡的邏輯電平是3.3V TTL電平標(biāo)準(zhǔn),需

29、要3.3V的電平轉(zhuǎn)換,所以需要3.3V的電源,根據(jù)設(shè)計要求,選擇低壓差的LDO芯片AMS1117,外圍電路簡單,價格便宜,3.3V電源電路如圖3-3所示。</p><p>  圖3-3 3.3V電源電路</p><p>  3.3 STC12C5A60S2單片機最小系統(tǒng)</p><p>  3.3.1 STC12C5A60S2</p><p&g

30、t;  STC12C5A60S2單片機是宏晶科技生產(chǎn)的單時鐘/機器周期(1T)的單片機,是高速/低功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機控制,強干擾場合。增強型8051 CPU,1T,單時鐘/機器周期,指令代碼完全兼容傳統(tǒng)8051。</p><p>  STC12C5

31、A60S2單片機中包含中央處理器(CPU)、程序存儲器(Flash)、數(shù)據(jù)存儲器(SRAM)、定時/計數(shù)器、UART串口、串口2、I/O接口、高速A/D轉(zhuǎn)換、SPI接口、PCA、看門狗、片內(nèi)R/C振蕩器和外部晶體振蕩電路等模塊。</p><p>  3.3.2 時鐘復(fù)位電路</p><p>  單片機內(nèi)部有一個高增益反相放大器,輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。在芯片外

32、部XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,構(gòu)成了一個穩(wěn)定的自激振蕩器。這里使用振蕩頻率為12MHz的石英晶體。為了使晶振快速起振,在晶振兩端加了2個30pF的起振電容C1、C2。</p><p>  復(fù)位是單片機的初始化操作,其作用是使CPU和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個初始狀態(tài)開始工作。</p><p>  如果復(fù)位電路中R、C的值選擇不當(dāng),使復(fù)位時間過長

33、,單片機將處于循環(huán)復(fù)位狀態(tài)。本設(shè)計采用按鍵電平復(fù)位,電平復(fù)位是通過RST端經(jīng)電阻與VCC接通而實現(xiàn)的。RST引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效。</p><p>  具體根據(jù)時鐘和復(fù)位電路設(shè)計要求,STC12C5A60S2單片機的最小系統(tǒng)設(shè)計電路如圖3-4所示。</p><p>  圖3-4 STC12C5A60S2單片機的最小系統(tǒng)電路</p><p> 

34、 3.4 SD卡電路設(shè)計</p><p>  3.4.1通訊模式選擇</p><p>  SD卡有兩個可選的通訊協(xié)議:SD模式和SPI模式。SD模式是SD卡標(biāo)準(zhǔn)的讀寫方式,但是在選用SD模式時,往往需要選擇帶有SD卡控制器接口的 MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫。然而,STC12C5A60S2單片機沒有集成SD卡控制器接口,若選用SD模式通訊就無形中增加了 產(chǎn)品的

35、硬件成本。在SD卡數(shù)據(jù)讀寫時間要求不是很嚴(yán)格的情況下,選用SPI模式可以說是一種最佳的解決方案。因為在SPI模式下,通過四條線就可以完成所 有的數(shù)據(jù)交換,并且目前市場上很多MCU都集成有現(xiàn)成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫操作可大大簡化硬件電路的設(shè)計。此外,本設(shè)計中選擇的STC12C5A60S2單片機有SPI總線接口,因此選用SPI總線模式讀寫SD卡。</p><p>  3.4.2 電平匹配&l

36、t;/p><p>  SD卡的邏輯電平相當(dāng)于3.3V TTL電平標(biāo)準(zhǔn),而控制芯片STC12C5A60S2的邏輯電平為5V CMOS電平標(biāo)準(zhǔn)。因此,它們之間不能直接相連,否則會有燒毀SD卡的可能。出于對安全工作的考慮,有必要解決電平匹配問題。</p><p>  要解決這一問題,最根本的就是解決邏輯器件接口的電平兼容問題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應(yīng)該大于接收電平器

37、件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應(yīng)該小于接收電平器件識別為低電平的最高電壓值。</p><p>  一般來說,通用的電平轉(zhuǎn)換方案是采用類似SN74ALVC4245的專用電平轉(zhuǎn)換芯片,這類芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同步。但是,這個方案代價相對昂貴,而且一般的專用電平轉(zhuǎn)換芯片都是同時轉(zhuǎn)換8路、16路或者更多路數(shù)的電平,相對本系統(tǒng)僅僅需要轉(zhuǎn)換3路來說是一種資源

38、的浪費。</p><p>  考慮到SD卡在SPI協(xié)議的工作模式下,通訊都是單向的,于是在單片機向SD卡傳輸數(shù)據(jù)時采用晶體管加上拉電阻法的方案。具體電平匹配電路如圖3-5所示。而在SD卡向單片機傳輸數(shù)據(jù)時可以直接連接,因為它們之間的電平剛好滿足上述的電平兼容原則,既經(jīng)濟又實用。</p><p>  圖3-5 電平匹配電路</p><p>  3.4.3 硬件接口設(shè)計

39、</p><p>  SD卡提供9Pin的引腳接口便于外圍電路對其進(jìn)行操作,9Pin的引腳隨工作模式的不同有所差異。在SPI模式下,引腳1(DAT3)作為SPI片選線CS用,引腳2(CMD)用作SPI總線的數(shù)據(jù)輸出線MOSI,而引腳7(DAT0)為數(shù)據(jù)輸入線MISO,引腳5用作時鐘線(CLK)。除電源和地,保留引腳可懸空。STC12C5A60S2單片機有SPI接口,同時加上電平轉(zhuǎn)化電路,具體SD卡接口電路設(shè)計如圖

40、3-6所示。</p><p>  圖3-6 SD卡接口電路</p><p>  電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器,接P2.1口。RW端為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作,接P2.2口。E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令,接P2.3口。</p><p>  3.5 串口電路設(shè)計</p><p&

41、gt;  PC內(nèi)通常都裝有一個RS-232異步通信適配器板,其主要器件為可編程的UART芯片,從而使PC有能力與其他具有標(biāo)準(zhǔn)RS-232串行通信接口的計算機設(shè)備進(jìn)行通信。51單片機本身具有一個全雙工的串行口,但它為TTL電平,需要外接一個TTL-RS-232電平轉(zhuǎn)換器才能夠與PC的RS-232串行口連接,組成一個簡單可行的通信接口。</p><p>  美國MAXIM公司生產(chǎn)的MAX232系列RS-232收發(fā)器是

42、目前應(yīng)用較為普遍的串行口電平轉(zhuǎn)換器件。MAX232是一種雙組驅(qū)動器/接收器,片內(nèi)含有一個電容性電壓發(fā)生器以便在5V電源供電時提供EIA/TIA-232-E電平。</p><p>  MAX232利用4個外接電容C11~C14就可以在外接電源+5V電源供電的條件下,將輸入的+5V電壓轉(zhuǎn)換為RS-232輸出所需要的±12V電壓。電容可以取O.1uF到10uF左右的電容,有無極性均可。</p>

43、<p>  串行通信模塊的電路如圖3-7所示。數(shù)據(jù)傳輸過程如下:MAX232的11腳T1in接單片機TXD端P3.1,TTL電平從單片機的TXD端發(fā)出,經(jīng)過MAX232轉(zhuǎn)換為RS232電平后從MAX232的14腳T1out發(fā)出,再連接到PC機的串口座的第2腳RXD端,至此計算機接收到數(shù)據(jù)。PC機發(fā)送數(shù)據(jù)時從PC機串口座第3腳TXD端發(fā)出數(shù)據(jù),再逆向流向單片機的RXD端P3.0接收數(shù)據(jù)。</p><p>

44、  圖3-7 串行通信模塊電路</p><p><b>  4 軟件設(shè)計</b></p><p><b>  4.1 主程序</b></p><p>  整個系統(tǒng)的主要包括初始化模塊,SD卡數(shù)據(jù)塊讀寫模塊,F(xiàn)AT文件系統(tǒng)模塊,串口人機模塊。初始化模塊的主要功能是初始化串口、SD卡和FAT文件系統(tǒng); SD卡數(shù)據(jù)塊讀寫模塊的

45、主要功能是寫入或讀取指定扇區(qū)的數(shù)據(jù);FAT文件系統(tǒng)模塊主要功能是在SD卡里實現(xiàn)文件的管理,包括文件的創(chuàng)建、打開等功能。串口人機模塊主要功能是實現(xiàn)人機交互模塊,用戶可以通過串口軟件對程序進(jìn)行測試。其主程序流程圖如圖4-1所示。</p><p>  圖4-1 主程序流程圖</p><p>  4.2 SD卡的扇區(qū)讀寫</p><p>  要實現(xiàn)對SD卡扇區(qū)的讀寫,首先

46、要解決SD卡與單片機數(shù)據(jù)通信的問題。由于本設(shè)計沒有硬件的SD卡驅(qū)動或SPI模塊,所以要使用軟件模擬SPI協(xié)議。然后就根據(jù)SD卡的命令格式把數(shù)據(jù)寫到對應(yīng)的扇區(qū)。</p><p>  4.2.1 模擬SPI協(xié)議</p><p>  SD卡的SPI通信接口使其可以通過SPI通道進(jìn)行數(shù)據(jù)讀寫。從應(yīng)用的角度來看,采用SPI接口的好處在于,很多單片機內(nèi)部自帶SPI控制器,即使不帶SPI串行總線接口的單

47、片機,也可以用軟件來模擬SPI總線操作。不光給開發(fā)上帶來方便,同時也見降低了開發(fā)成本。</p><p>  用軟件來模擬SPI總線的具體方法是:將SCK的初始狀態(tài)置0,允許接收后(即CS置0)將SCK置1,這樣單片機由DI線輸出1位數(shù)據(jù)到SD卡;接著再將SCK置0,單片機由DO線從SD卡讀1位數(shù)據(jù)。至此,模擬1位數(shù)據(jù)輸入輸出完成。此后再將SCK置1,依次循環(huán)8次,完成SPI總線1字節(jié)數(shù)據(jù)的輸入輸出。流程圖如圖4-

48、2所示。</p><p>  圖4-2 讀取(發(fā)送)一個字節(jié)</p><p>  4.2.2 SD卡命令格式</p><p>  單片機通過相應(yīng)指令與SD卡進(jìn)行交互。SD卡有特定的指令格式,都是6字節(jié)長,最高有效位(MSB)傳輸優(yōu)先,如表4-1所示。</p><p>  表4-1 SD指令格式</p><p>  S

49、D卡指令的最高2位“01”是SD卡指令的開始標(biāo)志,最后1位“1”是結(jié)束標(biāo)志。6位的指令是SD卡的指令序號,例如CMD17的6位指令即17的二進(jìn)制表示010001。指令參數(shù)占4字節(jié),具體內(nèi)容參照SD卡規(guī)范。7位CRC校檢的生成多項式為G(x)=x7+x3+1。事實上SD卡在進(jìn)入SPI模式后,不再通過CRC碼來確認(rèn)指令的傳輸正確與否,指令中的7為CRC校檢,只在SD模式下起作用。因此僅SD卡上電后的第1條切換SPI模式指令CMd0 需要校檢

50、碼,而此校檢碼是固定的0x95,其他指令的CRC均置1即可。SD卡響應(yīng)有4種格式,不同指令對應(yīng)不同響應(yīng),具體內(nèi)容可參看SD卡規(guī)范如表4-2所示。</p><p>  表4-2 SPI模式下常用命令</p><p>  4.2.3 SD卡的復(fù)位及初始化</p><p>  SD卡的復(fù)位和初始化是非常重要的。很多情況下就是因為復(fù)位和初始化沒有通過,從而導(dǎo)致驅(qū)動SD卡的

51、失敗。下面介紹復(fù)位時序和初始化時序。</p><p>  復(fù)位時序:首先將CS片選信號拉高。根據(jù)SD卡的手冊說明,在初始化過程中,SPI的時鐘不能太快,否則會造初始化失敗。在初始化成功后,應(yīng)盡量提高SPI的速率。在剛開始要先發(fā)送至少74個時鐘信號,這是必須的,因為在上電初期,電壓的上升過程據(jù)SD卡組織的計算約合64個CLK周期才能到達(dá)SD卡的正常工作電壓,其后的10個CLK是為了與SD卡同步,如果疏忽了這一點,可

52、能使初始化不成功。然后將CS片選信號制成低電平,期間在數(shù)據(jù)線上給出CMD0(即:0x40,0x00,0x00,0x00,0x00,0x095)。當(dāng)寫入CMD0后對SD卡的數(shù)據(jù)輸出端不斷的讀取。如果在一段時間后讀到01H,說明操作成功。如果讀到的一直是FFH說明復(fù)位操作失敗。將恢復(fù)CS為高電平后,再給出8個時鐘信號,如果沒有這幾個時鐘信號的話程序也能運行,但可能會產(chǎn)生挑卡的現(xiàn)象。</p><p>  初始化的時序和

53、復(fù)位時序大致相同,只是不發(fā)送開始的74個時鐘和發(fā)送的命令是CMD1,當(dāng)讀到00H時認(rèn)為初始化成功,否則初始化失敗。具體SD卡復(fù)位及初始化程序流程如圖4-4所示。SD卡復(fù)位代碼如下:</p><p>  unsigned char pcmd[] = {0x40,0x00,0x00,0x00,0x00,0x95}; </p><p>  is_init=1;

54、 //將is_init置為1</p><p>  SD_CS=1; //關(guān)閉片選 </p><p>  for(i=0;i<0x0f;i++) //初始時,首先要發(fā)送最少74個時鐘信號</p><p>  {SD_spi_write(0xff); }

55、 //120個時鐘</p><p>  SD_CS=0; //打開片選</p><p><b>  time=0;</b></p><p><b>  do</b></p><p>  { temp=SD_Write_Cmd(pcmd)

56、; //寫入CMD0</p><p><b>  time++;</b></p><p>  if(time==TRY_TIME) </p><p>  { SD_CS=1; //關(guān)閉片選</p><p>  return(INIT_C

57、MD0_ERROR); } //CMD0寫入失敗</p><p>  }while(temp!=0x01);</p><p>  SD_CS=1; //關(guān)閉片選</p><p>  SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘 </p>

58、<p>  return 0; //返回0,說明復(fù)位操作成功</p><p>  SD卡復(fù)位,進(jìn)入SPI模式,使用CMD0(命令0),將is_init置為1,寫的速度放慢,初始化SD卡SPI速度不能太高。初始時,首先要發(fā)送最少74個時鐘信號,寫入CMD0,CDM0寫入失敗,則返回INIT_CMD0_ERROR,返回0,說明復(fù)位操作成功。SD卡初始化代碼如下:</p

59、><p>  unsigned char time,temp;</p><p>  unsigned char pcmd[] = {0x41,0x00,0x00,0x00,0x00,0xff}; </p><p>  SD_CS=0; //打開片選</p><p&

60、gt;<b>  time=0;</b></p><p><b>  do</b></p><p>  { temp=SD_Write_Cmd(pcmd);</p><p><b>  time++;</b></p><p>  if(time==TRY_TIME) </

61、p><p>  { SD_CS=1; //關(guān)閉片選</p><p>  return(INIT_CMD1_ERROR); } //CMD1寫入失敗</p><p>  }while(temp!=0);</p><p>  is_init=0; </p><p>  SD_CS=1;

62、 //關(guān)閉片選 </p><p>  SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘</p><p>  return(0); //返回0,說明初始化操作成功</p><p>  

63、初始化SD卡,使用CMD1,CMD1寫入失敗,返回INIT_CMD1_ERROR,返回0,說明初始化操作成功,初始化完畢,將is_init設(shè)置為0,為了提高以后的數(shù)據(jù)傳輸速度。</p><p>  圖4-4 SD卡復(fù)位及初始化</p><p>  4.2.4 數(shù)據(jù)塊的讀寫</p><p>  完成SD卡的初始化之后即可進(jìn)行它的讀寫操作。SD卡的讀寫操作都是通過發(fā)送

64、SD卡命令完成的。SPI總線模式支持單塊(CMD24)和多塊(CMD25)寫操作,多塊操作是指從指定位置開始寫下去,直到SD卡收到一個停止命令CMD12才停止。單塊寫操作的數(shù)據(jù)塊長度只能是512 字節(jié)。單塊寫入時,命令為CMD24,當(dāng)應(yīng)答為0時說明可以寫入數(shù)據(jù),大小為512 字節(jié)。SD卡對每個發(fā)送給自己的數(shù)據(jù)塊都通過一個應(yīng)答命令確認(rèn),它為1個字節(jié)長,當(dāng)?shù)?位為00101 時,表明數(shù)據(jù)塊被正確寫入SD 卡。寫SD卡程序流程圖如圖4-5所示

65、。關(guān)鍵代碼如下:</p><p>  addr<<=9; </p><p>  pcmd[1]=((addr&0xff000000)>>24); </p><p>  pcmd[2]=((addr&0x00ff0000)>>16);</p><p>  pcmd[3]=((addr&

66、0x0000ff00)>>8);</p><p>  SD_CS=0; //打開SD卡片選</p><p><b>  time=0;</b></p><p><b>  do</b></p><p>  

67、{temp=SD_Write_Cmd(pcmd);</p><p><b>  time++;</b></p><p>  if(time==TRY_TIME) </p><p>  {SD_CS=1; //關(guān)閉片選</p><p>  return(temp); }

68、//命令寫入失敗</p><p>  }while(temp!=0); </p><p>  for(i=0;i<100;i++) //這里要插入若干時鐘信號</p><p>  {SD_spi_write(0xff); }</p><p>  SD_spi_write(0xfe);</p&g

69、t;<p>  for(i=0;i<512;i++) </p><p>  {SD_spi_write(buffer[i]); }</p><p>  SD_spi_write(0xff); </p><p>  SD_spi_write(0xff); //兩個字節(jié)的CRC校驗碼,不用關(guān)心</p><

70、p>  temp=SD_spi_read(); //讀取返回值</p><p>  if((temp&0x1F)!=0x05) </p><p><b>  {SD_CS=1;</b></p><p>  return(WRITE_BLOCK_ERROR);}

71、 //寫塊數(shù)據(jù)失敗</p><p>  while(SD_spi_read()!=0xff);</p><p>  SD_CS=1; //關(guān)閉片選</p><p>  SD_spi_write(0xff); //按照SD卡的操作時序在這里補8個時鐘</p><p>  return(0);

72、 //返回0,說明寫扇區(qū)操作成功</p><p>  向SD卡中單個塊 (512字節(jié),一個扇區(qū))寫入數(shù)據(jù),用CMD24,將塊地址(扇區(qū)地址)轉(zhuǎn)為字節(jié)地址,將字節(jié)地址寫入到CMD24字節(jié)序列中,寫入開始字節(jié) 0xfe,后面就是要寫入的512個字節(jié)的數(shù)據(jù),將緩沖區(qū)中要寫入的512個字節(jié)寫入SD卡,如果返回值是 XXX00101說明數(shù)據(jù)已經(jīng)被SD卡接受了,否則返回WRITE_BLOCK_E

73、RROR。</p><p>  圖4-5 寫扇區(qū)流程圖</p><p>  讀扇區(qū)與寫扇區(qū)相比,相對簡單。首先發(fā)送讀SD卡數(shù)據(jù)的命令CMD17,然后檢查應(yīng)答信號是否是正確的應(yīng)答命令0xFE,如果應(yīng)答正確則下面接受到是512個用戶數(shù)據(jù)塊,最后是兩個字節(jié)的CRC校驗碼??梢娮x扇區(qū)程序很簡單,只要發(fā)送讀指令,然后接受響應(yīng)即可。流程圖如圖4-6所示。關(guān)鍵代碼如下:</p><

74、p>  unsigned int j;</p><p>  unsigned char time,temp;</p><p>  unsigned char pcmd[]={0x51,0x00,0x00,0x00,0x00,0xff}; </p><p>  addr<<=9; </p><p>  pcmd[1]=((ad

75、dr&0xff000000)>>24);</p><p>  pcmd[2]=((addr&0x00FF0000)>>16);</p><p>  pcmd[3]=((addr&0x0000FF00)>>8);</p><p>  SD_CS=0;//打開片選 </p>

76、<p><b>  time=0;</b></p><p><b>  do</b></p><p>  {temp=SD_Write_Cmd(pcmd); //寫入CMD17</p><p><b>  time++;</b></p><p>  if(

77、time==TRY_TIME) </p><p>  { return(READ_BLOCK_ERROR); } //讀塊失敗</p><p>  }while(temp!=0); </p><p>  while (SD_spi_read()!= 0xfe);</p><p>  for(j=0;j<512;j++) <

78、;/p><p>  {buffer[j]=SD_spi_read();}</p><p>  SD_spi_read();</p><p>  SD_spi_read();//讀取兩個字節(jié)的CRC校驗碼</p><p>  SD_CS=1; //SD卡關(guān)閉片選 </p><p>  SD_sp

79、i_write(0xff);//按照SD卡的操作時序在這里補8個時鐘</p><p>  return 0; </p><p>  從SD卡的指定扇區(qū)中讀出512個字節(jié),使用CMD17(17號命令),將塊地址(扇區(qū)地址)轉(zhuǎn)為字節(jié)地址,再把字節(jié)地址寫入到CMD17字節(jié)序列中,讀塊成功,返回0x00,一直讀,當(dāng)讀到0xfe時,說明后面的是512字節(jié)的數(shù)據(jù)了,將數(shù)據(jù)寫入到數(shù)據(jù)緩沖區(qū)中,讀取

80、兩個字節(jié)的CRC校驗碼。讀塊失敗,返回READ_BLOCK_ERROR。</p><p>  圖4-6 讀扇區(qū)流程圖</p><p>  4.3 FAT文件系統(tǒng)</p><p>  FAT32 文件系統(tǒng)是一種機制,可以將存儲器上的數(shù)據(jù)有機的組織為一個文件,并向我們提供針對于文件的各種操作,比如創(chuàng)建文件、讀取文件等等。FAT32文件系統(tǒng)也是應(yīng)用最為廣泛和最為經(jīng)典。&

81、lt;/p><p>  FAT可以使用在存儲設(shè)備上,如SD卡、CF卡等等,實現(xiàn)FAT32文件系統(tǒng),進(jìn)行各種文件操作,并保證與 windows 等操作系統(tǒng)上的 FAT32 文件系統(tǒng)相兼容。FAT32 文件系統(tǒng)除了本身很復(fù)雜外,還有就是實際平臺的硬件資源了。FAT文件系統(tǒng)的一個重要指標(biāo)就是可移植性,不光包括FAT本身的程序接口要易于移植,另外更為重要的就是占用資源量,占用資源越少,越容易向一些低端的微處理器上移植。我們所

82、使用的硬件是STC12C5A60S2,片內(nèi)有1280字節(jié)的RAM)FAT 實現(xiàn)所有功能所需要的RAM資源只有 900 多字節(jié),其中有 512 字節(jié)的扇區(qū)數(shù)據(jù)緩沖區(qū),也就是說,我們所用的單片機完全可以勝任FAT文件系統(tǒng)的移植。</p><p>  4.3.1文件系統(tǒng)初始化</p><p>  將SD卡與FAT進(jìn)行掛接,并成功對存儲設(shè)備進(jìn)行初始化后即可對文件系統(tǒng)進(jìn)行初始化,同時它也是進(jìn)行一切文

83、件操作的前提。在文件系統(tǒng)初始化函數(shù)中,將SD卡上的FAT32文件系統(tǒng)的重要相關(guān)參數(shù)進(jìn)行提取,并裝入到一個參數(shù)集合中(這個參數(shù)集合在FAT中定義為FAT_Init_Arg結(jié)構(gòu)體類型),這些參數(shù)是我們后面進(jìn)行各種文件操作時,計算文件及數(shù)據(jù)的位置的根本依據(jù)。關(guān)鍵函數(shù)代碼如下:</p><p>  struct znFAT_BPB *bpb;</p><p>  bpb=(struct znFAT

84、_BPB *)(znFAT_Buffer);</p><p>  pArg->DEV_No=Dev_No; </p><p>  pArg->BPB_Sector_No =znFAT_Find_DBR(); </p><p>  znFAT_ReadSector(pArg->BPB_Sector_No,znFAT_B

85、uffer);</p><p>  pArg->FATsectors =LE2BE((bpb->BPB_FATSz32) ,4); pArg->FirstDirClust =LE2BE((bpb->BPB_RootClus) ,4); pArg->BytesPerSector =LE2BE((bpb->BPB_BytesPerSec),2); pArg

86、->SectorsPerClust =LE2BE((bpb->BPB_SecPerClus) ,1);</p><p>  pArg->FirstFATSector</p><p>  =LE2BE((bpb->BPB_RsvdSecCnt) ,2)+pArg->BPB_Sector_No; pArg->FirstDirSector =(pA

87、rg->FirstFATSector)+(bpb->BPB_NumFATs[0])*(pArg->FATsectors); </p><p>  pArg->Total_Size =LE2BE((bpb->BPB_TotSec32),4)*pArg->BytesPerSector; </p><p>  temp_last_cl

88、uster=Search_Last_Usable_Cluster();</p><p>  FAT文件系統(tǒng)初始化師,先將數(shù)據(jù)緩沖區(qū)指針轉(zhuǎn)為struct znFAT_BPB 型指針,然后把FAT表占用的扇區(qū)數(shù)裝入到FATsectors中,根目錄簇號裝入到FirstDirClust中,每扇區(qū)字節(jié)數(shù)裝入到BytesPerSector中,每簇扇區(qū)數(shù)裝入到SectorsPerClust 中,第一個FAT表扇區(qū)號裝入到Fir

89、stFATSector 中,第一個目錄扇區(qū)裝入到FirstDirSector中。</p><p><b>  4.3.2打開文件</b></p><p>  打開文件函數(shù)將文件的相關(guān)參數(shù)信息裝入到一個參數(shù)集合中,它們是操作文件的根本基礎(chǔ)。關(guān)鍵函數(shù)代碼如下:</p><p>  struct FileInfoStruct FileInfo;

90、//文件參數(shù)集合</p><p>  znFAT_Open_File(&FileInfo,"\\test.txt",0,1) //打開\test.txt</p><p>  FileInfoStruct類型的結(jié)構(gòu)體指針,用來裝載文件的參數(shù)信息比如文件的大小、文件的名稱、文件的開始簇。znFAT_Open_File用來打開目標(biāo)目錄的文件。</p>

91、<p><b>  4.3.3讀取數(shù)據(jù)</b></p><p>  讀取文件函數(shù)將從文件指定位置開始讀取指定長度的數(shù)據(jù),并將數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū),同時在讀取數(shù)據(jù)的過程中,對文件信息參數(shù)集合進(jìn)行更新。關(guān)鍵函數(shù)代碼如下:</p><p>  struct FileInfoStruct FileInfo;//文件參數(shù)集合</p><p

92、>  znFAT_Open_File(&FileInfo,"\\a\\b\\c\\test.txt",0,1) </p><p>  //打開\a\b\c\test.txt</p><p>  FileInfoStruct類型的結(jié)構(gòu)體指針,用于裝載文件參數(shù)信息,文件讀取的過程中,此結(jié)構(gòu)體中的相關(guān)參數(shù)會更新,比如文件的當(dāng)前偏移量、文件的當(dāng)前扇區(qū),文件的當(dāng)前簇

93、從文件的某一個位置處,讀取一定長度的數(shù)據(jù),放入數(shù)據(jù)緩沖區(qū)中讀取到的實際的數(shù)據(jù)長度,如果讀取失敗,比如指定的偏移量大于了文件大小,則返回0。在讀取一個文件的數(shù)據(jù)前,必須先將該文件用znFAT_Open_File打開</p><p><b>  4.4 串口程序</b></p><p>  串口程序主要包括串口驅(qū)動程序和串口通信程序。串口驅(qū)動程序建立了PC機和單片機通信的

94、橋梁,而串口通信程序則實現(xiàn)了單片機接收人通過PC串口發(fā)送到單片機的指令,然后根據(jù)指令做相應(yīng)操作。</p><p>  串口驅(qū)動程序主要是串口初始化程序和串口發(fā)送接收程序。串口初始化程序主要完成串口的中斷設(shè)置,波特率設(shè)置,接收使能等。</p><p>  串口的發(fā)送接收程序比較簡單,串口發(fā)送程序只需把要發(fā)送的數(shù)據(jù)賦給串口數(shù)據(jù)緩沖寄存器,當(dāng)數(shù)據(jù)發(fā)送完成后,發(fā)送中斷標(biāo)志有硬件置1,申請中斷,CP

95、U響應(yīng)后發(fā)送下一幀數(shù)據(jù),該中斷發(fā)送標(biāo)志位必須有軟件清0。</p><p>  串口接收程序和發(fā)送程序相似,在接收到第8位數(shù)據(jù)時,硬件置位接收中斷標(biāo)志位,進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序中把數(shù)據(jù)緩沖寄存器的值賦給存放接收數(shù)據(jù)的臨時內(nèi)存。該中斷接收標(biāo)志位也必須有軟件清0。</p><p>  人機交互程序會等待PC機發(fā)送相應(yīng)命令。接收到串口數(shù)據(jù)后,解析出命令。然后執(zhí)行用戶命令后返回,重新等待用

96、戶指令。</p><p><b>  5 調(diào)試</b></p><p>  5.1 系統(tǒng)硬件調(diào)試</p><p>  根據(jù)設(shè)計好的硬件原理圖搭建硬件電路,焊接并搭建好硬件電路,首先調(diào)試電源電路,打開5V電源開關(guān),指示燈亮,并且使用數(shù)字萬用表測量5V電源的輸出電壓,數(shù)字萬用表顯示5.05V,同時測量3.3V電源電路,萬用表顯示3.32V,電源電

97、路測試正常。調(diào)試串口電路,把單片機的RXD和TXD連接在一起,使用串口調(diào)試助手,發(fā)送數(shù)據(jù),串口調(diào)試助手界面收到數(shù)據(jù),證明串口電路正常。SD卡電路,查看原理圖,看可有虛焊和短線,發(fā)現(xiàn)沒有問題,插入SD卡,等待與軟件聯(lián)合調(diào)試。</p><p><b>  5.2 軟件調(diào)試</b></p><p>  在硬件還沒有準(zhǔn)備好的情況下,在Keil下進(jìn)行了軟件的單步跟蹤。通過在ke

98、il下單步跟蹤調(diào)試發(fā)現(xiàn)一個問題:在SD卡的發(fā)送命令函數(shù)中,定義了一個無符號型變量,初始值賦值3對其進(jìn)行自減操作,判斷是否大于等于0,如果為假則循環(huán)結(jié)束。結(jié)果導(dǎo)致程序進(jìn)入死循環(huán),運行不正常。后來跟蹤到這里才發(fā)現(xiàn)變量為無符號變量,而我卻用來進(jìn)行自減,當(dāng)變量自減到0時,因為是無符號變量,所以再自減就變?yōu)榱?28,所以進(jìn)入了死循環(huán),把變量改為符號型變量,問題解決。</p><p>  5.3 軟硬件聯(lián)合調(diào)試</p&

99、gt;<p>  硬件制作完成后,就開始了軟硬件的聯(lián)合調(diào)試。其中主要遇到以下幾個問題:</p><p>  1、數(shù)據(jù)線有破損現(xiàn)象,導(dǎo)致接觸不良。通過更換新的串口數(shù)據(jù)線解決,能準(zhǔn)確顯示串口數(shù)據(jù)。</p><p>  2、在測試往指定扇區(qū)寫入512字節(jié)數(shù)據(jù)時,后256字節(jié)的數(shù)據(jù)寫的是前256字節(jié)的數(shù)據(jù)。首先既然能正確寫入前512個字節(jié)的數(shù)據(jù),說明程序整體思路是對的。寫入512字節(jié)

100、的數(shù)據(jù)使用的是一個循環(huán)語句,語句使用一個變量記錄寫入的字節(jié)數(shù),也沒有在中間對其清零,是一直遞增到511的。最后從函數(shù)的開始部分發(fā)現(xiàn)定義的循環(huán)變量i類型為unsigned char,它的取值范圍為0-255,修改為unsigned int類型后問題得以解決。</p><p>  通過以上的調(diào)試,程序運行正常。程序流程如下:</p><p>  1、扇區(qū)讀寫測試:首先初始化單片機串口,然后執(zhí)行

101、SD卡初始化操作,SD卡初始化完成后,通過串口發(fā)送命令往SD卡的10扇區(qū)寫入數(shù)據(jù)“My name is Li Xiao”,通過串口調(diào)試助手顯示剛才寫入扇區(qū)的數(shù)據(jù),然后再讀取剛才寫的扇區(qū)的數(shù)據(jù),顯示結(jié)果見圖。</p><p>  2、FAT文件系統(tǒng)測試:首先使用PC機上在SD的根目錄下建立名為“test.txt”的文本文檔,寫入數(shù)據(jù)“My name is Li Xiao”。然后將SD卡放到我們的系統(tǒng)中,通過串口發(fā)送

102、讀文件命令,打開“test.txt”,讀取內(nèi)容并顯示。因時間倉促沒有做人機交互操作,不能輸入相關(guān)命令,只能由系統(tǒng)自動讀取根目錄下“test.txt”的文本文檔。</p><p>  5.4 測試結(jié)果與分析</p><p>  5.4.1 設(shè)計所要達(dá)到的性能指標(biāo)</p><p><b>  1. 扇區(qū)讀寫測試</b></p><

103、;p>  以次輸入命令“1”選擇扇區(qū)讀寫測試,然后輸入扇區(qū)參數(shù)“10”,最后輸入寫入扇區(qū)的數(shù)據(jù)“My name is Li Xiao”,觀察超級終端顯示結(jié)果如圖5-1所示。</p><p>  圖5-1 扇區(qū)讀寫測試程序運行圖</p><p>  觀察以上結(jié)果可知系統(tǒng)能準(zhǔn)確完成扇區(qū)讀寫功能。</p><p>  2. FAT文件系統(tǒng)測試</p>

104、<p>  觀察FAT文件系統(tǒng)測試窗口如圖5-2所示。</p><p>  圖5-2 FAT文件系統(tǒng)測試圖</p><p>  觀察上圖可看到系統(tǒng)成功讀出SD卡中“test.txt”中的文本數(shù)據(jù)。</p><p>  5.4.2 結(jié)果分析與論述</p><p>  系統(tǒng)完全滿足設(shè)計要求,實現(xiàn)的SD扇區(qū)數(shù)據(jù)的讀寫和FAT文件系統(tǒng),

105、對一般的電子產(chǎn)品設(shè)計完全可以采用我們的設(shè)計。</p><p>  本設(shè)計中實現(xiàn)了對SD任意扇區(qū)的讀寫,從而可以將信號采集的大量數(shù)據(jù)放到SD卡中,實現(xiàn)了設(shè)計的要求。同時我們?yōu)榱苏{(diào)試方便使用串口調(diào)試助手作為人機交互途徑,這不僅使得系統(tǒng)更靈活,而且是系統(tǒng)可移植性更好。</p><p>  由于時間關(guān)系只能簡單的使用部分函數(shù),其它功能和深層次的研究將在日后的工作中完成。</p>&l

106、t;p><b>  6 結(jié)論</b></p><p>  論文的目標(biāo)是實現(xiàn)51單片機對SD卡扇區(qū)的讀寫和FAT文件系統(tǒng)。根據(jù)目標(biāo),首先進(jìn)行了相關(guān)資料的收集和整理,其中包括關(guān)于SPI總線協(xié)議和SD卡通信命令以及RS232協(xié)議,單片機的系統(tǒng)結(jié)構(gòu),F(xiàn)AT文件系統(tǒng),通過對以上英文資料的翻譯和相關(guān)中文資料的查閱,對系統(tǒng)實現(xiàn)的原理和其理論基礎(chǔ)以有了初步的認(rèn)識。再通過制作硬件的制作對系統(tǒng)的功能和接口

107、有了深刻的理解。最后通過軟、硬件調(diào)試實現(xiàn)了以下功能:</p><p> ?。?)通過硬件測試工具,完成了對硬件電路的測試,為實現(xiàn)整個系統(tǒng)的功能奠定了基礎(chǔ)。</p><p>  (2)SD扇區(qū)讀寫的實現(xiàn)。通過對SD卡協(xié)議的理解,使用相應(yīng)的控制命令和人機交互接口完成了對SD卡指定扇區(qū)的讀寫。</p><p> ?。?)FAT文件系統(tǒng)的實現(xiàn)。利用znFAT輕松實現(xiàn)了兼容F

108、AT32的文件系統(tǒng),簡化了復(fù)雜的文件數(shù)據(jù)的存儲設(shè)計,減小了系統(tǒng)的尺寸,提高了系統(tǒng)的可靠性,使得單片機對文件的讀出和存取簡單易行。</p><p>  由于條件的不足,沒有將課題做進(jìn)一步研究。比如,F(xiàn)AT文件系統(tǒng)框架,串口調(diào)試接口的規(guī)范化,這樣以后就可以很方便的移植到其它的單片機系統(tǒng)中,方便開發(fā)調(diào)試,增快研發(fā)進(jìn)程。讀寫速度有限,如果采用4線并行方式對扇區(qū)進(jìn)行讀寫,速度將得到明顯的提高。但這些措施勢必要增加系統(tǒng)設(shè)計的

109、難度和成本,由于時間有限所以沒有采用,有待在以后的工作學(xué)習(xí)中不斷進(jìn)步。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 林倩,嚴(yán)桂林. 基于STC12C5A60S2單片機的SD卡讀寫[J]. 電子元器件應(yīng)用,2010,(4):1-3.</p><p>  [2] 劉潤. 基于單片機和串口的SD卡讀取平臺的設(shè)計[J].

110、現(xiàn)代電子技術(shù),2010,(16):166-168.</p><p>  [3] 時堯. HCS12X單片機的SD卡FAT文件系統(tǒng)讀寫設(shè)計[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2010,(9):56-58.</p><p>  [4] 關(guān)碩,關(guān)濟實.FAT16文件系統(tǒng)在單片機存儲系統(tǒng)上的實現(xiàn)[J].科技信息,2008,(3):24-26.</p><p>  [5] 蘇義

111、鑫,程敏,何力.基于AT89C52單片機的SD卡讀寫設(shè)計[J].世界電子元器件,2008,(5):65-68.</p><p>  [6] Microsoft Corporation.FAT Specification.Microsoft extensible firmware initiative FAT32 file system specification Version1.03[S].[s.l.]:Mic

112、rosoft Corporation,2000.</p><p>  [7] 賴文麟. 8051單片機嵌入式系統(tǒng)應(yīng)用[J]. 科學(xué)出版社,2002.</p><p>  [8] 何立民. 單片機應(yīng)用技術(shù)選編(l)一(7) [J]. 北京航空航天大學(xué)出版社,2000.</p><p>  [9] 何立民. 單片機高級教程一應(yīng)用與設(shè)計[J]. 北京航空航天大學(xué)出版社,2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論