新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ATmega128L單片機(jī)的Micro SD卡讀寫

ATmega128L單片機(jī)的Micro SD卡讀寫

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
引言

隨著工業(yè)控制系統(tǒng)功能的增強(qiáng),系統(tǒng)對(duì)于存儲(chǔ)介質(zhì)的安全、容量、性能的要求越來越高。Micro SD卡是在SD卡和Mini SD卡基礎(chǔ)上發(fā)展起來的一種多功能存儲(chǔ)卡,具備串行和隨機(jī)存取能力,可以通過專用優(yōu)化速度的串行接口訪問,數(shù)據(jù)傳輸可靠,安全性好,傳輸速度快,存儲(chǔ)容量大,體積小,被列為目前全球最小的迷你存儲(chǔ)卡。Micro SD卡支持SD模式和SPI模式。隨著高性能單片機(jī)的性能不斷提高,利用高性能、低功耗的AVR8位ATmegal28L單片機(jī)的串行外設(shè)接口SPI與Micro SD卡之間進(jìn)行高速同步數(shù)據(jù)傳輸,設(shè)計(jì)開發(fā)了一種嵌入式文件系統(tǒng)。

1 硬件電路設(shè)計(jì)

MicrO SD卡的接口可以支持兩種操作模式:SD模式和SPI模式。主機(jī)系統(tǒng)可以選擇其中任一模式。SD卡模式允許4線的高速數(shù)據(jù)傳輸,傳輸速率高,但是大部分單片機(jī)無此接口,使用軟件模擬協(xié)議復(fù)雜。SPI模式使用簡(jiǎn)單通用的SPI通道接口就可實(shí)現(xiàn)數(shù)據(jù)傳輸,目前大多數(shù)單片機(jī)提供SPI接口。SPI模式的優(yōu)勢(shì)在于可以使用標(biāo)準(zhǔn)主機(jī),從而把外設(shè)減少到最低。SPI模式相對(duì)于SD模式的缺點(diǎn)是損失了傳輸速度;但是目前的微處理器的處理速度越來越高,利用SPI模式大都能滿足工程需要。

Micro SD卡要求用全雙工、8位的SPI操作。

ATmegal28L單片機(jī)和Micro SD卡之間只需要4根信號(hào)線就可以完成數(shù)據(jù)的讀寫,當(dāng)CS信號(hào)線為低電平時(shí),主機(jī)開始所有的總線傳輸。數(shù)據(jù)從單片機(jī)的MOSI引腳同步輸入Micro SD卡的DI引腳,并由Micro SD卡的DO線同步輸入單片機(jī)的MISO引腳,數(shù)據(jù)在CLK信號(hào)的上升沿同步輸入和輸出。在每個(gè)數(shù)據(jù)傳輸?shù)慕Y(jié)尾還必須提供8個(gè)額外的時(shí)鐘,以允許 Micro SD卡完成任何未完結(jié)的操作。由于Micro SD卡的電壓為3.3 V,所以選擇需要支持3.3 V的I/O端口輸出的ATmegal28L單片機(jī)。另外,使用SPI模式時(shí),為了防止在無卡接人或卡驅(qū)動(dòng)器呈高阻態(tài)時(shí)總線懸空,根據(jù)SD卡規(guī)范,這些信號(hào)需要在主機(jī)端用10 kQ~100 kΩ的上拉電阻,其硬件連接電路如圖1所示。



2 軟件設(shè)計(jì)

2.1 Micro SD卡初始化為SPI總線模式

ATmegal28L單片機(jī)包含一個(gè)串行外設(shè)接口SPI,可以方便地對(duì)Micro SD卡接口進(jìn)行配置。為了配置時(shí)鐘和數(shù)據(jù)長(zhǎng)度,需要對(duì)SPI控制寄存器SPCR和SPI狀態(tài)寄存器SPSR進(jìn)行設(shè)置:使能SPI,選擇單片機(jī)為主機(jī)模式,時(shí)鐘上升沿鎖存數(shù)據(jù),并且對(duì)SPI時(shí)鐘進(jìn)行設(shè)置。Micro SD卡的SPI模式通信由主機(jī)控制。每一個(gè)指令或數(shù)據(jù)塊由8位的字節(jié)和CS標(biāo)志構(gòu)成,SPI通信由指令、響應(yīng)和數(shù)據(jù)組成。主機(jī)先將Micro SD卡的片選CS置低,激活MicroSD卡進(jìn)人工作狀態(tài)。

