




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
大連科技學(xué)院2013屆本科畢業(yè)生設(shè)計(jì)(論文)前言SD卡(SecureDigitalMemoryCard)中文翻譯為安全數(shù)碼卡,是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機(jī)、個人數(shù)碼助理(PDA)和多媒體播放器等。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。SD卡為9引腳,目的是通過把傳輸方式由串行變成并行,以提高傳輸速度。它最大的特點(diǎn)就是通過加密功能,可以保證數(shù)據(jù)資料的安全保密,它還具備版權(quán)保護(hù)技術(shù),所采用的版權(quán)保護(hù)技術(shù)是DVD中使用的CPRM技術(shù)(可刻錄介質(zhì)內(nèi)容保護(hù))。大小猶如一張郵票的SD記憶卡,重量只有2克,但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性。近年來,單片機(jī)系統(tǒng)發(fā)展迅猛,這不僅體現(xiàn)在CPU處理能力迅速提升、外界設(shè)備與處理器交互能力快速提高,更體現(xiàn)在單片機(jī)系統(tǒng)的復(fù)雜性日益提高、系統(tǒng)存儲容量急劇增大。這些變化對于數(shù)據(jù)操作的靈活性提出了越來越高的要求。因此,如何系統(tǒng)地、靈活地管理數(shù)據(jù)文件就成了單片機(jī)系統(tǒng)開發(fā)者無法回避的問題。文件系統(tǒng)的使用使開發(fā)者獲得“路徑”的概念,從而回避了存儲介質(zhì)的地址空間,不用每次都從頭對物理介質(zhì)進(jìn)行操作。文件系統(tǒng)提供清晰明了的API函數(shù),使上層應(yīng)用層不再關(guān)心底層存儲介質(zhì),而方便地利用標(biāo)準(zhǔn)接口訪問底層存儲器。標(biāo)準(zhǔn)化的接口和層次分明的程序增加了程序的可移植性。因此在單片機(jī)系統(tǒng)中植入文件系統(tǒng)是單片機(jī)系統(tǒng)發(fā)展的必然結(jié)果。由于該系統(tǒng)是通過SD卡模組向SD卡寫入一系列文件,這些文件需要被Windows系列操作系統(tǒng)正確識別,并進(jìn)行讀寫操作,因此,我們選擇了應(yīng)用最為廣泛的FAT16文件系統(tǒng)。FAT16是Microsoft開發(fā)的文件系統(tǒng),是一種技術(shù)成熟、結(jié)構(gòu)簡單、系統(tǒng)資源開銷小、易于在單片機(jī)系統(tǒng)上的硬件平臺上實(shí)現(xiàn)的文件系統(tǒng)。它是Microsoft公司在其MS2DOS操作系統(tǒng)中采用的文件系統(tǒng),具有出色的文件管理性能,能被當(dāng)前大多數(shù)操作系統(tǒng)識別。因此,SD卡與FAT16文件系統(tǒng)相結(jié)合是嵌入式數(shù)據(jù)存儲、記錄系統(tǒng)的理想方案,可以將采集記錄的數(shù)據(jù)直接在PC上讀取和處理。2系統(tǒng)方案設(shè)計(jì)本系統(tǒng)采用MCS251架構(gòu)的AT89S51單片機(jī)。AT89S51是一種低成本、低功耗、高性能的CMOS8位微控制器,具有8KB在系統(tǒng)可編程Flash存儲器。應(yīng)用AT89S52讀寫SD卡,首先要確定它們之間的通信方案。SD卡有2種可選的通信協(xié)議:SD模式和SPI模式。SD模式是SD卡的標(biāo)準(zhǔn)讀寫方式,選用此模式需要選擇帶SD卡控制接口的MCU或者額外的SD卡控制單元;SPI模式通過SPI總線完成SD卡與主控制器的通信。AT89S51沒有集成SD卡控制器,為了不增加額外的SD卡控制單元硬件成本,本設(shè)計(jì)方案采用SD卡的SPI通信模式。雖然AT89S51也沒有集成SPI接口模塊,但可以用軟件的方式模擬SPI接口時序。另外一個要解決的問題是SD卡與AT89S51的電平匹配。SD卡的邏輯電平相當(dāng)于3.3V的TTL電平標(biāo)準(zhǔn),AT89S51的邏輯電平為5VCMOS電平。解決電平匹配問題的原則有2條:一為輸出電平器件輸出的高電平的最小值,應(yīng)該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應(yīng)該小于接收電平器件識別為低電平的最高電壓值??紤]到SD卡在SPI工作模式下,數(shù)據(jù)的傳輸都是單向的,這樣可以在單片機(jī)向SD卡傳輸數(shù)據(jù)時采用晶體管加下拉電阻的方法,基本電路如圖2-1所示。而在SD卡向單片機(jī)傳輸數(shù)據(jù)時可以采用直接連接,因?yàn)樗鼈冎g的電平剛好滿足上述的電平兼容原則,既經(jīng)濟(jì)又實(shí)用。這個方案需要雙電源供電,1個5V電源,1個3.3V電源。3系統(tǒng)硬件部分設(shè)計(jì)3.1SD卡簡介SD卡在24mm×32mm×2.1mm的體積內(nèi)結(jié)合了SanDisk快閃記憶卡控制與MLC(MultilevelCell)技術(shù)和Toshiba(東芝)0.16u及0.13u的NAND技術(shù),通過9針的接口界面與專門的驅(qū)動器相連接,不需要額外的電源來保持其上記憶的信息。而且它是一體化固體介質(zhì),沒有任何移動部分,所以不用擔(dān)心機(jī)械運(yùn)動的損壞。SD卡的技術(shù)建是基于MultiMedia卡(MMC)格式上發(fā)展而來,大小和MMC差不多,尺寸為32mmx24mmx2.1mm。長寬和MMC一樣,只是比MMC厚了0.7mm,以容納更大容量的存貯單元。SD卡與MMC卡保持著向上兼容,也就是說,MMC可以被新的SD設(shè)備存取,兼容性則取決于應(yīng)用軟件,但SD卡卻不可以被MMC設(shè)備存取。(SD卡外型采用了與MMC厚度一樣的導(dǎo)軌式設(shè)計(jì),以使SD設(shè)備可以適合MMC)。SD接口除了保留MMC的7針外,還在兩邊加多了2針,作為數(shù)據(jù)線。采用了NAND型FlashMemory,基本上和SmartMedia的一樣,平均數(shù)據(jù)傳輸率能達(dá)到2MB/s。SD卡還提供不同的速度,它是按CD-ROM的150kB/秒為1倍速的速率計(jì)算方法來計(jì)算的?;旧?,它們能夠比標(biāo)準(zhǔn)CD-ROM的傳輸速度快6倍(900kB/秒),而高速的SD卡更能傳輸66x(10MB/秒)以及133x或更高的速度。一些數(shù)碼相機(jī)需要高速SD卡來更流暢地拍攝影片,和連續(xù)拍攝相片更迅速。直至2005年12月,大部分設(shè)備跟從SD卡的1.01規(guī)格,而更高速至133x的設(shè)備亦跟從1.1規(guī)格。設(shè)有SD卡插槽的設(shè)備能夠使用較簿身的MMC卡,但是標(biāo)準(zhǔn)的SD卡卻不能插入到MMC卡插槽。SD卡能夠于CF卡和PCMCIA卡上,插上轉(zhuǎn)接器使用;而miniSD卡和microSD卡亦能插上轉(zhuǎn)接器于SD卡插槽使用。一些USB連接器能夠插上SD卡,而且一些讀卡器亦能夠插上SD卡,并由許多連接埠,例如USB、FireWire等存取使用。SD卡的結(jié)構(gòu)能保證數(shù)字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應(yīng)用領(lǐng)域,音樂、電影、新聞等多媒體文件都可以方便地保存到SD卡中。因此不少數(shù)碼相機(jī)也開始支持SD卡。3.1.1SD卡的使用SD卡應(yīng)用于以下的手提數(shù)碼裝置:●數(shù)碼相機(jī)儲存相片及短片●數(shù)碼攝錄機(jī)儲存相片及短片●個人數(shù)碼助理(PDA)儲存各類資料●手提電話儲存相片、鈴聲、音樂、短片等資料●多媒體播放器SD卡多用于MP3隨身聽、數(shù)碼攝像機(jī)、數(shù)碼相機(jī)等,也有用于筆記本電腦上。其投影面積與MMC卡相同,只是略微厚一點(diǎn),為2.1mm,但是SD卡的容量大得多,且讀寫速度也MMC卡快4倍。同時,SD卡的接口與MMC卡是兼容的,支持SD卡的接口大多支持MMC卡。目前SD卡在數(shù)碼相機(jī)中正在迅速普及,大有成為主流之勢。SD卡在今年的發(fā)展很快,已經(jīng)開始威脅到CF卡的市場分額了。這是由于SD卡的體積要比CF卡小很多,并且SD卡在容量、性能和價(jià)格上和CF卡的差距越來越小,而這兩年支持SD卡的手機(jī)迅速在市場走熱,因此,SD卡的迅速成長絕對不是偶然的。最重要的一點(diǎn)就是MMC卡也能和SD卡相兼容,這也正是SD卡迅速走紅的原因之一。不過注意的是,在某些產(chǎn)品例如手機(jī)上,SD卡和MMS卡是不能兼容的?,F(xiàn)在的SD卡容量由8MB到32GB不等。3.1.2SD卡發(fā)展歷程在2006年,SD卡容量有8、16、32、64、128、256、或512MB,1、2、4、6、8(SDHC)GB。SD/MMC卡已經(jīng)替代東芝開發(fā)的SM卡,成為了便攜式數(shù)碼相機(jī)使用最廣泛的數(shù)字存儲卡格式。2001年SM卡的市場占有率超過50%,但到了2005年下降到了40%左右,并且還在快速滑落。大部分的數(shù)碼相機(jī)生產(chǎn)商都提供了SD卡的支持,包括佳能、尼康、柯達(dá)、松下及柯尼卡美能達(dá)等。三大主要廠商仍然在堅(jiān)持使用自己的專利格式:奧林巴斯和富士使用xD卡,索尼使用MemoryStick。另外,SD卡還沒有攻入CF卡占絕對地位的數(shù)碼單鏡反光相機(jī)市場。(除2005年尼康新發(fā)布的D50支持SD。)SD卡是東芝在MMC卡技術(shù)中加入加密技術(shù)硬件而成,由于MMC卡可能會較易讓使用者復(fù)制數(shù)碼音樂,東芝便加入這些技術(shù)希望令音樂業(yè)界安心。類似的技術(shù)包括索尼的MagicGate,理論上加密技術(shù)可引入一些數(shù)碼版權(quán)管理措施,但這功能甚少被應(yīng)用。用戶可以使用一個USB的讀卡器,在個人電腦上使用SD卡。某些新型電腦上已經(jīng)內(nèi)置了讀卡裝置。最新的發(fā)展是SD內(nèi)建了USB插口,省略了讀卡器。SanDisk的設(shè)計(jì)是使用一個可折疊的護(hù)套來保護(hù)USB插口。盡管Sandisk并不是第一家內(nèi)建USB功能的SD卡生產(chǎn)商,但由于其在業(yè)內(nèi)的重要地位。這一動作帶動了其他廠商跟風(fēng)。3.2單片機(jī)的介紹AT89S51是美國ATMEL生產(chǎn)的低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4Kbytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲器既可在線編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程及通用8位微處理器于單片機(jī)芯片中,ATMEL公司的功能強(qiáng)大,低價(jià)位AT89S51單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。AT89S51主要功能列舉如下:①為一般控制應(yīng)用的8位單芯片。②晶片內(nèi)部具有時鐘振蕩器(傳統(tǒng)最高工作頻率可至12MHz)。③內(nèi)部程式存儲器(ROM為4KB)。④內(nèi)部數(shù)據(jù)存儲器(RAM為128B)。⑤32條雙向輸入輸出線,且每條均可以單獨(dú)做I/O的控制。⑥5個中斷向量源。⑦2組獨(dú)立的16位定時器。⑧單芯片提供位邏輯運(yùn)算指令。AT89S51管腳排列及系統(tǒng)所用引腳功能介紹。管腳排列如圖3-1所示,下面介紹引腳的功能。圖1-1AT89S51引腳圖1.VCC:AT89S51電源正端輸入,接+5V。2.GND:電源地端。3.XTAL1:單芯片系統(tǒng)時鐘的反相放大器輸入端。4.XTAL2:系統(tǒng)時鐘的反相放大器輸出端。5.PORT0:(P0.0~P0.7):端口0是一個8位寬的開路漏極(OpenDrain)雙向輸出入端口。P0在當(dāng)做I/O用時可以推動8個LS的TTL負(fù)載。6.PORT2(P2.0~P2.7):端口2是具有內(nèi)部提升電路的雙向I/O端口,每一個引腳可以推動4個LS的TTL負(fù)載,若將端口2的輸出設(shè)為高電平時,此端口便能當(dāng)成輸入端口來使用。7.PORT1(P1.0~P1.7):端口1也是具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個LSTTL負(fù)載,同樣地若將端口1的輸出設(shè)為高電平,便是由此端口來輸入數(shù)據(jù)。8.PORT3(P3.0~P3.7):端口3也具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個TTL負(fù)載,同時還多工具有其他的額外特殊功能,包括串行通信、外部中斷控制、計(jì)時計(jì)數(shù)控制及外部數(shù)據(jù)存儲器內(nèi)容的讀取或?qū)懭肟刂频裙δ?。其引腳分配如下:9.P3.0:RXD,串行通信輸入。P3.1:TXD,串行通信輸出。P3.2:INT0,外部中斷0輸入。P3.3:INT1,外部中斷1輸入。P3.4:T0,計(jì)時計(jì)數(shù)器0輸入。P3.5:T1,計(jì)時計(jì)數(shù)器1輸入。P3.6:WR:外部數(shù)據(jù)存儲器的寫入信號。P3.7:RD,外部數(shù)據(jù)存儲器的讀取信號。3.2.1單片機(jī)歷史單片機(jī)誕生于20世紀(jì)70年代末,經(jīng)歷了SCM、MCU、SoC三大階段。1.SCM即單片微型計(jì)算機(jī)(SingleChipMicrocomputer)階段,主要是尋求最佳的單片形態(tài)嵌入式系統(tǒng)的最佳體系結(jié)構(gòu)。“創(chuàng)新模式”獲得成功,奠定了SCM與通用計(jì)算機(jī)完全不同的發(fā)展道路。在開創(chuàng)嵌入式系統(tǒng)獨(dú)立發(fā)展道路上,Intel公司功不可沒。2.MCU即微控制器(MicroControllerUnit)階段,主要的技術(shù)發(fā)展方向是:不斷擴(kuò)展?jié)M足嵌入式應(yīng)用時,對象系統(tǒng)要求的各種外圍電路與接口電路,突顯其對象的智能化控制能力。它所涉及的領(lǐng)域都與對象系統(tǒng)相關(guān),因此,發(fā)展MCU的重任不可避免地落在電氣、電子技術(shù)廠家。從這一角度來看,Intel逐漸淡出MCU的發(fā)展也有其客觀因素。在發(fā)展MCU方面,最著名的廠家當(dāng)數(shù)Philips公司。Philips公司以其在嵌入式應(yīng)用方面的巨大優(yōu)勢,將MCS-51從單片微型計(jì)算機(jī)迅速發(fā)展到微控制器。因此,當(dāng)我們回顧嵌入式系統(tǒng)發(fā)展道路時,不要忘記Intel和Philips的歷史功績。3.單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路單片機(jī)是嵌入式系統(tǒng)的獨(dú)立發(fā)展之路,向MCU階段發(fā)展的重要因素,就是尋求應(yīng)用系統(tǒng)在芯片上的最大化解決;因此,專用單片機(jī)的發(fā)展自然形成了SoC化趨勢。隨著微電子技術(shù)、IC設(shè)計(jì)、EDA工具的發(fā)展,基于SoC的單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)會有較大的發(fā)展。因此,對單片機(jī)的理解可以從單片微型計(jì)算機(jī)、單片微控制器延伸到單片應(yīng)用系統(tǒng)。3.2.2單片機(jī)的特點(diǎn)1、具有優(yōu)異的性能價(jià)格比;2、集成度高、體積小、可靠性高;3、控制功能強(qiáng);4、低電壓、低功耗。3.2.3單片機(jī)的基本組成它由CPU、存儲器(包括RAM和ROM)、I/O接口、定時/計(jì)數(shù)器、中斷控制功能等均集成在一塊芯片上,片內(nèi)各功能通過內(nèi)部總線相互連接起來。 輸入/輸出引腳P0、P1、P2、P3的功能:P0.0-P0.7:P0口是一個8位漏極開路型雙向I/O端口。在訪問片外存儲器時,它分時作低8位地址和8位雙向數(shù)據(jù)總線用。在EPROM編程時,由P0輸入指令字節(jié),而在驗(yàn)證程序時,則輸出指令字節(jié)。驗(yàn)證程序時,要求外接上拉電阻。P0能以吸收電流的方式驅(qū)動8個LSTTL負(fù)載。P1.0~P1.7(1~8腳):P1是一上帶內(nèi)部上拉電阻的8位雙向I/O口。在EPROM編程和驗(yàn)證程序時,由它輸入低8位地址。P1能驅(qū)動4個LSTTL負(fù)載。在8032/8052中,P1.0還相當(dāng)于專用功能端T2,即定時器的計(jì)數(shù)觸發(fā)輸入端;P1.1還相當(dāng)于專用功能端T2EX,即定時器T2的外部控制端。P2.0~P2.7(21~28腳):P2也是一上帶內(nèi)部上拉電阻的8位雙向I/O口。在訪問外部存儲器時,由它輸出高8位地址。在對EPROM編程和程序驗(yàn)證時,由它輸入高8位地址。P2可以驅(qū)動4個LSTTL負(fù)載。P3.0~P3.7(10~17腳):P3也是一上帶內(nèi)部上拉電阻的雙向I/O口。在MCS-51中,這8個引腳還用于專門的第二功能。P3能驅(qū)動4個LSTTL負(fù)載。P3.0RXD(串行口輸入)P3.1TXD(串行口輸出)P3.2INT0(外部中斷0輸入)P3.3INT1(外部中斷1輸入)P3.4T0(定時器0的外部輸入)P3.5T1(定時器1的外部輸入)P3.6WR(片外數(shù)據(jù)存儲器寫選通)P3.7RD(片外數(shù)據(jù)存儲器讀選通)3.3電源模塊SD卡的工作電平為3.3V,而控制芯片的邏輯電平為5VCMOS電平標(biāo)準(zhǔn)。因此,它們之間不能直接相連,否則可能會燒壞SD卡;出于對安全工作的考慮,有必要解決電平匹配問題。要解決這一問題,最根本的就是解決邏輯器件接口的要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應(yīng)該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應(yīng)該小于接收電平器件識別為低電平的最高電壓值。一般來說,通用的電平轉(zhuǎn)換方案是采用類似SN74ALVC4245的專用電平轉(zhuǎn)換芯片,這類芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同。但是,這個方案代價(jià)相對昂貴,而且一般的專用電平轉(zhuǎn)換芯片都是同時轉(zhuǎn)換8路、16路或者更多路數(shù)的電平,相對本系統(tǒng)僅僅需要轉(zhuǎn)換4路來說是一種資源的浪費(fèi)。電源電路原理圖如圖3.1。圖3-1電源電路原理圖3.4單片機(jī)最小系統(tǒng)單片機(jī)最小應(yīng)用系統(tǒng),指的是用最少的元件組成的單片機(jī)并且可以正常工作的系統(tǒng),對本次設(shè)計(jì)使用單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī),晶振電路以及復(fù)位電路。復(fù)位電路:主要由電容串聯(lián)電阻組成,結(jié)合“電容電壓不能突變”的性質(zhì)和圖例,可以知道,每當(dāng)系統(tǒng)一上電,RST腳則會出現(xiàn)由電路RC值決定的高電平。最為典型的51單片機(jī)每當(dāng)RST腳的高電平一直持續(xù)兩個機(jī)器周期以上就會復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠的復(fù)位。一般教科書推薦C取10u,R取8.2K當(dāng)然也有其他取法的,原則就是要讓RC組合可以在RST腳上產(chǎn)生不少于2個機(jī)周期的高電平至于如何具體定量計(jì)算,可以參考電路分析相關(guān)書籍。晶振電路:典型的晶振值取11.0592MHz(因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,用于有串口通訊的場合)/12MHz。(1)復(fù)位電路的用途單片機(jī)復(fù)位電路就好比電腦的重啟部分,當(dāng)電腦在使用中出現(xiàn)死機(jī),按下重啟按鈕電腦內(nèi)部的程序從頭開始執(zhí)行。單片機(jī)也一樣,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時候,按下復(fù)位按鈕內(nèi)部的程序自動從頭開始執(zhí)行。單片機(jī)復(fù)位電路如圖3-2所示。圖3-289S51最小系統(tǒng)圖(2)復(fù)位電路的工作原理在單片機(jī)系統(tǒng)中,系統(tǒng)上電啟動的時候復(fù)位一次,當(dāng)按鍵按下的時候系統(tǒng)再次復(fù)位,如果釋放后再按下,系統(tǒng)還會復(fù)位,所以可以通過按鍵的斷開和閉合在運(yùn)行的系統(tǒng)中控制其復(fù)位。在電路圖中,電容的大小是10uF,電阻的大小是10k。所以根據(jù)公式,可以算出電容充電到電源電壓的0.7倍(單片機(jī)的電源是5V,所以充電到0.7倍即為3.5V),需要的時間是10K*10UF=0.1S。也就是說在電腦啟動的0.1S內(nèi),電容兩端的電壓時在0~3.5V增加。這個時候10K電阻兩端的電壓為從5~1.5V減少(串聯(lián)電路各處電壓之和為總電壓)。所以在0.1S內(nèi),RST引腳所接收到的電壓是5V~1.5V。在5V正常工作的51單片機(jī)中小于1.5V的電壓信號為低電平信號,而大于1.5V的電壓信號為高電平信號。所以在開機(jī)0.1S內(nèi),單片機(jī)系統(tǒng)自動復(fù)位(RST引腳接收到的高電平信號時間為0.1S左右)。在單片機(jī)啟動0.1S后,電容C兩端的電壓持續(xù)充電為5V,這時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統(tǒng)正常工作。當(dāng)按鍵按下的時候,開關(guān)導(dǎo)通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內(nèi),從5V釋放到變?yōu)榱?.5V甚至更小。根據(jù)串聯(lián)電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平,單片機(jī)系統(tǒng)自動復(fù)位。3.5sd卡內(nèi)部結(jié)構(gòu)和工作原理SD卡(SecureDigitalMemoryCard)是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種新型存儲器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式。本小節(jié)僅簡要介紹在SPI模式下,STM32處理器如何讀寫SD卡,如果讀者如希望詳細(xì)了解SD卡,可以參考相關(guān)資料。3.5.1SD卡內(nèi)部結(jié)構(gòu)圖3-3SD卡內(nèi)部圖3.5.2sd卡引腳及功能圖3-4sd卡管腳圖SD卡主要引腳和功能為:CLK:時鐘信號,每個時鐘周期傳輸一個命令或數(shù)據(jù)位,頻率可在0~25MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生0~25MHz的頻率;CMD:雙向命令和回復(fù)線,命令是一次主機(jī)到從卡操作的開始,命令可以是從主機(jī)到單卡尋址,也可以是到所有卡;回復(fù)是對之前命令的回答,回復(fù)可以來自單卡或所有卡;DAT0~3:數(shù)據(jù)線,數(shù)據(jù)可以從卡傳向主機(jī)也可以從主機(jī)傳向卡。SD卡以命令形式來控制SD卡的讀寫等操作。可根據(jù)命令對多塊或單塊進(jìn)行讀寫操作。在SPI模式下其命令由6個字節(jié)構(gòu)成,其中高位在前。SD卡命令的格式如表1所示,其中相關(guān)參數(shù)可以查閱SD卡規(guī)范。一般我們用單片機(jī)操作SD卡時,都不需要對FAT分區(qū)表信息做處理,原因如下:1)、操作FAT分區(qū)表要增加程序代碼量、增加SRAM的消耗,對于便攜應(yīng)用來說代碼大小和占用SRAM的多少至關(guān)重要。2)、即使我們對FAT分區(qū)表不做任何了解,實(shí)際上我們一樣可以向SD卡上寫入數(shù)據(jù),這就表明使用FAT對我們做數(shù)據(jù)存儲應(yīng)用來說如同雞肋。3)、耗費(fèi)大量經(jīng)歷和時間去了解FAT分區(qū)表對于我們做嵌入式軟件開發(fā)的人來說有些得不償失。4)、SD卡支持兩種操作模式,SD模式和SPI模式,SPI模式做SD數(shù)據(jù)操作時根本不需要知道FAT,這時候SD卡對于我們來說實(shí)際上就是個大的、快速的、方便的、容量可變的外部存儲器?;谝陨显颍话闱闆r下對SD卡的操作只需要了解SPI通訊就可以了,而現(xiàn)在大部分單片機(jī)都有SPI接口,那么操作SD卡易如反掌。3.6單片機(jī)與sd卡鏈接應(yīng)用AT89S51讀寫SD卡有兩點(diǎn)需要注意。首先,需要尋找一個實(shí)現(xiàn)AT89S51單片機(jī)與SD卡通訊的解決方案;其次,SD卡所能接受的邏輯電平與AT89S51提供的邏輯電平不匹配,需要解決電平匹配問題3.6.1通訊模式SD卡有兩個可選的通訊協(xié)議:SD模式和SPI模式。SD模式是SD卡標(biāo)準(zhǔn)的讀寫方式,但是在選用SD模式時,往往需要選擇帶有SD卡控制器接口的MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫。然而,AT89S51單片機(jī)沒有集成SD卡控制器接口,若選用SD模式通訊就無形中增加了產(chǎn)品的硬件成本。在SD卡數(shù)據(jù)讀寫時間要求不是很嚴(yán)格的情況下,選用SPI模式可以說是一種最佳的解決方案。因?yàn)樵赟PI模式下,通過四條線就可以完成所有的數(shù)據(jù)交換,并且目前市場上很多MCU都集成有現(xiàn)成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫操作可大大簡化硬件電路的設(shè)計(jì)。雖然AT89S51不帶SD卡硬件控制器,也沒有現(xiàn)成的SPI接口模塊,但是可以用軟件模擬出SPI總線時序。本文用SPI總線模式讀寫SD卡。3.6.2電平匹配SD卡的邏輯電平相當(dāng)于3.3VTTL電平標(biāo)準(zhǔn),而控制芯片AT89S51的邏輯電平為5VCMOS電平標(biāo)準(zhǔn)。因此,它們之間不能直接相連,否則會有燒毀SD卡的可能。出于對安全工作的考慮,有必要解決電平匹配問題。要解決這一問題,最根本的就是解決邏輯器件接口的電平兼容問題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應(yīng)該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應(yīng)該小于接收電平器件識別為低電平的最高電壓值。一般來說,通用的電平轉(zhuǎn)換方案是采用類似SN74ALVC4245的專用電平轉(zhuǎn)換芯片,這類芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同步。但是,這個方案代價(jià)相對昂貴,而且一般的專用電平轉(zhuǎn)換芯片都是同時轉(zhuǎn)換8路、16路或者更多路數(shù)的電平,相對本系統(tǒng)僅僅需要轉(zhuǎn)換3路來說是一種資源的浪費(fèi)??紤]到SD卡在SPI協(xié)議的工作模式下,通訊都是單向的,于是在單片機(jī)向SD卡傳輸數(shù)據(jù)時采用晶體管加上拉電阻法的方案,基本電路如圖3-6所示。而在SD卡向單片機(jī)傳輸數(shù)據(jù)時可以直接連接,因?yàn)樗鼈冎g的電平剛好滿足上述的電平兼容原則,既經(jīng)濟(jì)又實(shí)用。圖3-5電平轉(zhuǎn)換電路這個方案需要雙電源供電(一個5V電源、一個3.3V電源供電),3.3V電源可以用AMS1117穩(wěn)壓管從5V電源穩(wěn)壓獲取。3.7硬件接口設(shè)計(jì)SD卡提供9Pin的引腳接口便于外圍電路對其進(jìn)行操作,9Pin的引腳隨工作模式的不同有所差異。在SPI模式下,引腳1(DAT3)作為SPI片選線CS用,引腳2(CMD)用作SPI總線的數(shù)據(jù)輸出線MOSI,而引腳7(DAT0)為數(shù)據(jù)輸入線MISO,引腳5用作時鐘線(CLK)。除電源和地,保留引腳可懸空。本文中控制SD卡的MCU是ATMEL公司生產(chǎn)的低電壓、高性能CMOS8位單片機(jī)AT89S51,內(nèi)含8K字節(jié)的可反復(fù)擦寫的只讀程序存儲器和256字節(jié)的隨機(jī)存儲數(shù)據(jù)存儲器。由于AT89S51只有256字節(jié)的數(shù)據(jù)存儲器,而SD卡的數(shù)據(jù)寫入是以塊為單位,每塊為512字節(jié),所以需要在單片機(jī)最小系統(tǒng)上增加一片RAM。本系統(tǒng)中RAM選用存儲器芯片HM62256,容量為32K。對RAM進(jìn)行讀寫時,鎖存器把低8位地址鎖存,與P2口的8位地址數(shù)據(jù)構(gòu)成16位地址空間,從而可使SD卡一次讀寫512字節(jié)的塊操作。4軟件設(shè)計(jì)4.1軟件設(shè)計(jì)目標(biāo)最終能實(shí)現(xiàn)同時將四路模擬電壓(0-5V)進(jìn)行A/D轉(zhuǎn)換,轉(zhuǎn)換結(jié)果為十進(jìn)制有效數(shù)字3位;要求每秒鐘轉(zhuǎn)換一次,并將結(jié)果轉(zhuǎn)換為ASCII碼形式;并將四路結(jié)果分別存儲到SD卡預(yù)先建立好的CH1.txt、CH2.txt、CH3.txt、CH4.txt文檔中。采集實(shí)時的4個通道電壓值顯示在TFT彩屏上;按S1按鍵進(jìn)行采集及存儲,再按S1按鍵暫停采集及存儲,按S2鍵清除SD卡中的內(nèi)容;按S按鍵系統(tǒng)進(jìn)行復(fù)位。4.2設(shè)計(jì)環(huán)境KeilC51是美國KeilSoftware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。KeilC51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標(biāo)碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面介紹KeilC51開發(fā)系統(tǒng)各部分功能和使用。KeilC51單片機(jī)軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu):Uvision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ),目標(biāo)文件可由LIB51創(chuàng)建生成庫文文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。4.3系統(tǒng)軟件設(shè)計(jì)設(shè)計(jì)主要在Keil環(huán)境下進(jìn)行編程。4.3.1SD卡初始化對SD卡進(jìn)行初始化,初始化的過程中設(shè)置SD卡工作在SPI模式,其流程圖如圖4-1所示。在復(fù)位成功之后可以通過CMD55和ACMD41判斷當(dāng)前電壓是否在工作范圍內(nèi)。主機(jī)還可以繼續(xù)通過CMD10讀取SD卡的CID寄存器,通過CMD16設(shè)置數(shù)據(jù)Block長度,通過CMD9讀取卡的CSD寄存器。從CSD寄存器中,主機(jī)可獲知卡容量,支持的命令集等重要參數(shù)。圖4-1SD卡初始化流程圖4.3.2數(shù)據(jù)塊的讀寫完成SD卡的初始化之后即可進(jìn)行它的讀寫操作。SD卡的讀寫操作都是通過發(fā)送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卡的操作都是在初始化后基于SD卡命令和響應(yīng)完成操作的,寫SD卡的程序流程圖如圖4-2所示。圖4-2寫SD卡流程圖①寫單塊1):發(fā)送命令CMD24;2):接收R1響應(yīng);3):發(fā)送DataTokens(SingleBlockWrite:Oxfe);4):發(fā)送一個block(一般為512個字節(jié));5):發(fā)送兩個CRC16碼;6):循環(huán)接收數(shù)據(jù),等待寫完成,直到寫完成接收到0xff。②寫多塊1):發(fā)送命令CMD25;2):接收R1b響應(yīng);3):發(fā)送DataTokens(SingleBlockWrite:0xfe);4):發(fā)送一個block(一般為512個字節(jié);5):發(fā)送兩個字節(jié)CRC16碼;6):循環(huán)接收數(shù)據(jù),等待寫完成,直到寫完成接收到0xff;7):重復(fù)步驟3,繼續(xù)發(fā)送下一個數(shù)據(jù)包,直到所有數(shù)據(jù)包發(fā)送完成,至步驟8繼續(xù);8):發(fā)送命令CMD12,數(shù)據(jù)傳輸結(jié)束;9):接受R1b相應(yīng)。在需要讀取SD卡中數(shù)據(jù)的時候,讀SD卡的命令字為CMD17,接收正確的第一個響應(yīng)命令字節(jié)為0xFE,隨后是512個字節(jié)的用戶數(shù)據(jù)塊,最后為2個字節(jié)的CRC驗(yàn)證碼。讀SD卡的程序流程圖如圖4-3所示。圖4-3讀SD卡流程圖①讀單塊l):發(fā)送命令CMD17;2):接收R1響應(yīng);3):等待DataTokens(SingleBlockRead:0xfe);4):接收一個Block(一般為512個字節(jié));5):接收兩個宇節(jié)CRC16碼。②讀多塊l):發(fā)送命令CMD17;2):接收R1響應(yīng);3):等待DataTokens(SingleBlockRead:0xfe;4):接收一個Block(一般為5121個字節(jié));5):接收兩個字節(jié)CRC16碼;6):重復(fù)步驟3,繼續(xù)接收下一個數(shù)據(jù)包,直到接收所有數(shù)據(jù)包完成后,至步驟7繼續(xù);7):發(fā)送命令CMD12,數(shù)據(jù)傳輸結(jié)束;8):接收R1b響應(yīng)。4.3.3定時器T0函數(shù)流程圖系統(tǒng)要求四個通道每一秒中分別進(jìn)行一次A/D轉(zhuǎn)換,系統(tǒng)采用24MHz晶振,一個周期0.5us,定時器初值賦值為50ms,則1s/(50ms*0.5us)=40,即溢出40次中斷一次為1s。具體見流程圖4-4所示。圖4-4定時器T0函數(shù)流程圖結(jié)論設(shè)計(jì)實(shí)現(xiàn)了利用單片機(jī)對SD卡進(jìn)行讀寫控制的功能,基本達(dá)到了設(shè)計(jì)的目的。根據(jù)理論設(shè)計(jì),并用計(jì)算機(jī)編程進(jìn)行了模擬,制作出了實(shí)物并經(jīng)測試功能完全符合設(shè)計(jì)要求。本設(shè)計(jì)應(yīng)用單片機(jī)讀寫SD卡有兩點(diǎn)需要注意。首先,需要尋找一個實(shí)現(xiàn)單片機(jī)與SD卡通訊的解決方案:SD卡有兩個可選的通訊協(xié)議:SD模式和SPI模式SD模式是SD卡標(biāo)準(zhǔn)的讀寫方式,但是在選用SD模式時,往往需要選擇帶有SD卡控制器接口的MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫。然而,單片機(jī)沒有集成SD卡控制器接口,若選用SD模式通訊就無形中增加了產(chǎn)品的硬件成本。在SD卡數(shù)據(jù)讀寫時間要求不是很嚴(yán)格的情況下,選用SPI模式可以說是一種最佳的解決方案。因?yàn)樵赟PI模式下,通過四條線就可以完成所有的數(shù)據(jù)交換,并且目前市場上很多MCU都集成有現(xiàn)成的SPI接口電路,采用SPI模式對SD卡進(jìn)行讀寫操作可大大簡化硬件電路的設(shè)計(jì)。設(shè)計(jì)用SPI總線模式讀寫SD卡。其次,SD卡所能接受的邏輯電平與單片機(jī)提供的邏輯電平不匹配,需要解決電平匹配問題。要解決這一問題,最根本的就是解決邏輯器件接口的電平兼容問題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應(yīng)該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應(yīng)該小于接收電平器件識別為低電平的最高電壓值。謝辭基于SD卡存儲采集數(shù)據(jù)電路設(shè)計(jì)終于告一段落了,在此我想對幫助我的老師們和同學(xué)們真誠的說聲謝謝。論文的研究工作是在許鳴宇老師的悉心指導(dǎo)下完成的。論文的每一步進(jìn)展都傾注著老師的關(guān)懷、教導(dǎo)和幫助。老師淵博的知識和豐富的經(jīng)驗(yàn)使我受益匪淺,此外,陳老師言傳身教,不僅使我開拓了視野,增加了知識,更重要的是使我系統(tǒng)的掌握了科學(xué)研究的方法和自己動手的能力。在這里,向我的陳老師表示我由衷的謝意!與此同時也非常感謝我的同學(xué)在設(shè)計(jì)過程中給我的幫助和鼓勵。最后,還要向所有關(guān)心和幫助過我的人致以最衷心的感謝!論文的工作是在我的導(dǎo)師陳錫華教授的悉心指導(dǎo)下完成的,陳教授嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和科學(xué)的工作方法給了我極大的幫助和影響。在此衷心感謝陳老師對我的關(guān)心和指導(dǎo)。還要向百忙之中抽時間對本文進(jìn)行審閱,評議和參與本人論文答辯的各位老師表示感謝!參考文獻(xiàn)[1]潘水雄.新編單片機(jī)原理與應(yīng)用.西安:西安電子科技大學(xué)出版社.2008[2]趙威.SD存儲卡的設(shè)計(jì)和實(shí)現(xiàn).上海:上海交通大學(xué)軟件學(xué)院.2007[3]于振南.51單片機(jī)讀寫SD卡.哈爾濱:哈爾濱工程大學(xué)信息學(xué)院.2009[4]康華光.電子技術(shù)基礎(chǔ).北京:高等教育出版社.2005[5]潘新民.王燕芳.微型計(jì)算機(jī)控制技術(shù).北京:電子工業(yè)出版社.2006[6]龔運(yùn)新.單片機(jī)C語言開發(fā)技術(shù).北京:清華大學(xué)出版社.2006[7]張宋潤.單片機(jī)應(yīng)用設(shè)計(jì)200例.北京:北京航空航天大學(xué)出版社.2006[8]關(guān)德新.馮文全.單片機(jī)外圍器件實(shí)用手冊-電源器件分冊[M].北京:北京航空航天大學(xué)出版社.1998[9]華成英.模擬電子技術(shù)基礎(chǔ)(第三版).高等教育出版社.2001[10]王偉.高性能.低功耗帶RAM實(shí)時時鐘芯片DS1302(上).電子世界:第一期.1995附錄SD卡程序#include"sd.h"#include"myfun.h"http://公共函數(shù)頭文件bitis_init;//在初始化的時候設(shè)置此變量為1,同步數(shù)據(jù)傳輸(SPI)會放慢unsignedcharbdata_dat;sbit_dat7=_dat^7;sbit_dat6=_dat^6;sbit_dat5=_dat^5;sbit_dat4=_dat^4;sbit_dat3=_dat^3;sbit_dat2=_dat^2;sbit_dat1=_dat^1;sbit_dat0=_dat^0;/******************************************************************-功能描述:IO模擬SPI,發(fā)送一個字節(jié)-隸屬模塊:SD卡模塊-函數(shù)屬性:內(nèi)部-參數(shù)說明:x是要發(fā)送的字節(jié)-返回說明:無返回-注:其中is_init為1時,寫的速度放慢,初始化SD卡SPI速度不能太高******************************************************************/voidSD_spi_write(unsignedcharx){_dat=x;SD_SI=_dat7;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat6;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat5;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat4;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat3;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat2;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat1;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SI=_dat0;SD_SCL=0;if(is_init)delay(DELAY_TIME);SD_SCL=1;if(is_init)delay(DELAY_TIME);}/******************************************************************-功能描述:IO模擬SPI,讀取一個字節(jié)-隸屬模塊:SD卡模塊-函數(shù)屬性:內(nèi)部-參數(shù)說明:無-返回說明:返回讀到的字節(jié)******************************************************************/unsignedcharSD_spi_read()//SPI讀一個字節(jié){SD_SO=1;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat7=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat6=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat5=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat4=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat3=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat2=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat1=SD_SO;SD_SCL=1;if(is_init)delay(DELAY_TIME);SD_SCL=0;if(is_init)delay(DELAY_TIME);_dat0=SD_SO;return(_dat);}/******************************************************************-功能描述:向SD卡寫命令-隸屬模塊:SD卡模塊-函數(shù)屬性:內(nèi)部-參數(shù)說明:SD卡的命令是6個字節(jié),pcmd是指向命令字節(jié)序列的指針-返回說明:命令寫入后,SD卡的回應(yīng)值,調(diào)用不成功,將返回0xff******************************************************************/unsignedcharSD_Write_Cmd(unsignedchar*pcmd)//向SD卡寫命令,pcmd是命令字節(jié)序列的首地址{unsignedchartemp,time=0;SD_CS=1;SD_spi_write(0xff);//提高兼容性,如果沒有這里,有些SD卡可能不支持SD_CS=0;SD_spi_write(pcmd[0]);SD_spi_write(pcmd[1]);SD_spi_write(pcmd[2]);SD_spi_write(pcmd[3]);SD_spi_write(pcmd[4]);SD_spi_write(pcmd[5]);do{temp=SD_spi_read();//一直讀,直到讀到的不是0xff或超時time++;}while((temp==0xff)&&(time<TRY_TIME));return(temp);}/******************************************************************-功能描述:復(fù)位SD卡,用到CMD0,使用SD卡切換到SPI模式-隸屬模塊:SD卡模塊-函數(shù)屬性:外部,供用戶調(diào)用-參數(shù)說明:無-返回說明:調(diào)用成功,返回0x00,否則返回INIT_CMD0_ERROR(sd.h中有定義)******************************************************************/unsignedcharSD_Reset()//SD卡復(fù)位,進(jìn)入SPI模式,使用CMD0(命令0){unsignedchartime,temp,i;unsignedcharpcmd[]={0x40,0x00,0x00,0x00,0x00,0x95};//命令0的字節(jié)序列is_init=1;//將is_init置為1SD_CS=1;//關(guān)閉片選for(i=0;i<0x0f;i++)//初始時,首先要發(fā)送最少74個時鐘信號,這是必須的!?。SD_spi_write(0xff);//120個時鐘}SD_CS=0;//打開片選time=0;do{temp=SD_Write_Cmd(pcmd);//寫入CMD0time++;if(time==TRY_TIME){SD_CS=1;//關(guān)閉片選return(INIT_CMD0_ERROR);//CMD0寫入失敗}}while(temp!=0x01);SD_CS=1;//關(guān)閉片選SD_spi_write(0xff);//按照SD卡的操作時序在這里補(bǔ)8個時鐘return0;//返回0,說明復(fù)位操作成功}/******************************************************************-功能描述:初始化SD卡,使用CMD1-隸屬模塊:SD卡模塊-函數(shù)屬性:外部,供用戶調(diào)用-參數(shù)說明:無-返回說明:調(diào)用成功,返回0x00,否則返回INIT_CMD1_ERROR(sd.h中有定義)******************************************************************/unsignedcharSD_Init()//初始化,使用CMD1(命令1){unsignedchartime,temp;unsignedcharpcmd[]={0x41,0x00,0x00,0x00,0x00,0xff};//命令1的字節(jié)序列SD_CS=0;//打開片選time=0;do{temp=SD_Write_Cmd(pcmd);time++;if(time==TRY_TIME){SD_CS=1;//關(guān)閉片選return(INIT_CMD1_ERROR);//CMD1寫入失敗}}while(temp!=0); is_init=0;//初始化完畢,將is_init設(shè)置為0,為了提高以后的數(shù)據(jù)傳輸速度SD_CS=1;//關(guān)閉片選SD_spi_write(0xff);//按照SD卡的操作時序在這里補(bǔ)8個時鐘return(0);//返回0,說明初始化操作成功}/****************************************************************************-功能描述:將buffer指向的512個字節(jié)的數(shù)據(jù)寫入到SD卡的addr扇區(qū)中-隸屬模塊:SD卡模塊-函數(shù)屬性:外部,供用戶調(diào)用-參數(shù)說明:addr:扇區(qū)地址buffer:指向數(shù)據(jù)緩沖區(qū)的指針-返回說明:調(diào)用成功,返回0x00,否則返回WRITE_BLOCK_ERROR(sd.h中有定義)-注:SD卡初始化成功后,讀寫扇區(qū)時,盡量將SPI速度提上來,提高效率****************************************************************************/unsignedcharSD_Write_Sector(unsignedlongaddr,unsignedchar*buffer) //向SD卡中的指定地址的扇區(qū)寫入512個字節(jié),使用CMD24(命令24){unsignedchartemp,time;unsignedinti;unsignedcharpcmd[]={0x58,0x00,0x00,0x00,0x00,0xff};//向SD卡中單個塊(512字節(jié),一個扇區(qū))寫入數(shù)據(jù),用CMD24addr<<=9;//addr=addr*512將塊地址(扇區(qū)地址)轉(zhuǎn)為字節(jié)地址[這里就限制了SD卡的最大容量為4G]pcmd[1]=((addr&0xff000000)>>24);//將字節(jié)地址寫入到CMD24字節(jié)序列中pcmd[2]=((addr&0x00ff0000)>>16);pcmd[3]=((addr&0x0000ff00)>>8);SD_CS=0;//打開SD卡片選time=0;do{temp=SD_Write_Cmd(pcmd);time++;if(time==TRY_TIME){SD_CS=1;//關(guān)閉片選return(temp);//命令寫入失敗}}while(temp!=0);for(i=0;i<100;i++)//這里要插入若干時鐘信號{SD_spi_read();} SD_spi_write(0xfe);//寫入開始字節(jié)0xfe,后面就是要寫入的512個字節(jié)的數(shù)據(jù) for(i=0;i<512;i++)//將緩沖區(qū)中要寫入的512個字節(jié)寫入SD卡{SD_spi_write(buffer[i]);}SD_spi_write(0xff);SD_spi_write(0xff);//兩個字節(jié)的CRC校驗(yàn)碼,不用關(guān)心temp=SD_spi_read();//讀取返回值if((temp&0x1F)!=0x05)//如果返回值是XXX00101說明數(shù)據(jù)已經(jīng)被SD卡接受了{(lán)SD_CS=1;return(WRITE_BLOCK_ERROR);//寫塊數(shù)據(jù)失敗}while(SD_spi_read()!=0xff);//等到SD卡不忙(數(shù)據(jù)被接受以后,SD卡要將這些數(shù)據(jù)寫入到自身的FLASH中,需要一個時間)//忙時,讀回來的值為0x00,不忙時,為0xffSD_CS=1;//關(guān)閉片選SD_spi_write(0xff);//按照SD卡的操作時序在這里補(bǔ)8個時鐘return(0);//返回0,說明寫扇區(qū)操作成功}/****************************************************************************-功能描述:讀取addr扇區(qū)的512個字節(jié)到buffer指向的數(shù)據(jù)緩沖區(qū)-隸屬模塊:SD卡模塊-函數(shù)屬性:外部,供用戶調(diào)用-參數(shù)說明:addr:扇區(qū)地址buffer:指向數(shù)據(jù)緩沖區(qū)的指針-返回說明:調(diào)用成功,返回0x00,否則返回READ_BLOCK_ERROR(sd.h中有定義)-注:SD卡初始化成功后,讀寫扇區(qū)時,盡量將SPI速度提上來,提高效率****************************************************************************/unsignedcharSD_Read_Sector(unsignedlongaddr,unsignedchar*buffer)//從SD卡的指定扇區(qū)中讀出512個字節(jié),使用CMD17(17號命令){unsignedintj;unsignedchartime,temp;unsignedcharpcmd[]={0x51,0x00,0x00,0x00,0x00,0xff};//CMD17的字節(jié)序列addr<<=9;//addr=addr*512將塊地址(扇區(qū)地址)轉(zhuǎn)為字節(jié)地址pcmd[1]=((addr&0xff000000)>>24);//將字節(jié)地址寫入到CMD17字節(jié)序列中pcmd[2]=((addr&0x00FF0000)>>16);pcmd[3]=((addr&0x0000FF00)>>8);SD_CS=0;//打開片選ime=0;do{temp=SD_Write_Cmd(pcmd);//寫入CMD17time++;if(time==TRY_TIME){return(READ_BLOCK_ERROR);//讀塊失敗}}while(temp!=0); while(SD_spi_read()!=0xfe);//一直讀,當(dāng)讀到0xfe時,說明后面的是512字節(jié)的數(shù)據(jù)了for(j=0;j<512;j++)//將數(shù)據(jù)寫入到數(shù)據(jù)緩沖區(qū)中{ buffer[j]=SD_spi_read();}SD_spi_read();SD_spi_read();//讀取兩個字節(jié)的CRC校驗(yàn)碼,不用關(guān)心它們SD_CS=1;//SD卡關(guān)閉片選SD_spi_write(0xff);//按照SD卡的操作時序在這里補(bǔ)8個時鐘return0;}基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺控制器的研制基于單片機(jī)的軟起動器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動檢測儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號檢測儀基于單片機(jī)的電機(jī)運(yùn)動控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測量儀的研制基于單片機(jī)的紅外測油儀的研究96系列單片機(jī)仿真器研究與設(shè)計(jì)基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)基于MSP430單片機(jī)的電梯門機(jī)控制器的研制基于單片機(jī)的氣體測漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機(jī)的膛壁溫度報(bào)警系統(tǒng)設(shè)計(jì)基于AVR單片機(jī)的低壓無功補(bǔ)償控制器的設(shè)計(jì)基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動信號的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實(shí)踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實(shí)現(xiàn)基于AT89S52單片機(jī)的通用數(shù)據(jù)采集系統(tǒng)基于單片機(jī)的多道脈沖幅度分析儀研究HYPERLI
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度景區(qū)景點(diǎn)精細(xì)化保潔服務(wù)協(xié)議
- 二零二五年度二手車轉(zhuǎn)讓及過戶手續(xù)協(xié)議
- 二零二五年度新型小區(qū)門衛(wèi)管理及應(yīng)急預(yù)案合同
- 2025年度綠色節(jié)能庫房租賃合同
- 2025年度高新技術(shù)企業(yè)員工勞動合同解除終止協(xié)議書
- 2025年度物業(yè)服務(wù)合同主體變更協(xié)議范本
- 二零二五年度大數(shù)據(jù)服務(wù)股權(quán)投資與轉(zhuǎn)讓協(xié)議
- 二零二五年度冷凍庫租賃及冷鏈物流配送中心建設(shè)合同
- 二零二五年度離婚協(xié)議中財(cái)產(chǎn)分割執(zhí)行監(jiān)督補(bǔ)充協(xié)議
- 蘇武牧羊傳紅色故事觀后感
- 消化科常見管道的護(hù)理課件
- 汽車修理常用配件信息公示
- 同濟(jì)大學(xué)信紙
- 門式鋼架廠房設(shè)計(jì)
- 口腔模型的灌制-醫(yī)學(xué)課件
- 煤礦班組建設(shè)實(shí)施方案
- (完整word版)新《中華頌》朗誦稿
- 糖尿病健康教育及飲食指導(dǎo)
- PFMEA模板完整版文檔
- 三無曲線(有緩)繩正法撥道自動計(jì)算表
- 教學(xué)能力比賽決賽 《英語》教案
評論
0/150
提交評論