基于嵌入式ARM的SD卡的讀寫_第1頁
基于嵌入式ARM的SD卡的讀寫_第2頁
基于嵌入式ARM的SD卡的讀寫_第3頁
基于嵌入式ARM的SD卡的讀寫_第4頁
基于嵌入式ARM的SD卡的讀寫_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

/摘要SD卡〔SecureDigitalMemoryCard中文翻譯為安全數(shù)碼卡,是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機(jī)、個(gè)人數(shù)碼助理<PDA>和多媒體播放器等。本實(shí)訓(xùn)的作品是利用基于ARMCotex-M3內(nèi)核的嵌入式處理器STM32自帶的SDIO硬件接口來驅(qū)動(dòng)SD卡,并結(jié)合文件系統(tǒng)FATFSR0.07C來完成一個(gè)基于嵌入式ARM的SD卡讀寫的作品,現(xiàn)實(shí)向SD卡寫入一個(gè)txt文件,并讀取SD卡的文件目標(biāo)并通過串口打印到PC機(jī)顯示。關(guān)鍵詞:嵌入式;ARM;STM32;SD卡;文件系統(tǒng)AbstractSDCard<SecureDigitalMemoryCard>ChinesetranslationforSecureDigitalCard,itisakindofbasedonsemiconductorflashMemoryofanewgenerationofMemorydevice,itiswidelyusedinportabledevices,suchasDigitalcameras,personalDigitalassistant<PDA>andmultimediaplayer,etc.ThistrainingworkisbasedonARMCotex-M3kernelembeddedprocessorSTM32ownSDIOhardwareinterfacetodrivetheSDcard,andcombinedwiththefilesystemFATFSR0.07CtocompleteabasedonembeddedARMoftheSDcard,speaking,readingandwritingwork,realitytoSDcardtoaTXTfile,andreadSDcardfilegoalsandthroughtheserialportprinttoPCdisplay.Keywords:embedded;ARM;STM32;SDCard;Filesystem目錄1前言11.1ARM應(yīng)用背景11.2研究?jī)?nèi)容21.3研究成果32STM32處理器概述32.1STM32簡(jiǎn)介32.1.1STM32F103VET6的參數(shù)42.2內(nèi)部資源62.3Cortex-M3內(nèi)核簡(jiǎn)介62.4STM32SDIO簡(jiǎn)介82.4.1SDIO簡(jiǎn)介82.4.2SDIO功能特性83SDIO的原理及實(shí)現(xiàn)方法93.1原理93.2SDIO適配器103.3SDIO卡識(shí)別過程113.4SDIO寫數(shù)據(jù)塊123.5SDIO讀數(shù)據(jù)塊134FatFS文件系統(tǒng)134.1FatFS文件系統(tǒng)簡(jiǎn)介134.2FatFS文件系統(tǒng)移植14移植前工作14開始移植145測(cè)試及結(jié)果165.1JTAG仿真器介紹165.2現(xiàn)象及結(jié)果176結(jié)論18致謝19參考文獻(xiàn)201前言1.1ARM應(yīng)用背景如今,學(xué)習(xí)一種處理器的就有許多ARM內(nèi)核的處理器可供使用,現(xiàn)在社會(huì)已步入嵌入式學(xué)習(xí)階段。在嵌入式領(lǐng)域,8位處理器已經(jīng)不再勝任一些復(fù)雜的應(yīng)用,比如GUI,TCP/IP,FILESYSTEM等,而ARM芯片憑借強(qiáng)大的處理能力和極低的功耗,非常適合這些場(chǎng)合。現(xiàn)在越來越多的產(chǎn)品在選型的時(shí)候考慮到使用ARM處理器,ARM的應(yīng)用是相當(dāng)?shù)膹V泛。ARM處理器ADCI/O接口ARM處理器ADCI/O接口鍵盤RAMLED傳感器轉(zhuǎn)換器LCDDACEPROM主機(jī)輸入輸出圖1-1ARM嵌入式工業(yè)控制系統(tǒng)的功能模塊目前已有超過85%的無線通信設(shè)備采用了ARM技術(shù),ARM以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。ARM在此方面的應(yīng)用如:手提式計(jì)算機(jī)、移動(dòng)電話、PDA等。隨著寬帶技術(shù)的推廣,采用ARM技術(shù)的ADSL芯片正逐步獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。此外,ARM在語音及視頻處理上進(jìn)行了優(yōu)化,并獲得廣泛支持。ARM技術(shù)在目前流行的數(shù)字音頻播放器、數(shù)字機(jī)頂盒、游戲機(jī)、數(shù)碼相機(jī)、數(shù)字式電視機(jī)、GPS、機(jī)頂盒中得到廣泛采用。現(xiàn)在流行的數(shù)碼相機(jī)和打印機(jī)中絕大部分采用ARM技術(shù),手機(jī)中的32位SIM智能卡也采用了ARM技術(shù)。如圖1-2所示是基于ARM技術(shù)的數(shù)碼相機(jī)的功能模塊[9]。ARMARM處理器LCD控制器主機(jī)接口CCDADC控制電路和編碼電路存儲(chǔ)器圖1-2基于ARM技術(shù)的數(shù)碼相機(jī)的功能模塊1.2研究?jī)?nèi)容本設(shè)計(jì)旨在加深對(duì)ARM的學(xué)習(xí),鞏固大學(xué)四年所學(xué)專業(yè)知識(shí),提升動(dòng)手能力和思考問題解決問題的能力。本設(shè)計(jì)選擇意法半導(dǎo)體的STM32F103系列處理器,通過自制STM32開發(fā)板的過程,和對(duì)STM32F103C8T6芯片的研究學(xué)習(xí),掌握其各種外設(shè)功能。STM32F103VET6具有一個(gè)SDIO接口。SD/SDIO/MMC主機(jī)接口可以支持MMC卡系統(tǒng)規(guī)范4.2版中的3個(gè)不同的數(shù)據(jù)總線模式:1位<默認(rèn)>、4位和8位。在8位模式下,該接口可以使數(shù)據(jù)傳輸速率達(dá)到48MHz,該接口兼容SD存儲(chǔ)卡規(guī)范2.0版。SDIO存儲(chǔ)卡規(guī)范2.0版支持兩種數(shù)據(jù)總線模式:1位<默認(rèn)>和4位。目前的芯片版本只能一次支持一個(gè)SD/SDIO/MMC4.2版的卡,但可以同時(shí)支持多個(gè)MMC4.1版或之前版本的卡。除了SD/SDIO/MMC,這個(gè)接口完全與CE-ATA數(shù)字協(xié)議版本1.1兼容。本實(shí)訓(xùn)的作品是利用基于ARMCotex-M3內(nèi)核的嵌入式處理器STM32自帶的SDIO硬件接口來驅(qū)動(dòng)SD卡,并結(jié)合文件系統(tǒng)FATFSR0.07C來完成一個(gè)基于嵌入式ARM的SD卡讀寫的作品,現(xiàn)實(shí)向SD卡寫入一個(gè)txt文件,并讀取SD卡的文件目標(biāo)并通過串口打印到PC機(jī)顯示。本文第一章講述了該論文寫作背景,主要闡述了ARM應(yīng)用范疇,以及該論文研究的內(nèi)容;第二章講述了該研究課題使用的核心芯片STM32F103VET6的各項(xiàng)參數(shù);第三章著重介紹了SDIO的原理及實(shí)現(xiàn)方法;第四章著重介紹了FAT文件系統(tǒng)的原理;第五章介紹了測(cè)試方法和結(jié)果。1.3研究成果給硬件系統(tǒng)供電<5V>,插上JLINK,插上串口線<兩頭都是母的交叉線>,插上MicroSD卡,打開超級(jí)終端,配置超級(jí)終端為1152008-N-1,將編譯好的程序下載到硬件平臺(tái),即可看到超級(jí)終端打印出如下信息:圖1-3顯示結(jié)果圖2STM32處理器概述2.1STM32簡(jiǎn)介STM32F103xx增強(qiáng)型系列使用高性能的ARM/Cortex-M3/32位的RISC內(nèi)核,工作頻率為72MHz,內(nèi)置高速存儲(chǔ)器<高達(dá)128K字節(jié)的閃存和20K字節(jié)的SRAM>,豐富的增強(qiáng)I/O端口和聯(lián)接到兩條APB總線的外設(shè)。所有型號(hào)的器件都包含2個(gè)12位的ADC、3個(gè)通用16位定時(shí)器和一個(gè)PWM定時(shí)器,還包含標(biāo)準(zhǔn)和先進(jìn)的通信接口:多達(dá)2個(gè)I2C和SPI、3個(gè)USART、一個(gè)USB和一個(gè)CAN。STM32F103xx增強(qiáng)型系列工作于-40℃至+105℃的溫度范圍,供電電壓2.0V至3.6V,一系列的省電模式保證低功耗應(yīng)用的要求。完整的STM32F103xx增強(qiáng)型系列產(chǎn)品包括從36腳至100腳的五種不同封裝形式;根據(jù)不同的封裝形式,器件中的外設(shè)配置不盡相同。下面給出了該系列產(chǎn)品中所有外設(shè)的基本介紹。這些豐富的外設(shè)配置,使得STM32F103xx增強(qiáng)型微控制器適合于多種應(yīng)用場(chǎng)合:·電機(jī)驅(qū)動(dòng)和應(yīng)用控制;·醫(yī)療和手持設(shè)備;·PC外設(shè)和GPS平臺(tái);·工業(yè)應(yīng)用:可編程控制器、變頻器、打印機(jī)和掃描儀;·警報(bào)系統(tǒng),視頻對(duì)講,和暖氣通風(fēng)空調(diào)系統(tǒng);2.1.1STM32F103VET6的參數(shù)STM32F103VET6芯片的參數(shù)如表2-1表2-1器件功能和配置<STM32F103xx增強(qiáng)型>芯片引腳圖如圖2-2:圖2-2STM32F103xx增強(qiáng)型LQPFP100管腳圖2.2內(nèi)部資源STM32有豐富的內(nèi)部資源,如下所示:·RealViewMDK〔MiertocontrollerDevelopmentKit基于ARM微控制器的專業(yè)嵌入式開發(fā)工具;·內(nèi)置閃存存儲(chǔ)器;·內(nèi)置SRAM;·嵌套的向量式中斷控制器<NVIC>;·外部中斷/事件控制器<EXTI>;·時(shí)鐘和啟動(dòng);·自舉模式;·DMA;·RTC<實(shí)時(shí)時(shí)鐘>和后備寄存器;·窗口看門狗;·I2C總線;·通用同步/異步接受發(fā)送器<USART>;·串行外設(shè)接口<SPI>;·控制器區(qū)域網(wǎng)絡(luò)<CAN>;·通用串行總線<USB>;·通用輸入輸出接口<GPIO>;·ADC<模擬/數(shù)字轉(zhuǎn)換器>;·溫度傳感器;·串行線JTAG調(diào)試口<SWJ-DP>。2.3Cortex-M3內(nèi)核簡(jiǎn)介Cortex-M3內(nèi)核包含一個(gè)適用于傳統(tǒng)Thumb和新型Thumb-2指令的譯碼器、一個(gè)支持硬件乘法和硬件除法的先進(jìn)ALU、控制邏輯和用于連接處理器其他部件的接口。Cortex-M3處理器是首款基于ARMv7-M架構(gòu)的ARM處理器。中央Cortex-M3內(nèi)核使用3級(jí)流水線哈佛架構(gòu),運(yùn)用分支預(yù)測(cè)、單周期乘法和硬件除法功能實(shí)現(xiàn)了出色的效率〔1.25DMIPS/MHz。Cortex-M3處理器是一個(gè)32位處理器,帶有32位寬的數(shù)據(jù)路徑、寄存器庫和基于傳統(tǒng)ARM7處理器的系統(tǒng)只支持訪問對(duì)齊的數(shù)據(jù),沿著對(duì)齊的字邊界即可對(duì)數(shù)據(jù)進(jìn)行訪問和存儲(chǔ)。Cortex-M3處理器采用非對(duì)齊數(shù)據(jù)訪問方式,使非對(duì)齊數(shù)據(jù)可以在單核訪問中進(jìn)行傳輸。 Cortex-M3處理器是專為那些對(duì)成本和功耗非常敏感但同時(shí)對(duì)性能要求又相當(dāng)高的應(yīng)用而設(shè)計(jì)的。憑借縮小的內(nèi)核尺寸和出色的中斷延遲性能、集成的系統(tǒng)部件、靈活的配置、簡(jiǎn)單的高級(jí)編程和強(qiáng)大的軟件系統(tǒng),Cortex-M3處理器將成為從復(fù)雜的芯片系統(tǒng)到低端微控制器等各種系統(tǒng)的理想解決方案。表2-3為Cortex-M3處理器與ARM7作比較。表2-3Cortex-M3與ARM7相比較2.4STM32SDIO簡(jiǎn)介2.4.1SDIO簡(jiǎn)介STM32F103VET6具有一個(gè)SDIO接口。SD/SDIO/MMC主機(jī)接口可以支持MMC卡系統(tǒng)規(guī)范4.2版中的3個(gè)不同的數(shù)據(jù)總線模式:1位<默認(rèn)>、4位和8位。在8位模式下,該接口可以使數(shù)據(jù)傳輸速率達(dá)到48MHz,該接口兼容SD存儲(chǔ)卡規(guī)范2.0版。SDIO存儲(chǔ)卡規(guī)范2.0版支持兩種數(shù)據(jù)總線模式:1位<默認(rèn)>和4位。目前的芯片版本只能一次支持一個(gè)SD/SDIO/MMC4.2版的卡,但可以同時(shí)支持多個(gè)MMC4.1版或之前版本的卡。除了SD/SDIO/MMC,這個(gè)接口完全與CE-ATA數(shù)字協(xié)議版本1.1兼容。2.4.2SDIO功能特性〔1主要功能SD/SDIOMMC卡主機(jī)模塊<SDIO>在AHB外設(shè)總線和多媒體卡<MMC>、SD存儲(chǔ)卡、SDIO卡和CE-ATA設(shè)備間提供了操作接口。多媒體卡系統(tǒng)規(guī)格書由MMCA技術(shù)委員會(huì)發(fā)布,可以在多媒體卡協(xié)會(huì)的網(wǎng)站上<>獲得。CE-ATA系統(tǒng)規(guī)格書可以在CE-ATA工作組的網(wǎng)站上<>獲得。SDIO的主要功能如下:●與多媒體卡系統(tǒng)規(guī)格書版本4.2全兼容。支持三種不同的數(shù)據(jù)總線模式:1位<默認(rèn)>、4位和8位。●與較早的多媒體卡系統(tǒng)規(guī)格版本全兼容<向前兼容>?!衽cSD存儲(chǔ)卡規(guī)格版本2.0全兼容?!衽cSDI/O卡規(guī)格版本2.0全兼容:支持良種不同的數(shù)據(jù)總線模式:1位<默認(rèn)>和4位。●完全支持CE-ATA功能<與CE-ATA數(shù)字協(xié)議版本1.1全兼容>。●8位總線模式下數(shù)據(jù)傳輸速率可達(dá)48MHz。●數(shù)據(jù)和命令輸出使能信號(hào),用于控制外部雙向驅(qū)動(dòng)器。〔2SDIO總線拓?fù)淇偩€上的通信是通過傳送命令和數(shù)據(jù)實(shí)現(xiàn)。在多媒體卡/SD/SDI/O總線上的基本操作是命令/響應(yīng)結(jié)構(gòu),這樣的總線操作在命令或總線機(jī)制下實(shí)現(xiàn)信息交換;另外,某些操作還具有數(shù)據(jù)令牌。在SD/SDIO存儲(chǔ)器卡上傳送的數(shù)據(jù)是以數(shù)據(jù)塊的形式傳輸;在MMC上傳送的數(shù)據(jù)是以數(shù)據(jù)塊或數(shù)據(jù)流的形式傳輸;在CE-ATA設(shè)備上傳送的數(shù)據(jù)也是以數(shù)據(jù)塊的形式傳輸。3SDIO的原理及實(shí)現(xiàn)方法3.1原理SDIO包含2個(gè)部分:●SDIO適配器模塊:實(shí)現(xiàn)所有MMC/SD/SDI/O卡的相關(guān)功能,如時(shí)鐘的產(chǎn)生、命令和數(shù)據(jù)的傳送。●AHB總線接口:操作SDIO適配器模塊中的寄存器,并產(chǎn)生中斷和DMA請(qǐng)求信號(hào)。圖3-1SDIO框圖復(fù)位后默認(rèn)情況下SDIO_D0用于數(shù)據(jù)傳輸。初始化后主機(jī)可以改變數(shù)據(jù)總線的寬度。如果一個(gè)多媒體卡接到了總線上,則SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于數(shù)據(jù)傳輸。MMC版本V3.31和之前版本的協(xié)議只支持1位數(shù)據(jù)線,所以只能用SDIO_D0。如果一個(gè)SD或SDI/O卡接到了總線上,可以通過主機(jī)配置數(shù)據(jù)傳輸使用SDIO_D0或SDIO_D[3:0]。所有的數(shù)據(jù)線都工作在推挽模式。SDIO_CMD有兩種操作模式:●用于初始化時(shí)的開路模式<僅用于MMC版本V3.31或之前版本>●用于命令傳輸?shù)耐仆炷J?lt;SD/SDI/O卡和MMCV4.2在初始化時(shí)也使用推挽驅(qū)動(dòng)>SDIO_CK是卡的時(shí)鐘:每個(gè)時(shí)鐘周期在命令和數(shù)據(jù)線上傳輸1位命令或數(shù)據(jù)。對(duì)于多媒體卡V3.31協(xié)議,時(shí)鐘頻率可以在0MHz至20MHz間變化;對(duì)于多媒體卡V4.0/4.2協(xié)議,時(shí)鐘頻率可以在0MHz至48MHz間變化;對(duì)于SD或SDI/O卡,時(shí)鐘頻率可以在0MHz至25MHz間變化。SDIO使用兩個(gè)時(shí)鐘信號(hào):●SDIO適配器時(shí)鐘<SDIOCLK=HCLK>●AHB總線時(shí)鐘<HCLK/2>下表適用于多媒體卡/SD/SDI/O卡總線:表3-1SDIO引腳定義3.2SDIO適配器下圖是簡(jiǎn)化的SDIO適配器框圖:圖3-2SDIO適配器●命令通道狀態(tài)機(jī)<CPSM>當(dāng)寫入命令寄存器并設(shè)置了使能位,開始發(fā)送命令。命令發(fā)送完成時(shí),命令通道狀態(tài)機(jī)<CPSM>設(shè)置狀態(tài)標(biāo)志并在不需要響應(yīng)時(shí)進(jìn)入空閑狀態(tài)<見下圖>。當(dāng)收到響應(yīng)后,接收到的CRC碼將會(huì)與內(nèi)部產(chǎn)生的CRC碼比較,然后設(shè)置相應(yīng)的狀態(tài)標(biāo)志。當(dāng)進(jìn)入等待<Wait>狀態(tài)時(shí),命令定時(shí)器開始運(yùn)行;當(dāng)CPSM進(jìn)入接收<Receive>狀態(tài)之前,產(chǎn)生了超時(shí),則設(shè)置超時(shí)標(biāo)志并進(jìn)入空閑<Idle>狀態(tài)。●命令格式命令:命令是用于開始一項(xiàng)操作。主機(jī)向一個(gè)指定的卡或所有的卡發(fā)出帶地址的命令或廣播命令<廣播命令只適合于MMCV3.31或之前的版本>。命令在CMD線上串行傳送。所有命令的長(zhǎng)度固定為48位,下表給出了多媒體卡、SD存儲(chǔ)卡和SDIO卡上一般的命令格式。CE-ATA命令是MMCV4.2命令的擴(kuò)充,所以具有相同的格式。命令通道操作于半雙工模式,這樣命令和響應(yīng)可以分別發(fā)送和接收。如果CPSM不處在發(fā)送狀態(tài),SDIO_CMD輸出處于高阻狀態(tài)。SDIO_CMD上的數(shù)據(jù)與SDIO_CK的上升沿同步。3.3SDIO卡識(shí)別過程多媒體卡和SD卡的卡識(shí)別過程是有區(qū)別的;對(duì)于多媒體卡,卡識(shí)別過程以時(shí)鐘頻率Fod開始,所有SDIO_CMD輸出為開路驅(qū)動(dòng),允許在這個(gè)過程中的卡的并行連接,識(shí)別過程如下:1.總線被激活2.SDIO卡主機(jī)廣播發(fā)送SEND_OP_COND<CMD1>命令,并接收操作條件3.得到的響應(yīng)是所有卡的操作條件寄存器內(nèi)容的"線與"4.不兼容的卡會(huì)被置于非激活狀態(tài)5.SDIO卡主機(jī)廣播發(fā)送ALL_SEND_CID<CMD2>至所有激活的卡6.所有激活的卡同時(shí)串行地發(fā)送他們的CID號(hào),那些檢測(cè)到輸出的CID位與命令線上的數(shù)據(jù)不相符的卡必須停止發(fā)送,并等待下一個(gè)識(shí)別周期。最終只有一個(gè)卡能夠成功地傳送完整的CID至SDIO卡主機(jī)并進(jìn)入識(shí)別狀態(tài)。7.SDIO卡主機(jī)發(fā)送SET_RELATIVE_ADDR<CMD3>命令至這個(gè)卡,這個(gè)新的地址被稱為相對(duì)卡地址<RCA>,它比CID短,用于對(duì)卡尋址。至此,這個(gè)卡轉(zhuǎn)入待機(jī)狀態(tài),并不再響應(yīng)新的識(shí)別過程,同時(shí)它的輸出驅(qū)動(dòng)從開路轉(zhuǎn)變?yōu)橥仆炷J健?.SDIO卡主機(jī)重復(fù)上述步驟5至7,直到收到超時(shí)條件。對(duì)于SD卡而言,卡識(shí)別過程以時(shí)鐘頻率Fod開始,所有SDIO_CMD輸出為推挽驅(qū)動(dòng)而不是開路驅(qū)動(dòng),識(shí)別過程如下:1.總線被激活2.SDIO卡主機(jī)廣播發(fā)送SEND_APP_OP_COND<ACMD41>命令3.得到的響應(yīng)是所有卡的操作條件寄存器的內(nèi)容4.不兼容的卡會(huì)被置于非激活狀態(tài)5.SDIO卡主機(jī)廣播發(fā)送ALL_SEND_CID<CMD2>至所有激活的卡6.所有激活的卡發(fā)送回他們唯一卡識(shí)別號(hào)<CID>并進(jìn)入識(shí)別狀態(tài)。7.SDIO卡主機(jī)發(fā)送SET_RELATIVE_ADDR<CMD3>命令和一個(gè)地址到一個(gè)激活的卡,這個(gè)新的地址被稱為相對(duì)卡地址<RCA>,它比CID短,用于對(duì)卡尋址。至此,這個(gè)卡轉(zhuǎn)入待機(jī)狀態(tài)。SDIO卡主機(jī)可以再次發(fā)送該命令更改RCA,卡的RCA將是最后一次的賦值。8.SDIO卡主機(jī)對(duì)所有激活的卡重復(fù)上述步驟5至7。對(duì)于SDI/O卡而言,卡識(shí)別過程如下:1.總線被激活2.SDIO卡主機(jī)發(fā)送IO_SEND_OP_COND<CMD5>命令3.得到的響應(yīng)是卡的操作條件寄存器的內(nèi)容4.不兼容的卡會(huì)被置于非激活狀態(tài)5.SDIO卡主機(jī)發(fā)送SET_RELATIVE_ADDR<CMD3>命令和一個(gè)地址到一個(gè)激活的卡,這個(gè)新的地址被稱為相對(duì)卡地址<RCA>,它比CID短,用于對(duì)卡尋址。至此,這個(gè)卡轉(zhuǎn)入待機(jī)狀態(tài)。SDIO卡主機(jī)可以再次發(fā)送該命令更改RCA,卡的RCA將是最后一次的賦值。3.4SDIO寫數(shù)據(jù)塊執(zhí)行寫數(shù)據(jù)塊命令<CMD24-27>時(shí),主機(jī)把一個(gè)或多個(gè)數(shù)據(jù)塊從主機(jī)傳送到卡中,同時(shí)在每個(gè)數(shù)據(jù)塊的末尾傳送一個(gè)CRC碼。一個(gè)支持寫數(shù)據(jù)塊命令的卡應(yīng)該始終能夠接收由WRITE_BL_LEN定義的數(shù)據(jù)塊。如果CRC校驗(yàn)錯(cuò)誤,卡通過SDIO_D信號(hào)線指示錯(cuò)誤,傳送的數(shù)據(jù)被丟棄而不被寫入,所有后續(xù)<在多塊寫模式下>傳送的數(shù)據(jù)塊將被忽略。如果主機(jī)傳送部分?jǐn)?shù)據(jù),而累計(jì)的數(shù)據(jù)長(zhǎng)度未與數(shù)據(jù)塊對(duì)齊,當(dāng)不允許塊錯(cuò)位<未設(shè)置CSD的參數(shù)WRITE_BLK_MISALIGN>,卡將在第一個(gè)錯(cuò)位的塊之前檢測(cè)到塊錯(cuò)位錯(cuò)誤<設(shè)置狀態(tài)寄存器中的ADDRESS_ERROR錯(cuò)誤位>。當(dāng)主機(jī)試圖寫一個(gè)寫保護(hù)區(qū)域時(shí),寫操作也會(huì)被中止,此時(shí)卡會(huì)設(shè)置WP_VIOLATION位。設(shè)置CID和CSD寄存器不需要事先設(shè)置塊長(zhǎng)度,傳送的數(shù)據(jù)也是通過CRC保護(hù)的。如果CSD或CID寄存器的部分是存儲(chǔ)在ROM中,則這個(gè)不能更改的部分必須與接收緩沖區(qū)的對(duì)應(yīng)部分相一致,如果有不一致之處,卡將報(bào)告一個(gè)錯(cuò)誤同時(shí)不修改任何寄存器的內(nèi)容。有些卡需要長(zhǎng)的甚至不可預(yù)計(jì)的時(shí)間完成寫一個(gè)數(shù)據(jù)塊,在接收一個(gè)數(shù)據(jù)塊并完成CRC檢驗(yàn)后,卡開始寫操作,如果它的寫緩沖區(qū)已經(jīng)滿并且不能再?gòu)男碌腤RITE_BLOCK命令接受新的數(shù)據(jù)時(shí),它會(huì)把SDIO_D信號(hào)線拉低。主機(jī)可以在任何時(shí)候使用SEND_STATUS<CMD13>查詢卡的狀態(tài),卡將返回當(dāng)前狀態(tài)。READY_FOR_DATA狀態(tài)位指示卡是否可以接受新的數(shù)據(jù)或?qū)懖僮魇欠襁€在進(jìn)行。主機(jī)可以使用CMD7<選擇另一個(gè)卡>不選中某個(gè)卡,而把這個(gè)卡置于斷開狀態(tài),這樣可以釋放SDIO_D信號(hào)線而不中斷未完成的寫操作;當(dāng)重新選擇了一個(gè)卡,如果寫操作仍然在進(jìn)行并且寫緩沖區(qū)仍不能使用,它會(huì)重新通過拉低SDIO_D信號(hào)線指示忙的狀態(tài)。3.5SDIO讀數(shù)據(jù)塊在讀數(shù)據(jù)塊模式下,數(shù)據(jù)傳輸?shù)幕締卧菙?shù)據(jù)塊,它的大小在CSD中<READ_BL_LEN>定義。如果設(shè)置了READ_BL_PARTIAL,同樣可以傳送較小的數(shù)據(jù)塊,較小數(shù)據(jù)塊是指開始和結(jié)束地址完全包含在一個(gè)物理塊中,READ_BL_LEN定義了物理塊的大小。為保證數(shù)據(jù)傳輸?shù)恼_,每個(gè)數(shù)據(jù)塊后都有一個(gè)CRC校驗(yàn)碼。CMD17<READ_SINGLE_BLOCK>啟動(dòng)一次讀數(shù)據(jù)塊操作,在傳輸結(jié)束后卡返回到發(fā)送狀態(tài)。CMD18<READ_MULTIPLE_BLOCK>啟動(dòng)一次連續(xù)多個(gè)數(shù)據(jù)塊的讀操作。主機(jī)可以在多數(shù)據(jù)塊讀操作的任何時(shí)候中止操作,而不管操作的類型。發(fā)送停止傳輸命令即可中止操作。如果在多數(shù)據(jù)塊讀操作中<任一種類型>卡檢測(cè)到錯(cuò)誤<例如:越界、地址錯(cuò)位或內(nèi)部錯(cuò)誤>,它將停止數(shù)據(jù)傳輸并仍處于數(shù)據(jù)狀態(tài);此時(shí)主機(jī)必須發(fā)送停止傳輸命令中止操作。在停止傳輸命令的響應(yīng)中報(bào)告讀錯(cuò)誤。如果主機(jī)發(fā)送停止傳輸命令時(shí),卡已經(jīng)傳輸完一個(gè)確定數(shù)目的多個(gè)數(shù)據(jù)塊操作中的最后一個(gè)數(shù)據(jù)塊,因?yàn)榇藭r(shí)卡已經(jīng)不在數(shù)據(jù)狀態(tài),主機(jī)會(huì)得到一個(gè)非法命令的響應(yīng)。如果主機(jī)傳輸部分?jǐn)?shù)據(jù)塊,而累計(jì)的數(shù)據(jù)長(zhǎng)度不能與物理塊對(duì)齊同時(shí)不允許塊錯(cuò)位,卡會(huì)在出現(xiàn)第一個(gè)未對(duì)齊的塊時(shí)檢測(cè)出一個(gè)塊對(duì)齊錯(cuò)誤,并在狀態(tài)寄存器中設(shè)置ADDRESS_ERROR錯(cuò)誤標(biāo)志。4FatFS文件系統(tǒng)4.1FatFS文件系統(tǒng)簡(jiǎn)介FAFFS是面向小型嵌入式系統(tǒng)的一種通用的FAT文件系統(tǒng)。FATFS完全是由AISIC語言編寫并且完全獨(dú)立于底層的I/O介質(zhì)。因此它可以很容易地不加修改地移植到其他的處理器當(dāng)中,如8051、PIC、AVR、SH、Z80、H8、ARM等。FATFS支持FAT12、FAT16、FAT32等格式,所以我們利用前面寫好的SDIO驅(qū)動(dòng),把FATFS文件系統(tǒng)代碼移植到工程之中,就可以利用文件系統(tǒng)的各種函數(shù),對(duì)已格式化的SD卡進(jìn)行讀寫文件了。4.2FatFS文件系統(tǒng)移植4.2.1移植前工作在移植FATFS文件系統(tǒng)之前,我們先要到FAT的官網(wǎng)獲取源碼,版本為R0.07C。解壓之后可看到里面有doc和src這兩個(gè)文件夾。doc文件夾里面是一些使用文檔,src里面是文件系統(tǒng)的源碼。圖4-1FATFS源碼4.2.2開始移植首先我們要獲取一個(gè)完全沒有修改過的文件系統(tǒng)源碼,然后在10-MicroSD卡這個(gè)文件夾下的實(shí)驗(yàn)代碼下移植,這個(gè)實(shí)驗(yàn)代碼實(shí)現(xiàn)的是卡的底層的塊操作。注意,我們?cè)谝浦策@個(gè)文件系統(tǒng)的過程中會(huì)盡量保持文件系統(tǒng)源碼的純凈,盡量做到在修改最少量的源碼的情況下移植成功。FATFS模塊在移植的時(shí)候,我們一般只需要修改2個(gè)文件,即ffconf.h和diskio.c。FATFS模塊的所有配置項(xiàng)都是存放在ffconf.h里面,我們可以通過配置里面的一些選項(xiàng),來滿足自己的需求。接下來我們介紹幾個(gè)重要的配置選項(xiàng)。1_FS_TINY。這個(gè)選項(xiàng)在R0.07版本中開始出現(xiàn),之前的版本都是以獨(dú)立的C文件出現(xiàn)〔FATFS和TinyFATFS,有了這個(gè)選項(xiàng)之后,兩者整合在一起了,使用起來更方便。我們使用FATFS,所以把這個(gè)選項(xiàng)定義為0即可。2_FS_READONLY。這個(gè)用來配置是不是只讀,本章我們需要讀寫都用,所以這里設(shè)置為0即可。3_USE_STRFUNC。這個(gè)用來設(shè)置是否支持字符串類操作,比如f_putc,f_puts等,本章我們需要用到,故設(shè)置這里為1。4_USE_MKFS。這個(gè)用來定時(shí)是否使能格式化,本章需要用到,所以設(shè)置這里為1。5_USE_FASTSEEK。這個(gè)用來使能快速定位,我們?cè)O(shè)置為1,使能快速定位。6_CODE_PAGE。這個(gè)用于設(shè)置語言類型,包括很多選項(xiàng)〔見FATFS官網(wǎng)說明,我們這里設(shè)置為936,即簡(jiǎn)體中文〔GBK碼,需要c936.c文件支持,該文件在option文件夾。7_USE_LFN。該選項(xiàng)用于設(shè)置是否支持長(zhǎng)文件名〔還需要_CODE_PAGE支持,取值范圍為0~3。0,表示不支持長(zhǎng)文件名,1~3是支持長(zhǎng)文件名,但是存儲(chǔ)地方不一樣,我們選擇使用3,通過ff_memalloc函數(shù)來動(dòng)態(tài)分配長(zhǎng)文件名的存儲(chǔ)區(qū)域。8_VOLUMES。用于設(shè)置FATFS支持的邏輯設(shè)備數(shù)目,我們?cè)O(shè)置為2,即支持2個(gè)設(shè)備。9_MAX_SS。扇區(qū)緩沖的最大值,一般設(shè)置為512。下面我們來講講FATFS的移植,FATFS的移植主要分為3步:①數(shù)據(jù)類型:在integer.h里面去定義好數(shù)據(jù)的類型。這里需要了解你用的編譯器的數(shù)據(jù)類型,并根據(jù)編譯器定義好數(shù)據(jù)類型。②配置:通過ffconf.h配置FATFS的相關(guān)功能,以滿足你的需要。③函數(shù)編寫:打開diskio.c,進(jìn)行底層驅(qū)動(dòng)編寫,一般需要編寫6個(gè)接口函數(shù)。通過以上三步,我們即可完成對(duì)FATFS的移植。第一步,我們使用的是MDK3.80a編譯器,器數(shù)據(jù)類型和integer.h里面定義的一致,所以此步,我們不需要做任何改動(dòng)。第二步,關(guān)于ffconf.h里面的相關(guān)配置,我們?cè)谇懊嬉呀?jīng)有介紹〔之前介紹的9個(gè)配置,我們將對(duì)應(yīng)配置修改為我們介紹時(shí)候的值即可,其他的配置用默認(rèn)配置。第三步,因?yàn)镕ATFS模塊完全與磁盤I/O層分開,因此需要下面的函數(shù)來實(shí)現(xiàn)底層物理磁盤的讀寫與獲取當(dāng)前時(shí)間。底層磁盤I/O模塊并不是FATFS的一部分,并且必須由用戶提供。5測(cè)試及結(jié)果5.1JTAG仿真器介紹J-Link是支持仿真ARM內(nèi)核芯片的JTAG仿真器。配合IAREWARM,ADS,KEIL,WINARM,RealView等集成開發(fā)環(huán)境支持所有ARM7/ARM9內(nèi)核芯片的仿真,通過RDI接口和各集成開發(fā)環(huán)境無縫連接,操作方便、連接方便、簡(jiǎn)單易學(xué),是學(xué)習(xí)開發(fā)ARM最好最實(shí)用的開發(fā)工具。DQ電子推出的J-LinkV7仿真器采用原版固件,參照原版原理圖,經(jīng)過DQ團(tuán)隊(duì)的長(zhǎng)時(shí)間精工制作,板型合理,元件布局美觀大方,走線嚴(yán)謹(jǐn)精致,并且每一個(gè)產(chǎn)品都經(jīng)過功能和老化測(cè)試,功能完全與原版一致,支持在線升級(jí)。J-LinkARM主要特點(diǎn):·IAREWARM集成開發(fā)環(huán)境無縫連接的JTAG仿真器?!ぶС炙蠥RM7/ARM9內(nèi)核的芯片,以及cortexM3,包括Thumb模式?!ぶС諥DS,IAR,KEIL,WINARM,REALVIEW等幾乎所有的開發(fā)環(huán)境?!は螺d速度高達(dá)ARM7:600kB/s,ARM9:550kB/s,通過DCC最高可達(dá)800kB/s*最高JTAG速度12MHz。·目標(biāo)板電壓范圍1.2V-3.3V。·自動(dòng)速度識(shí)別功能。·監(jiān)測(cè)所有JTAG信號(hào)和目標(biāo)板電壓?!ね耆床寮从??!な褂肬SB電源〔可接通J12跳線給目標(biāo)板供電,出廠時(shí)未接通?!SB連接線和20芯JTAG連接排線。·支持多JTAG器件串行連接。·標(biāo)準(zhǔn)20芯JTAG仿真插頭。·帶J-LinkTCP/IPserver,允許通過TCP/IP網(wǎng)絡(luò)使用J-Link支持的內(nèi)核:·ARM7TDMI〔Rev1;·ARM7TDMI〔Rev3;·ARM7TDMI-S〔Rev4;·ARM720T;·CORTEXM3。5.2現(xiàn)象及結(jié)果給硬件系統(tǒng)供電<5V>,插上JLINK,插上串口線<兩頭都是母的交叉線>,插上MicroSD卡,打開超級(jí)終端,配置超級(jí)終端為1152008-N-1,將編譯好的程序下載到硬件平臺(tái),即可看到超級(jí)終端打印出如下信息:圖5-1測(cè)試效果圖6結(jié)論很多單片機(jī)系統(tǒng)都需要大容量存儲(chǔ)設(shè)備,以存儲(chǔ)數(shù)據(jù)。目前常用的有U盤,FLASH芯片,SD卡等。他們各有優(yōu)點(diǎn),綜合比較,最適合單片機(jī)系統(tǒng)的莫過于SD卡了,它不僅容量可以做到很大〔32Gb以上,而且支持SPI接口,方便移動(dòng),并且有幾種體積的尺寸可供選擇〔標(biāo)準(zhǔn)的SD卡尺寸,以及TF卡尺寸等,能滿足不同應(yīng)用的要求。本實(shí)訓(xùn)的作品是利用基于ARMCotex-M3內(nèi)核的嵌入式處理器STM32自帶的SDIO硬件接口來驅(qū)動(dòng)SD卡,并結(jié)合文件系統(tǒng)FATFSR0.07C來完成一個(gè)基于嵌入式ARM的SD卡讀寫的作品,現(xiàn)實(shí)向SD卡寫入一個(gè)txt文件,并讀取SD卡的文件目標(biāo)并通過串口打印到PC機(jī)顯示。通過本實(shí)訓(xùn),我更加掌握了嵌入式ARMSTM32的外圍應(yīng)用設(shè)計(jì)以及SD卡的驅(qū)動(dòng)和文件系統(tǒng)的使用方法。致謝本實(shí)訓(xùn)從最初的選題到系統(tǒng)設(shè)計(jì)、程序編寫直到論文的撰寫過程中都得到了孫安青老師的悉心指導(dǎo)與指正,您細(xì)心教導(dǎo)和熱心關(guān)懷使得我能夠順利完成本次實(shí)訓(xùn)任務(wù)。孫老師熱心的工作態(tài)度、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,也使我受益匪淺,終生難忘。同時(shí)要感謝我們班各位同學(xué),你們細(xì)心地給我分析該設(shè)計(jì)的設(shè)計(jì)流程,耐心地講解程序運(yùn)行過程,并給設(shè)計(jì)的不足提出很好的建議和方針,是你們的幫助,讓我對(duì)本設(shè)計(jì)理解更透徹,在此表示衷心地感謝.大學(xué)里我并不孤獨(dú),在老師和同學(xué)們陪伴下,我度過了愉快的四年,在此衷心感謝大家參考文獻(xiàn)[1]康華光.電子技術(shù)基礎(chǔ)模擬部分第四版[M].北京:高等教育出版社,1999.6.[2]閻石.數(shù)字電子技術(shù)基礎(chǔ)第四版[M].北京:高等教育出版社,1999.6.[3]王福瑞等.單片微機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全[M].北京航空航天大學(xué)出版社,1998<331-337>.[4]寧改娣,楊拴科.DSP控制器原理及應(yīng)用[M].科學(xué)出版社,2002.[5]周立功等.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005.1.[6]周立功等.ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程[M].北京:北京航空航天大學(xué)出版社,2005.1.[7]唐清善.ProtelDXP高級(jí)實(shí)例教程[M].中國(guó)水利水電出版社,2004.4.[8]羅浩等.一種新的基于ARM的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].XX師范學(xué)院學(xué)報(bào)<自然科學(xué)版>,2006.4.[9]秦偉等.基于ARM處理器的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用.2006年第1期.[10]杜春雷.ARM體系結(jié)構(gòu)與編程.清華大學(xué)出版社,2003.[11]李寧.ARM開發(fā)工具ReaIViewMDK使用入門[M].北京航空航天大學(xué)出版社,2008.[12]李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京航空航天大學(xué)出版社,2008.[13]劉黎明等.單片機(jī)與嵌入式系統(tǒng)應(yīng)用[J].英文刊名MICROCONTROLLER&EMBEDDEDSYSTEM.2002<7>.[14]趙葵銀,王輝,吳俊.電壓空間矢量控制的三相PWM整流器的研究[J].上海第二工業(yè)大學(xué)學(xué)報(bào),2003<2>:43-50.[15]MalinowskiMariusz.Jasin'skiMarek,KazmierkowskiMarianP.SimpleDirectPowerControlofThree-PhasePWMRectifierUsingSpace-VectorModulation[J].IEEETransactionsonIndustrial,Electronics,2004,51<2>:447-454.附

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論