剛上電時(shí),Micro SD卡缺省使用專有的SD總線協(xié)議。將Micro SD卡切換到SPI模式,主機(jī)需要發(fā)出命令(2MD0(GO_IDLE_STATE)。Micro SD卡會(huì)檢測(cè)到SPI模式選擇信息,因?yàn)榭ㄟx擇(CS)引腳在該命令和其他所有SPI命令傳送過程中都保持為低電平。Micro SD卡以R1作為響應(yīng)??臻e狀態(tài)位被置為高電平,此時(shí)Micro SD卡進(jìn)入空閑狀態(tài),此階段的SPI時(shí)鐘頻率不能超過400kHz(將SPCR寄存器設(shè)置為0x53)。Micro SD卡進(jìn)入SPI模式后,主機(jī)應(yīng)該先發(fā)一條初始化指令CMD1。此時(shí)可將SPI頻率設(shè)置為高速模式(將SPCR寄存器設(shè)置為0x50)。然后發(fā)送命令 CM1359決定是否開啟CRC校驗(yàn),設(shè)置讀、寫塊數(shù)據(jù)長(zhǎng)度,最后延遲8個(gè)時(shí)鐘后返回。MicroSD初始化流程如圖2所示。



2.2 Micro SD卡讀寫單塊數(shù)據(jù)

從Micro SD卡中讀取一個(gè)數(shù)據(jù)塊只需要主機(jī)發(fā)送CMDl7(READl_SINGLE_BLOCK)命令,并將起始地址作為參數(shù)(此地址必須和介質(zhì)上一個(gè)塊的起始位置對(duì)齊),然后.Micro SD卡會(huì)驗(yàn)證這個(gè)字節(jié)地址,并以一個(gè)R1命令作為響應(yīng)。完成了Micro SD卡讀取操作后,先發(fā)送一個(gè)起始數(shù)據(jù)命令,接著發(fā)送固定數(shù)量的數(shù)據(jù),最后是兩個(gè)字節(jié)CRC校驗(yàn)。

從Mimro SD卡中寫入一個(gè)數(shù)據(jù)塊和讀取數(shù)據(jù)塊相似,需要主機(jī)發(fā)送CMI)24(wRITE_BLOCK)命令啟動(dòng)寫操作過程,Micro SD卡將以R1命令響應(yīng)格式進(jìn)行應(yīng)答。如果命令響應(yīng),則進(jìn)行寫操作,主機(jī)發(fā)送起始令牌,然后發(fā)送固定數(shù)量的數(shù)據(jù)字節(jié)(512字節(jié)),返回一個(gè)數(shù)據(jù)響應(yīng)令牌指示需要寫入的數(shù)據(jù)是否完成,最后是兩個(gè)字節(jié)的CRC校驗(yàn),讀寫單塊數(shù)據(jù)流程如圖3所示。



2.3 Micro SD卡的文件存儲(chǔ)

為了方便ATmegal28L單片機(jī)對(duì)Micro SD卡中文件進(jìn)行操作,以及要使Micro sD卡的數(shù)據(jù)能在PC機(jī)上得到正確的訪問,需要在Micro SD卡上創(chuàng)建它們支持的文件系統(tǒng),這就需要設(shè)計(jì)自己的文件管理系統(tǒng)FAT。FAT文件系統(tǒng)有FATl2、FATl6、FAT32,它們的主要不同是在磁盤分配表結(jié)構(gòu)中每個(gè)記錄所占的位數(shù)不同。FAT32文件分配表每一表項(xiàng)為32位。本文選擇建立FAT32文件系統(tǒng)。

上一頁 1 2 下一頁

評(píng)論


技術(shù)專區(qū)

關(guān)閉