MCS51 MCU讀寫SD卡版(單片機論文_第1頁
MCS51 MCU讀寫SD卡版(單片機論文_第2頁
MCS51 MCU讀寫SD卡版(單片機論文_第3頁
MCS51 MCU讀寫SD卡版(單片機論文_第4頁
MCS51 MCU讀寫SD卡版(單片機論文_第5頁
已閱讀5頁,還剩88頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、摘 要近年來, SD存儲卡在嵌入式產品中的應用越來越廣泛, 但SD卡接口一般僅集成在32位高端處理器中, 一般51單片機則由于資源限制沒有該接口。因此,如何解決51單片機應用系統(tǒng)存取SD卡大容量數據就顯得很有實際意義。本系統(tǒng)使用MXT8051F04A作為單片機與SD卡的接口芯片, 采用SPI串行方式對SD卡的扇區(qū)進行讀寫,讀寫過程和結果通過串口調試助手在主機上顯示。本論文的核心主要從硬件設計和軟件編程兩個大的方面介紹了系統(tǒng)的實現。硬件電路設計主要包括MXT8051F04A最小系統(tǒng)電路、電源電路、串口電路、SD卡接口電路。程序采用C語言在Keil軟件下進行編寫、調試,程序主要包括SD卡扇區(qū)讀寫程

2、序、串口程序等軟件模塊。系統(tǒng)實現了對SD卡扇區(qū)的讀寫,達到了設計的要求和目的。關鍵字:MXT8051F04A,SD卡,KeilABSTRACTIn recent years, SD memory card applications in the embedded products more widely, but generally only the integrated SD card interface in 32-bit high-end processor, microcontroller 51 is generally not the interface due to resourc

3、e constraints. Therefore, how to solve the 51 SCM applications to access data on large-capacity SD cards seem very practical. The system uses MXT8051F04A 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 th

4、e serial port on the host display debugging assistant. The core of this thesis, the main hardware and software design introduces two major aspects of the system implementation. Hardware design includes MXT8051F04A minimum system circuit, power circuit, the serial port circuitry, SD card interface ci

5、rcuit. Program using C language under the Keil software write, debug, the program includes reading and writing SD card sector program, serial procedures of software modules. System realizes the SD card read and write sectors, meets the design requirements and objectives. Keywords: MXT8051F04A,SD Car

6、d,Keil目 錄第1章 引言11.1 選題背景11.2 研究目標和意義11.3 本文要完成的工作1第2章 單片機讀寫SD卡的硬件電路設計32.1 系統(tǒng)硬件平臺組成32.2 電源模塊32.3 MXT8051F04A單片機最小系統(tǒng)電路設計42.3.1 MXT8051F04A簡介42.3.2 晶振復位電路82.4 SD卡電路設計82.4.1 通訊模式92.4.2 電平匹配92.4.3 硬件接口設計102.5 串口電路設計122.6 PCB繪制132.7 本章小結14第3章 單片機讀寫SD卡的軟件設計143.1 SD卡的扇區(qū)讀寫143.1.1 模擬SPI協(xié)議143.1.2 SD卡命令153.1.3

7、SD卡的初始化193.1.4 數據塊的讀寫203.2 串口程序25第4章 調試264.1 系統(tǒng)硬件調試264.2 軟件調試274.3 軟硬件的聯合調試274.4 本章小結29第5章 結束語305.1 總結305.2 展望30參考文獻31致謝32附錄33附錄一:單片機讀寫SD卡的完整原理圖33附錄二:單片機讀寫SD卡的完整程序36外文資料原文63譯文64第1章 引言1.1 選題背景SD卡(Secure Digital Memory Card)中文翻譯為安全數碼卡,是一種基于半導體快閃記憶器的新一代記憶設備,它被廣泛地于便攜式裝置上使用,例如個人數碼助理(PDA)、數碼相機和多媒體播放器等。SD卡

8、由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。大小猶如一張郵票的SD記憶卡,重量只有2克左右,但卻擁有高記憶容量、快速數據傳輸率、極大的移動靈活性以及很好的安全性。SD卡在現在的日常生活與工作中使用非常廣泛,時下已經成為最為通用的數據存儲卡。在諸如MP3、數碼相機等設備上也都采用SD卡作為其存儲設備。SD卡之所以得到如此廣泛的使用,是因為它價格低廉、存儲容量大、使用方便、通用性與安全性強等優(yōu)點。既然它有著這么多優(yōu)點,那么如果將它加入到單片機應用開發(fā)系統(tǒng)中來,將使系統(tǒng)變得更加出色,特別是一些單片機系統(tǒng)需要長時間地采集、記錄海量數據時,選擇SD卡作為存儲媒質是開發(fā)者們一個很

9、好的選擇。這就要求對SD卡的硬件與讀寫時序進行研究。1.2 研究目標和意義研究51單片機對SD卡的讀寫,解決51單片機應用系統(tǒng)存取大容量數據。1.3 本文要完成的工作本課題是針對單片機讀寫SD卡進行研究,由研究目的決定了研究的內容涉及了單片機系統(tǒng)硬件設計和SD卡數據讀取兩方面。在系統(tǒng)硬件設計方面,包括硬件電路的設計;在軟件設計方面,包括SD卡讀寫程序,串口程序。本文將完成以下的任務:1. 基于MXT8051F04A微控制器進行讀寫SD卡系統(tǒng)的設計,即完成本系統(tǒng)硬件器件的選擇和電路的初步設計。2. 各子功能模塊硬件電路設計、調試以及軟硬件的聯合調試。進行模塊軟硬件調試和實驗,驗證系統(tǒng)的可靠性。3

10、. 進行軟件方面的研究,即SD卡協(xié)議和命令研究還有單片機串口程序,程序采用C語言在Keil環(huán)境下編寫 。第2章 單片機讀寫SD卡的硬件電路設計2.1 系統(tǒng)硬件平臺組成圖2-1 系統(tǒng)硬件平臺如圖2-1所示系統(tǒng)硬件平臺配置如下:控制器:時代民芯科技有限公司的MXT8051F04A單片機,運行頻率可達80M。晶振復位電路:系統(tǒng)采用了RC上電復位。JTAG電路:用來完成程序的下載和調試。SD卡電路:SD卡使用的是存儲容量為2G的金士頓SD卡。串口電路:采用了MAX232EP進行電平轉換和主機進行通信。電源電路:系統(tǒng)采用9V供電,使用兩片ASM1117電源轉換芯片分別獲得5V 和3.3V為系統(tǒng)供電。2.

11、2 電源模塊電源是系統(tǒng)最關鍵的部分,決定著整個系統(tǒng)的成敗。本系統(tǒng)單片機供電范圍為3.6-5V電源,而SD卡的供電范圍為2.7-3.6V,所以系統(tǒng)需要兩種電源。本系統(tǒng)采用9V電源供電,通過低壓差三端線性穩(wěn)壓器ASM1117芯片得到5V和3.3V電源。電路如圖2-2所示。圖2-2 電源模塊系統(tǒng)輸入的9V電源首先通過ASM1117-5.0電源轉換芯片把輸入的9V電壓轉換為5V,然后5V電壓再通過ASM1117-3.3把5V電壓轉換為3.3V.。ASM1117前后并行接了多個濾波、退藕電容,以進一步穩(wěn)定線性電源的平滑度,減小電源的紋波,提高電源的帶負載能力和瞬態(tài)響應。2.3 MXT8051F04A單片

12、機最小系統(tǒng)電路設計單片機最小系統(tǒng)包括:晶振電路、復位電路。復位采用了簡單可靠的上電復位。2.3.1 MXT8051F04A簡介本系統(tǒng)采用了北京時代民芯科技有限公司自行研制的高性能8051單片機MXT8051F04A。MXT8051F04A是以高速單指令周期8051為核的MCU。電路擁有豐富的外設,包括PWM、UART、WDT,Timer等,大容量存儲器,內嵌32Kx8可在線編程Flash,10位AD,8位DA,若干OP,36x4 LCD driver、POR以及可編程增益放大器(PGA)等模擬電路。電路集成片上調試系統(tǒng),通過標準JTAG接口,快速診斷復雜SOC,該調試系統(tǒng)具有不占用任何硬件資源

13、,支持全速運行、單步運行、硬件斷點、軟件斷點以及觀察內部特殊功能寄存器、程序指針和內部RAM等功能。上位機通過標準JTAG接口以及用戶定義指令執(zhí)行在線編程和在線調試。同時提供調試和編程軟件包。MXT8051F04A的系統(tǒng)框圖如圖2-3。圖2-3 MXT8051F04A系統(tǒng)框圖MXT8051F04A共有128個引腳,采用QFP128封裝,其引腳排列如圖2-4。圖2-4 MXT8051F04A引腳排列管腳功能大致說明如下(詳細介紹請看MXT8051F04A數據手冊):系統(tǒng)時鐘:XTAL1、XTAL2為MXT8051F04A系統(tǒng)時鐘晶振的輸出、輸入引腳。MXT8051F04A有三個時鐘源,外部晶體振

14、蕩器,內部振蕩器和32768Hz晶體振蕩器。外部晶體振蕩器和內部振蕩器提供主時鐘,通過內部寄存器PCON.1(CKSEL)來選擇。32768Hz晶體振蕩器為RTC提供時鐘。RTC: RTCXTAL1和RTCXTAL2是RTC的32768Hz晶體振蕩器的輸入輸出引腳。I/O口:MXT8051F04A共提供一個8位雙向口P0、兩個5位雙向口P1,P2,每個口通過口控制寄存器控制輸入輸出,通過上拉控制寄存器控制內部上拉電阻,P2具有第二功能,通過方式控制寄存器控制P2口的第二功能。P0、P1、P2分別對應內部數據寄存器P0、P1、P2,這些寄存器即可字節(jié)尋址也可位尋址,寫入端口的值通過內部寄存器鎖存

15、以保證I/O引腳輸出的值保持不變。當進行讀操作時,當引腳配置為輸入時,引腳的電平被讀入,但通過讀-修改-寫指令或者當引腳被配置為輸出時所讀取的是內部鎖存器的值,而非引腳的值。CPU通過MOV傳送指令對I/O口進行讀寫操作。 UART :TXD、RXD分別為單片機串口的發(fā)送引腳和接受引腳。UART 是一個能進行異步傳輸的串行口。UART 可以工作在全雙工方式。在所有方式下,接收數據放入數據緩沖器。這就允許在軟件尚未讀取前一個數據字節(jié)的情況下開始接收第二個輸入數據字節(jié)。 UART在特殊功能寄存器中有一個串行控制寄存器(SCON)和一個串行數據緩沖器(SBUF)。用同一個地址訪問發(fā)送寄存器和接收寄存

16、器。讀操作訪問接收寄存器,寫操作訪問發(fā)送寄存器。 如果被允許,UART能產生中斷。UART有兩個中斷源:一個發(fā)送中斷標志TI(SCON.1)(數據字節(jié)發(fā)送結束時置位)和一個接收中斷標志RI(SCON.0)(接收完一個數據字節(jié)后置位)。當UART轉向中斷服務程序時硬件不清除UART中斷標志,中斷標志必須用軟件清除。這就允許軟件查詢UART中斷的原因。PWM口:PWM0、PWM1、PWM2為PWM輸出口。MXT8051F04A內建3個10位PWM, 每個PWM由兩個8位寄存器構成,它們分別是PWM0H,PWM0L,PWM1H,PWM1L,PWM2H,PWM2L。由PWMXL和PWMXH的低兩位構成

17、一個10位的寄存器。寫入到PWMXH和PWMXL的值代表一個PWM周期中的高電平寬度。當PWM計數器等于PWM寄存器時PWM輸出低電平,當PWM計數器溢出時輸出高電平,從而改變PWM輸出的占空比,實現脈寬調制。 JTAG接口:MXT8051F04A包含一個片內JTAG接口和邏輯,提供在線編程和在調試所需要的邊界掃描功能,支持FLASH的讀和寫操作以及非侵入式在系統(tǒng)調試。JTAG接口有四個專用引腳,它們是:TCK、TMS、TDI和TDO。運放:MXT8051F04A內部集成有5個運放器,分別是OP1-OP5。其中OP1、OP2與電阻網絡一起組成一個帶256級增益控制的差分輸入可編程增益控制器PG

18、A,PGA的輸出送到一個起調零作用的運算放大器OP3,經調零電路調整后輸出到ADC的模擬通道3(AIN3)。另外三個運算放大器可與外部電阻一起組成恒流源和放大電路。 LCD驅動:MXT8051F04A內部集成段式LCD驅動,LCD 驅動由主要偏壓產生電路、COM驅動器、SEG驅動器幾部分組成。COM1-COM4為位選,SEGMENT0-SEGMENT36為段選。數模轉換器 (DAC):MXT8051F04A片內的數模轉換器(DAC)采用電阻串分壓結構,主要由8-256譯碼器、模擬開關、電阻串和輸出緩沖器等幾部分組成。電阻串將參考電源分成256等份,輸入數據經譯碼器譯碼后,控制模擬開關選擇合適的

19、電壓經輸出緩沖器輸出。2.3.2 晶振復位電路單片機最小系統(tǒng)包括:晶振電路、復位電路。復位采用了簡單可靠的上電復位電路。電路如圖2-5所示:圖2-5 晶振復位電路2.4 SD卡電路設計應用單片機讀寫SD卡有兩點需要注意。首先,需要尋找一個單片機與SD卡通訊的解決方案;其次,SD卡所能接受的邏輯電平為3.3V,如果是5V單片機則需要解決電平匹配問題。2.4.1 通訊模式SD卡有兩個可選的通訊協(xié)議:SD模式和SPI模式。SD模式是SD卡標準的讀寫方式,但是在選用SD模式時,往往需要選擇帶有SD卡控制器接口的MCU,或者必須加入額外的SD卡控制單元以支持SD卡的讀寫。然而MXT8051F04A單片機

20、沒有集成SD卡控制器接口,若選用SD模式通訊增加了產品的硬件成本。在SD卡數據讀寫時間要求不是很嚴格的情況下,選用SPI模式可以說是一種最佳的解決方案。因為在SPI模式下,通過四條線就可以完成所有的數據交換,并且目前市場上很多MCU都集成有現成的SPI接口電路,采用SPI模式對SD卡進行讀寫操作可大大簡化硬件電路的設計。雖然MXT8051F04A不帶SD卡硬件控制器,也沒有現成的SPI接口模塊,但是可以用軟件模擬出SPI總線時序。本文用SPI總線模式讀寫SD卡。2.4.2 電平匹配SD卡的邏輯電平相當于3.3V TTL電平標準,而控制芯片的邏輯電平為5V電平標準。因此,它們之間不能直接相連,否

21、則會有燒毀SD卡的可能。出于安全的考慮,有必要解決電平匹配問題。要解決這一問題,最根本的就是解決邏輯器件接口的電平兼容問題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應該小于接收電平器件識別為低電平的最高電壓值。一般來說,通用的電平轉換方案是采用類似SN74ALVC4245的專用電平轉換芯片,這類芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同步。但是,這個方案代價相對昂貴,而且一般的專用電平轉換芯片都是同時轉換8路、16路或者更多路數的電平,相對本系統(tǒng)僅僅需要轉換3路來說是一種資源的浪費。

22、考慮到SD卡在SPI協(xié)議的工作模式下,通訊都是單向的,于是在單片機向SD卡傳輸數據時采用晶體管加上拉電阻法的方案,基本電路如圖2-6所示。而在SD卡向單片機傳輸數據時可以直接連接,因為它們之間的電平剛好滿足上述的電平兼容原則,既經濟又實用。這個方案需要雙電源供電(一個5V電源、一個3.3V電源供電),3.3V電源直接用AMS1117三端線性穩(wěn)壓器從5V電源穩(wěn)壓獲取。圖2-6 SD卡電平轉換2.4.3 硬件接口設計SD卡提供9Pin的引腳接口便于外圍電路對其進行操作,9Pin的引腳隨工作模式的不同有所差異。在SPI模式下,引腳1(DAT3)作為SPI片選線CS用,引腳2(CMD)用作SPI總線的

23、數據輸出線MOSI,而引腳7(DAT0)為數據輸入線MISO,引腳5用作時鐘線(CLK)。除電源和地,保留引腳可懸空,詳細的引腳定義見表2-1。引腳排列如圖2-7。 圖2-7 SD卡引腳定義表2-1 SD卡引腳功能定義引腳SD模式 SPI模式名稱類型描述名稱類型描述1CD/DAT3IO或PP數據線3CSI片選2CMDPP命令DII數據輸入3VSS1S電源地VSSS電源地4VDDS電源VDDS電源5CLKI時鐘SCLKI時鐘6VSS2S電源地VSS2S電源地7DAT0IO或PP數據線0DOO或PP數據輸出8DAT1IO或PP數據線1RSV 保留 9DAT2IO或PP數據線2RSV 保留 單片機與

24、SD卡的接口電如圖2-8所示。圖2-8 單片機與SD卡接口電2.5 串口電路設計本系統(tǒng)設計串口電路主要用于通過串口調試助手調試程序和主機顯示讀寫過程以及結果。單片機與PC機之間采用RS232方式的串行通信。RS232是美國電子工業(yè)協(xié)會EIA和Bell公司一起開發(fā)的于1969年頒布的通信協(xié)議。它適合傳輸速率在0-20KB/S范圍內的通信,現已成為微機串行通信接口中廣泛應用的一種標準。RS232規(guī)定,當數據傳輸速度小于0-20KB/S且電纜的電容負荷小于2500pF時,傳輸距離小于15m。本系統(tǒng)采用RS232異步通信方式。為增加信號在線路上的傳輸距離和提高抗干擾能力,RS232提高了信號的傳輸電平

25、。該接口采用雙極性信號,公共地線和負邏輯。對于發(fā)送端:-5V15V表示邏輯1,+5V+15V表示邏輯O。對于接收端:電壓低于-3V表示1,高于+3V表示O。它與單片機的邏輯電平不一致,因此在實際應用時,必須把TTL電平轉換為RS232或者對兩者進行逆轉換。為方便設計,提高系統(tǒng)穩(wěn)定性,保護器件,根據產品資料,選用MAXIM公司生產的MAX232CPE芯片。MAX232CPE內部有2個線路驅動器(Tx)和2個接收器(Rx)。內部具有兩個充電泵,把+3.3VDC轉換成士10vDC。具有+15KVESD保護,RS232收發(fā)器體積小,應用方便,外圍電路簡單。串行接口電路如圖2-9所示。圖2-9 串口電路

26、2.6 PCB繪制PCB設計是硬件工作中的難點,前面所有工作都集中體現在電路板上,因而PCB的設計直接影響整個系統(tǒng)的性能。在PCB布線之前先對原理圖進行了電氣規(guī)則檢查,在檢查正確無誤的情況下開始布線,布線采用手工布線完成,其中元器件的封裝參考了標準封裝庫,對于一些Protel中沒有自帶封裝的元器件按照數據手冊上的規(guī)范進行制作,并對二極管、三極管等極性元件,以及一些非對稱性元件的引腳定義做了仔細的檢查。在布局上將模擬電路和數字電路分開,整體上采用模塊化布局,去藕電容放置在靠近器件的電源/地的地方,并將跳線放置在板子的邊緣。為了系統(tǒng)能夠穩(wěn)定的運行,電路板子采用雙層設計,上層為元件層,為了過濾高頻干

27、擾,我們在5V電源與地之間及3.3V電源與地之間分別加入了采用0.luF的濾波電容,以濾除高頻干擾。不同層采用相互垂直走線的方式以避免串擾。布線時應注意以下規(guī)則:(1)各部件之間引線盡量短。(2)發(fā)熱量大的元件不能放在底層,底層不方便放置散熱片。(3)晶振,電解電容等怕熱元件應該遠離發(fā)熱量大的元件,晶振用地線包圍。(4)接插件應該放在板子邊緣。(5)開關,滑動電阻器等手工調整元件應該放在合適手工調整的地方,盡量放 在板子邊緣,可調旋鈕應朝外。(6)每個IC都應該放置0.1uF和10uF旁路電容,濾除高頻雜波和電源去耦。2.7 本章小結本章屬于系統(tǒng)的硬件電路設計部分,其中簡要的介紹了系統(tǒng)的組成,

28、參考了相關的技術文檔,其中包括MXT8051F04A芯片的DataSheet,以及MAX232的DataSheet和SD官方資料,根據系統(tǒng)的需要并結合他人的開發(fā)經驗設計了每部分的電路,文中給出了各部分的主要信號電路連接圖,詳細的電路原理圖可在附錄A中得到,這一章將作為后續(xù)的基礎,可靠的硬件平臺是本系統(tǒng)得以有效運行最有力的保障。第3章 單片機讀寫SD卡的軟件設計軟件設計主要包括二部分: 對SD扇區(qū)讀寫, 單片機跟上位機(HOST)依據RS232傳輸協(xié)議的通信程序設計。3.1 SD卡的扇區(qū)讀寫SD卡扇區(qū)讀寫主要包含:單片機普通I/O口模擬SPI協(xié)議,SD卡初始化,SD卡扇區(qū)數據的讀寫。3.1.1

29、模擬SPI協(xié)議SD卡的SPI通信接口使其可以通過SPI通道進行數據讀寫。從應用的角度來看,采用SPI接口的好處在于,很多單片機內部自帶SPI控制器,不光給開發(fā)上帶來方便,同時也見降低了開發(fā)成本。對于不帶SPI串行總線接口的MXT8051F04A單片機,需要用軟件來模擬SPI總線操作。軟件模擬SPI協(xié)議讀寫字節(jié)如圖3-1和3-2。圖3-1 讀取一個字節(jié)圖3-2 發(fā)送一個字節(jié)3.1.2 SD卡命令SD卡自身具有完備的命令系統(tǒng),以實現各項操作。SD卡命令共分為12類,分別為Class0-Class12。不同的SD卡支持的指令集不盡相同,SP1模式下支持的命令和SD總線模式下支持的命令也不一致。SD卡

30、所有的命令都由6個字節(jié)組成,發(fā)送的時候首先發(fā)送最高位。其命令格式如表3-1。表3-1 SD卡命令的格式Byte1Byte2-Byte5Byte6765 0 31 07 001命令號命令參數CRC校驗碼1Byte1:命令的開始位為始終為0;1表明是主機發(fā)送給SD卡的命令,后面是命令號(命令號,由指令標志定義,如CMD39為即十六進制為0x27,那么完整的CMD39第一字節(jié)為,即0x27+0x40)。Byte2-5:命令參數,有些命令沒有參數。例如CMD0命令參數就為0。CMD24為寫單塊命令就有命令參數,命令參數就是要寫扇區(qū)的地址。Byte6:前7位為CRC校驗位,最后一位為停止位0。命令傳輸過

31、程采用發(fā)送應答機制過程如圖3-3所示。 圖3-3 命令應答表3-2列取了SPI模式下常用的命令。表3-2 SPI模式下常用命令命令號功能CMD0復位SD卡CMD1讀OCR寄存器CMD9讀CSD寄存器CMD10讀CID寄存器CMD12停止讀多塊時的數據傳輸CMD16設置塊的長度CMD17寫單塊CMD18讀多塊,直到主機發(fā)送CMD12為止CMD24寫單塊CMD25寫多塊CMD32設置擦出塊的起始地址CMD33設置擦出塊的終止地址CMD38擦出所選的塊CMD55狀態(tài)每一個命令都有自己命令應答格式。在SPI模式中定義了三種應答格式,如表3-3、表3-4、表3-5所示。表3-3 二字節(jié)應答模式字節(jié)位含義

32、 17開始位,始終為06參數錯誤5地址錯誤4擦除序列錯誤3CRC錯誤2非法命令1擦除復位0閑置狀態(tài) 27溢出,CSD覆蓋6擦除參數5寫保護非法4卡ECC失敗3卡控制器錯誤2未知錯誤1寫保護擦除跳過,鎖解鎖失敗0鎖卡表3-5 六字節(jié)應答模式字節(jié)位含義17開始位,始終為06參數錯誤5地址錯誤4擦除序列錯誤3CRC錯誤2非法命令1擦除復位0閑置狀態(tài)25全部操作條件寄存器,高位在前表3-3 一字節(jié)應答模式字節(jié)位含義 17開始位,始終為06參數錯誤5地址錯誤4擦除序列錯誤3CRC錯誤2非法命令1擦除復位0閑置狀態(tài)3.1.3 SD卡的初始化SD卡的初始化是非常重要的,只有進行了正確的初始化,才能進行扇區(qū)讀

33、寫等操作。根據SD卡的手冊說明,在初始化過程中,SPI的時鐘不能太快,否則會造初始化失敗。在初始化成功后,應盡量提高SPI的速率。在剛開始要先發(fā)送至少74個時鐘信號,這是必須的,因為在上電初期,電壓的上升過程據SD卡組織的計算約合64個CLK周期才能到達SD卡的正常工作電壓,其后的10個CLK是為了與SD卡同步,如果疏忽了這一點,可能使初始化不成功。隨后就是寫入命令CMD0,為了實現兼容性,發(fā)送CMD0后,再發(fā)送CMD55和ACMD41(使用ACMD類的指令前應先發(fā)CMD55,CMD55起到一個切換到ACMD類命令的作用)確認是否有回應,如果有回應則為SD卡,如果等回應超時,則可能是MMC卡,

34、再發(fā)CMD1確認。完成上面操作后SD卡進入SPI模式。主機還可以繼續(xù)通過CMD10讀取SD卡的CID寄存器,通過CMD16設置數據Block長度,通過CMD9讀取卡的CSD寄存器。從CSD寄存器中,主機可獲知卡容量,支持的命令集等重要參數。SD卡初始化的C語言程序見附錄。其流程圖如圖3-4所示。圖3-4 SD卡初始化3.1.4 數據塊的讀寫完成SD卡的初始化之后即可進行它的讀寫操作。SD卡的讀寫操作都是通過發(fā)送SD卡命令完成的。SPI總線模式支持單塊(CMD24)和多塊(CMD25)寫操作,多塊操作是指從指定位置開始寫下去,直到SD卡收到一個停止命令CMD12才停止。單塊寫操作的數據塊長度只能

35、是512 字節(jié)。單塊寫入時,命令為CMD24,當應答為0時說明可以寫入數據,大小為512 字節(jié)。SD卡對每個發(fā)送給自己的數據塊都通過一個應答命令確認,它為1個字節(jié)長,當低5位為00101 時,表明數據塊被正確寫入SD 卡。寫SD卡程序流程圖如圖3-5。具體C程序實現如下:unsigned char SD_WriteSector(unsigned char *buffer, unsigned long address)unsigned int count = 0;unsigned char response = 0xff; unsigned int timeout = 0; /寫命令超時addr

36、ess = 9; /address=address*512將塊地址轉為字節(jié)地址 SD_Enable(); doresponse = SD_WriteCommand(0x18, address, 0xff);/發(fā)送讀數據命令timeout+;while(0x0 != response) & (timeout TRY_TIME); if(0x0 = response) SD_WriteByte(0xff);SD_WriteByte(0xff);/command was a success - now send data SD_WriteByte(0xfe); /寫入開始字節(jié) 0xfe for(co

37、unt = 0; count 512; count+)/將緩沖區(qū)中的512個字節(jié)寫入SD卡 SD_WriteByte(*buffer+); SD_WriteByte(0xff); SD_WriteByte(0xff); /兩個字節(jié)的CRC校驗碼,不用關心 response = SD_ReadByte();/讀數據響應response = response & 0x1f;if(0x05 != response)SD_Disable();/如果返回值是XXX00101說明數據已經被SD卡接受Uart_Send_String(寫扇區(qū)失敗rn);return SD_WRITE_ERROR;/*等到SD

38、卡不忙數據被接受以后,SD卡要將這些數據寫入到自身的FLASH中,需要一個時間忙時,讀回來的值為0x00,不忙時,為0xff*/ while(0 = SD_ReadByte(); /等到SD卡不忙 SD_Disable(); SD_WriteByte(0xff);/按照SD卡的操作時序在這里補8個時鐘return SD_SUCCESS; /寫扇區(qū)操作成功return SD_WRITE_ERROR;/寫扇區(qū)操作失敗圖3-5 寫扇區(qū)在需要讀取SD卡中數據的時候,先發(fā)送讀SD卡的命令字CMD17,接收正確的第一個響應命令字節(jié)為0xFE,隨后是512個字節(jié)的用戶數據塊,最后為2個字節(jié)的CRC 驗證碼。

39、可見,讀寫SD卡的操作都是在初始化后基于SD卡命令和響應完成操作的,讀SD卡的程序流程圖如圖3-6。具體C程序實現如下:/* 函數: SD_ReadSector.* 描述: 寫扇區(qū).* 輸入: buffer:存放讀出數據的緩沖* 輸出: address:要讀取數據的地址.* 返回: 如果操作成功返回SD_SUCCESS.失敗返回SD_READ_ERROR*/unsigned char SD_ReadSector(unsigned char *buffer, unsigned long address)unsigned int count = 0; unsigned char response

40、= 0xff;unsigned int timeout = 0; /寫命令超時address = 9; /address=address*512將塊地址轉為字節(jié)地址 SD_Enable(); doresponse = SD_WriteCommand(0x11,address,0xff);/寫入CMD17timeout+;while(0x0 != response) & (timeout TRY_TIME); if(response = = 0) while(SD_ReadByte()!=0xfe);/start with DATA TOKEN = 0xFESD_ReadByte();for(c

41、ount = 0; count 512; count+) *buffer+ = SD_ReadByte(); SD_ReadByte();/讀校驗和 SD_ReadByte(); SD_Disable(); SD_WriteByte(0xff);/按照SD卡的操作時序在這里補8個時鐘 return SD_SUCCESS; /讀扇區(qū)操作成功 Uart_Send_String(讀扇區(qū)失敗rn);return SD_READ_ERROR; /讀扇區(qū)操作失敗圖3-6 讀扇區(qū)3.2 串口程序串口程序主要是串口初始化程序和串口發(fā)送接收程序。串口初始化程序主要完成串口的中斷設置,波特率設置,接收使能等。流程

42、圖如圖3-7。圖3-7 串口初始化串口的發(fā)送接收程序比較簡單,串口發(fā)送程序只需把要發(fā)送的數據賦給串口數據緩沖寄存器,當數據發(fā)送完成后,發(fā)送中斷標志有硬件置1,申請中斷,CPU響應后發(fā)送下一幀數據,該中斷發(fā)送標志位必須有軟件清0。串口接收程序和發(fā)送程序相似,在接收到第8位數據時,硬件置位接收中斷標志位,進入中斷服務程序,在中斷服務程序中把數據緩沖寄存器的值賦給存放接收數據的臨時內存。該中斷接收標志位也必須有軟件清0。第4章 調試系統(tǒng)調試由三部分組成:硬件調試、軟件調試、軟硬件的聯合調試。4.1 系統(tǒng)硬件調試在板子拿到手后,我們完成電路的焊接工作,在電路的焊接過程中,我們應該一個一個模塊的焊接,焊

43、接完一個模塊,檢查一個模塊。首先焊接電源相關的部分,把電源部分焊接完后,檢查下是否存在虛焊、漏焊等情況。如果確認無誤后加上直流電源,查看電源的電流情況,如果電流過大可能存在短路的情況,應立即關閉電源檢查線路。如果正常,則用萬用表檢查各個輸入輸出點的電壓是否正確。首先,測試9V電壓是否加到ASMlll7-5.0的輸入端上,測試中發(fā)現已經正確加在了ASMlll7-5.0上,之后檢測ASMlll7-5.0輸出引腳是否為5V左右,然后測試5V電壓是否加到ASMlll7-3.3的輸入端上,測試中發(fā)現已經正確加在了ASMlll7-3.3上,之后檢測ASMlll7-3.3輸出引腳是否為3.3V左右,如果結果

44、都正確,則表明電源模塊部分正確。在確認電源模塊沒有問題的情況下焊接主要芯片,如MXT8051F04A、MAX232等。焊接完這些芯片后,測量各個芯片的供電電壓是否正確。雖然電壓加上了,但是不知道單片機是否真的工作起來了,于是用示波器觀察MTX8051晶振的輸出波形是否是11.0592M的正弦波。如果觀察到了,說明單片機正常工作。主芯片正常工作后,下面就是測試串口是否正常工作。下載先前編寫好的串口發(fā)送接收程序,通過燒程器把程序下載到單片機里運行,打開串口調試助手,觀察串口調試助手是否接收到了發(fā)送的字符。如果接收到了,表明串口電路正常工作。如果不正常工作,首先檢查硬件原理圖是否正確,TXD和RXD

45、是否接反,波特率是否設置正確,串口調試助手的打開的端口是否和實際端口不一致。通過上面的調試,硬件電路正常工作,硬件調試工作完成。4.2 軟件調試在硬件還沒有準備好的情況下,在Keil下進行了軟件的單步跟蹤。通過在keil下單步跟蹤調試發(fā)現一個問題:在SD卡的發(fā)送命令函數中,定義了一個無符號型變量,初始值賦值3對其進行自減操作,判斷是否大于等于0,如果為假則循環(huán)結束。結果導致程序進入死循環(huán),運行不正常。后來跟蹤到這里才發(fā)現變量為無符號變量,而我卻用來進行自減,當變量自減到0時,因為是無符號變量,所以再自減就變?yōu)榱?28,所以進入了死循環(huán),把變量改為符號型變量,問題解決。4.3 軟硬件的聯合調試硬

46、件制作好后,就開始軟硬件的聯合調試。其中遇到的問題主要有以下幾個:1. 程序里向串口發(fā)送中文字符,結果串口調試助手顯示為亂碼。首先檢查程序的波特率是否和串口調試助手的波特率是否一致,檢查是一致的,后面我把中文改為英文,正常顯示,猜想可能是串口調試助手版本太低,下載高版本串口調試助手問題解決。2. I/O端口的輸入輸出設置錯誤,導致程序一直不運行。MXT8051F04A單片機和普通的51單片機在I/O端口上有點不一致,普通51單片機自動識別輸入輸出。但MXT8051F04A必須設置其I/O引腳為輸入引腳,還是輸出引腳。開始程序全部設置為輸出引腳了,這樣對SD卡的讀取全部無效,導致應答命令始終不對

47、,程序始終不工作。通過以上的調試,程序運行正常。程序流程如下:首先初始化MXT8051F04A單片機串口,然后執(zhí)行SD卡初始化操作,SD卡初始化完成后,開始往SD卡的7632扇區(qū)寫入數據(peng yuan zhi),通過串口調試助手顯示剛才寫入扇區(qū)的數據,然后再讀取剛才寫的扇區(qū)的數據,顯示結果見圖4-1。我們把SD卡從電路板上取下,插入到電腦的5合1讀卡器中,通過WinHex軟件在電腦上查看數據是否真的寫入到了SD卡中的7632扇區(qū),結果如圖4-2所示。通過WinHex的觀察,數據確實寫入了SD卡的7632扇區(qū)。圖4-1 程序運行結果圖4-2 寫入SD卡的數據圖4-3和圖4-4為制作的實物照

48、片。圖4-3為單片機系統(tǒng)和SD卡模塊,圖4-4為SD卡模塊的背面。圖4-3 實物圖4-4 SD卡模塊背面4.4 本章小結以上簡要的敘述了在系統(tǒng)調試過程中遇到的一些問題和使用的一些調試手段,其中包括硬件調試和軟件調試的問題,并給出了問題的解決方法,還有許多常見的問題,這些問題大都是由于本人粗心大意造成的,這里不再加以說明。第5章 結束語5.1 總結論文的基本目標:實現51單片機對SD卡的讀寫并把讀寫過程進行顯示。根據基本目標,首先進行了相關資料的收集和整理,其中包括關于SPI總線協(xié)議和SD卡通信命令以及RS232協(xié)議,單片機的系統(tǒng)結構,通過對以上英文資料的翻譯和相關中文資料的查閱,對系統(tǒng)實現的原

49、理和其理論基礎以有了初步的認識。再通過制作硬件的制作對系統(tǒng)的功能和接口有了深刻的理解。最后通過軟、硬件調試實現了以下功能:(l)通過硬件測試工具,完成了對硬件電路的測試,為實現整個系統(tǒng)的功能奠定了基礎。(2)SD扇區(qū)讀寫的實現。通過對SD卡協(xié)議的理解,使用相應的控制命令完成了對SD卡扇區(qū)的讀寫。(3)對讀寫過程進行顯示。通過向串口調試助手顯示扇區(qū)的讀寫過程和數據。通過以上的各個實驗進一步加深了對原理和協(xié)議的理解,增加了實際動手能力,對所學的知識進一步鞏固。5.2 展望由于時間有限,本系統(tǒng)還存在一些需要改進和進一步完善的地方,包括:(l)本系統(tǒng)沒有實現FAT32文件系統(tǒng),如果實現了FAT32文件

50、系統(tǒng)將提高SD卡的存儲效率,系統(tǒng)的可用性和兼容性。(2) 讀寫速度有限,如果采用4線并行方式對扇區(qū)進行讀寫,速度將得到明顯的提高。參考文獻1Microsoft Extens ible Firmware Initiative FAT32 File System Specification.Vers ion 1.03,December 6,2000.Microsoft Corporation2W86L388D Winbond Hos t Interface SD/MMC Memory Card Bridge.Vers ion 1.0,May 17,20053SD卡官方資料4周立功,等.ARM嵌入式

51、系統(tǒng)軟件開發(fā)實例( 一) M .北京:北京航空航天大學出版社, 20055宋群生, 宋亞瓊.硬盤扇區(qū)讀寫技術- 修復硬盤與恢復文件M .北京:機械工業(yè)出版社, 20046李華等.51系列單片機實用接口技術.北京航空航大大學出版社,2002第9版7賴文麟.8051單片機嵌入式系統(tǒng)應用,科學出版社,20028何立民.單片機應用技術選編()l一(7).北京航空航天大學出版社,20009何立民.單片機高級教程一應用與設計.北京航空航天大學出版社,2000.10南建輝,熊鳴,王軍.MCS一51單片機原理與應用實例M 北京:清華大學出版社,200311李玉峰,倪虹霞.MCS一51系列單片機原理與接口技術術

52、M 北京:人民郵電出版社,200.412維提,郭強.液晶顯示應用技術.北京:電子土業(yè)出版社,200013鄧龍軍.單片機控制系統(tǒng)的理論與應用研究14段九州.電源電路實用設計手冊.沈陽:遼寧科學技術出版社,2002.815何立民,萬光毅,嚴義.單片機實驗與實踐教程M.北京:北京航空航天大學出版社,2003.16沈紅衛(wèi).基于單片機的智能系統(tǒng)設計與實現M.北京:清華大學出版社,200217李朝青.單片機原理及接口技術M.北京:北京航空航天大學出版社,199818王福瑞.單片機微機測控系統(tǒng)設計大全M.北京航天航空大學出版社,1999致謝本文是在導師周銀祥老師的精心指導下完成的。周老師對我的畢業(yè)設計傾注了

53、大量的心血,使我在獲取知識的同時,綜合能力得到較大的提高。學位論文從選題到最后定稿,始終得到了周老師的精心指導和幫助。在學術上,周老師淵博精深的知識,務實嚴謹、精益求精的治學態(tài)度和一絲不茍的工作作風,使我受益匪淺。同時衷心地感謝創(chuàng)新實驗室的師兄師姐、師弟師妹在我畢業(yè)設計期間給予的關心和幫助。還要感謝所有本科期間在學習、生活上給予我關心、支持、鼓勵和熱心幫助我的老師、同學和朋友。同樣感謝我的父母家人在生活上給我的關心和鼓勵,學業(yè)的完成離不開他們背后的支持。最后對各位專家老師仔細審閱我的論文表示感謝,期盼給予批評指正。附錄附錄一:單片機讀寫SD卡的完整原理圖附圖1-1 SD卡接口電路附圖1-2 電平轉換電路附圖1-3 單片機最小系統(tǒng)、電源和串口電路附錄二:單片機讀寫SD卡的完整程序/* *File nam

溫馨提示

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

最新文檔

評論

0/150

提交評論