0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)完成對(duì)SD卡的讀寫(xiě)

放人 ? 來(lái)源:電氣工程及其自動(dòng)化學(xué)習(xí) ? 作者:電氣工程及其自動(dòng) ? 2022-11-29 01:37 ? 次閱讀

SD卡在現(xiàn)在的日常生活與工作中使用非常廣泛,時(shí)下已經(jīng)成為最為通用的數(shù)據(jù)存儲(chǔ)卡。在諸如MP3、數(shù)碼相機(jī)等設(shè)備上也都采用SD卡作為其存儲(chǔ)設(shè)備

SD卡在現(xiàn)在的日常日子與作業(yè)中運(yùn)用十分廣泛,時(shí)下已經(jīng)成為最為通用的數(shù)據(jù)存儲(chǔ)卡。在比如MP3、數(shù)碼相機(jī)等設(shè)備上也都選用SD卡作為其存儲(chǔ)設(shè)備。SD卡之所以得到如此廣泛的運(yùn)用,是由于它價(jià)格低廉、存儲(chǔ)容量大、運(yùn)用便利、通用性與安全性強(qiáng)等長(zhǎng)處。已然它有著這么多長(zhǎng)處,那么假如將它加入到單片機(jī)應(yīng)用開(kāi)發(fā)體系中來(lái),將使體系變得愈加超卓。這就要求對(duì)SD卡的硬件與讀寫(xiě)時(shí)序進(jìn)行研究。關(guān)于SD卡的硬件結(jié)構(gòu),在官方的文檔上有很具體的介紹,如SD卡內(nèi)的存儲(chǔ)器結(jié)構(gòu)、存儲(chǔ)單元安排辦法等內(nèi)容。要完成對(duì)它的讀寫(xiě),最中心的是它的時(shí)序,筆者在經(jīng)過(guò)了實(shí)踐的測(cè)驗(yàn)后,運(yùn)用51單片機(jī)成功完成了對(duì)SD卡的扇區(qū)讀寫(xiě),并對(duì)其讀寫(xiě)速度進(jìn)行了評(píng)價(jià)。下面先來(lái)解說(shuō)SD卡的讀寫(xiě)時(shí)序。

(1)SD卡的引腳界說(shuō):
6230736c-6f43-11ed-b468-dac502259ad0.jpg
SD卡引腳功用臚陳:

引腳
編號(hào)
SD形式 SPI形式
稱號(hào) 類型 描繪 稱號(hào) 類型 描繪
1 CD/DAT3 IO或PP 卡檢測(cè)/
數(shù)據(jù)線3
#CS I 片選
2 CMD PP 指令/
回應(yīng)
DI I 數(shù)據(jù)輸入
3 VSS1 S 電源 VSS S 電源地
4 VDD S 電源 VDD S 電源
5 CLK I 時(shí)鐘 SCLK I 時(shí)鐘
6 VSS2 S 電源地 VSS2 S 電源地
7 DAT0 IO或PP 數(shù)據(jù)線0 DO O或PP 數(shù)據(jù)輸出
8 DAT1 IO或PP 數(shù)據(jù)線1 RSV
9 DAT2 IO或PP 數(shù)據(jù)線2 RSV

注:S:電源供應(yīng)I:輸入O:選用推拉驅(qū)動(dòng)的輸出
PP:選用推拉驅(qū)動(dòng)的輸入輸出 SD卡SPI形式下與單片機(jī)的銜接圖:

62485734-6f43-11ed-b468-dac502259ad0.jpg

SD卡支撐兩種總線辦法:SD辦法與SPI辦法。其間SD辦法選用6線制,運(yùn)用CLK、CMD、DAT0~DAT3進(jìn)行數(shù)據(jù)通訊。而SPI辦法選用4線制,運(yùn)用CS、CLK、DataIn、DataOut進(jìn)行數(shù)據(jù)通訊。SD辦法時(shí)的數(shù)據(jù)傳輸速度與SPI辦法要快,選用單片機(jī)對(duì)SD卡進(jìn)行讀寫(xiě)時(shí)一般都選用SPI形式。選用不同的初始化辦法可以使SD卡作業(yè)于SD辦法或SPI辦法。這兒只對(duì)其SPI辦法進(jìn)行介紹。

(2)SPI辦法驅(qū)動(dòng)SD卡的辦法
SD卡的SPI通訊接口使其可以經(jīng)過(guò)SPI通道進(jìn)行數(shù)據(jù)讀寫(xiě)。從運(yùn)用的視點(diǎn)來(lái)看,選用SPI接口的優(yōu)點(diǎn)在于,許多單片機(jī)內(nèi)部自帶SPI控制器,不但給開(kāi)發(fā)上帶來(lái)便利,一起也見(jiàn)降低了開(kāi)發(fā)本錢(qián)。但是,它也有欠好的當(dāng)?shù)?,如失去了SD卡的功能優(yōu)勢(shì),要處理這一問(wèn)題,就要用SD辦法,由于它供給更大的總線數(shù)據(jù)帶寬。SPI接口的選用是在上電初始時(shí)向其寫(xiě)入第一個(gè)指令時(shí)進(jìn)行的。以下介紹SD卡的驅(qū)動(dòng)辦法,只完成簡(jiǎn)略的扇區(qū)讀寫(xiě)。
1)指令與數(shù)據(jù)傳輸
1.指令傳輸
SD卡本身有齊備的指令體系,以完成各項(xiàng)操作。指令格局如下:


626b752a-6f43-11ed-b468-dac502259ad0.jpg
指令的傳輸進(jìn)程選用發(fā)送應(yīng)對(duì)機(jī)制,進(jìn)程如下:
628c7a04-6f43-11ed-b468-dac502259ad0.jpg
每一個(gè)指令都有自己指令應(yīng)對(duì)格局。在SPI形式中界說(shuō)了三種應(yīng)對(duì)格局,如下表所示:

字節(jié) 意義
1 7 開(kāi)端位,一直為0
6 參數(shù)過(guò)錯(cuò)
5 地址過(guò)錯(cuò)
4 擦除序列過(guò)錯(cuò)
3 CRC過(guò)錯(cuò)
2 不合法指令
1 擦除復(fù)位
0 擱置狀況
字節(jié) 意義
1 7 開(kāi)端位,一直為0
6 參數(shù)過(guò)錯(cuò)
5 地址過(guò)錯(cuò)
4 擦除序列過(guò)錯(cuò)
3 CRC過(guò)錯(cuò)
2 不合法指令
1 擦除復(fù)位
0 擱置狀況
2 7 溢出,CSD掩蓋
6 擦除參數(shù)
5 寫(xiě)保護(hù)不合法
4 卡ECC失利
3 卡控制器過(guò)錯(cuò)
2 不知道過(guò)錯(cuò)
1 寫(xiě)保護(hù)擦除越過(guò),鎖/解鎖失利
0 鎖卡
字節(jié) 意義
1 7 開(kāi)端位,一直為0
6 參數(shù)過(guò)錯(cuò)
5 地址過(guò)錯(cuò)
4 擦除序列過(guò)錯(cuò)
3 CRC過(guò)錯(cuò)
2 不合法指令
1 擦除復(fù)位
0 擱置狀況
2~5 悉數(shù) 操作條件寄存器,高位在前

寫(xiě)指令的例程:

//-----------------------------------------------------------------------------------------------

向SD卡中寫(xiě)入指令,并回來(lái)回應(yīng)的第二個(gè)字節(jié)

//-----------------------------------------------------------------------------------------------

unsignedcharWrite_Command_SD(unsignedchar*CMD)

{

unsignedchartmp;

unsignedcharretry=0;

unsignedchari;

//制止SD卡片選

SPI_CS=1;

//發(fā)送8個(gè)時(shí)鐘信號(hào)

Write_Byte_SD(0xFF);

//使能SD卡片選

SPI_CS=0;

//向SD卡發(fā)送6字節(jié)指令

for(i=0;i<0x06;i++)

{

Write_Byte_SD(*CMD++);

}

//取得16位的回應(yīng)

Read_Byte_SD();//readthefirstbyte,ignoreit.

do

{//讀取后8位

tmp=Read_Byte_SD();

retry++;

}

while((tmp==0xff)&&(retry<100));

return(tmp);

}

2)初始化

SD卡的初始化是十分重要的,只要進(jìn)行了正確的初始化,才干進(jìn)行后邊的各項(xiàng)操作。在初始化進(jìn)程中,SPI的時(shí)鐘不能太快,否則會(huì)造初始化失利。在初始化成功后,應(yīng)盡量進(jìn)步SPI的速率。在剛開(kāi)端要先發(fā)送至少74個(gè)時(shí)鐘信號(hào),這是有必要的。在許多讀者的試驗(yàn)中,許多是由于忽略了這一點(diǎn),而使初始化不成功。隨后便是寫(xiě)入兩個(gè)指令CMD0與CMD1,使SD卡進(jìn)入SPI形式

初始化時(shí)序圖:
62a48036-6f43-11ed-b468-dac502259ad0.jpg
62bbe58c-6f43-11ed-b468-dac502259ad0.jpg
初始化例程:

//--------------------------------------------------------------------------

初始化SD卡到SPI形式

//--------------------------------------------------------------------------

unsignedcharSD_Init()

{

unsignedcharretry,temp;

unsignedchari;

unsignedcharCMD[]={0x40,0x00,0x00,0x00,0x00,0x95};

SD_Port_Init();//初始化驅(qū)動(dòng)端口

Init_Flag=1;//將初始化標(biāo)志置1

for(i=0;i<0x0f;i++)

{

Write_Byte_SD(0xff);//發(fā)送至少74個(gè)時(shí)鐘信號(hào)

}

//向SD卡發(fā)送CMD0

retry=0;

do

{//為了可以成功寫(xiě)入CMD0,在這兒寫(xiě)200次

temp=Write_Command_SD(CMD);

retry++;

if(retry==200)

{//超越200次

return(INIT_CMD0_ERROR);//CMD0Error!

}

}

while(temp!=1);//回應(yīng)01h,中止寫(xiě)入

//發(fā)送CMD1到SD卡

CMD[0]=0x41;//CMD1

CMD[5]=0xFF;

retry=0;

do

{//為了能成功寫(xiě)入CMD1,寫(xiě)100次

temp=Write_Command_SD(CMD);

retry++;

if(retry==100)

{//超越100次

return(INIT_CMD1_ERROR);//CMD1Error!

}

}

while(temp!=0);//回應(yīng)00h中止寫(xiě)入

Init_Flag=0;//初始化結(jié)束,初始化標(biāo)志清零

SPI_CS=1;//片選無(wú)效

return(0);//初始化成功

}

3)讀取CID
CID寄存器存儲(chǔ)了SD卡的標(biāo)識(shí)碼。每一個(gè)卡都有僅有的標(biāo)識(shí)碼。
CID寄存器長(zhǎng)度為128位。它的寄存器結(jié)構(gòu)如下:

稱號(hào) 數(shù)據(jù)寬度 CID區(qū)分
出產(chǎn)標(biāo)識(shí)號(hào) MID 8 [127:120]
OEM/運(yùn)用標(biāo)識(shí) OID 16 [119:104]
產(chǎn)品稱號(hào) PNM 40 [103:64]
產(chǎn)品版別 PRV 8 [63:56]
產(chǎn)品序列號(hào) PSN 32 [55:24]
保存 4 [23:20]
出產(chǎn)日期 MDT 12 [19:8]
CRC7校驗(yàn)合 CRC 7 [7:1]
未運(yùn)用,一直為1 1 [0:0]

它的讀取時(shí)序如下:
62c4ca80-6f43-11ed-b468-dac502259ad0.jpg
與此時(shí)序相對(duì)應(yīng)的程序如下:

//------------------------------------------------------------------------------------

讀取SD卡的CID寄存器16字節(jié)成功回來(lái)0

//-------------------------------------------------------------------------------------

unsignedcharRead_CID_SD(unsignedchar*Buffer)

{

//讀取CID寄存器的指令

unsignedcharCMD[]={0x4A,0x00,0x00,0x00,0x00,0xFF};

unsignedchartemp;

temp=SD_Read_Block(CMD,Buffer,16);//read16bytes

return(temp);

}

審核編輯黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631980
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    558

    瀏覽量

    63737
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    利用51單片機(jī)讀寫(xiě)sd

    利用51單片機(jī)讀寫(xiě)sd
    發(fā)表于 11-12 12:44

    利用51單片機(jī)讀寫(xiě)sd

    利用51單片機(jī)讀寫(xiě)sd
    發(fā)表于 11-13 12:30

    利用51單片機(jī)讀寫(xiě)sd

    本帖最后由 gk320830 于 2015-3-5 03:30 編輯 利用51單片機(jī)讀寫(xiě)sd
    發(fā)表于 07-30 21:11

    利用51單片機(jī)讀寫(xiě)sd

    利用51單片機(jī)讀寫(xiě)sd
    發(fā)表于 05-24 18:50

    基于MSP430單片機(jī)SD讀寫(xiě)

    利用SD研究、設(shè)計(jì)一種大容量心電存儲(chǔ)及回放系統(tǒng)。系統(tǒng)基于高速低功耗的msp430單片機(jī),利用串行外圍接口總線與SD相連,實(shí)現(xiàn)對(duì)
    發(fā)表于 10-20 16:07 ?814次下載

    基于AT89C52單片機(jī)SD讀寫(xiě)設(shè)計(jì)

    基于AT89C52單片機(jī)SD讀寫(xiě)設(shè)計(jì) 前言   長(zhǎng)期以來(lái),以Flash Memory為存儲(chǔ)體的SD
    發(fā)表于 01-15 10:16 ?1751次閱讀
    基于AT89C52<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的<b class='flag-5'>讀寫(xiě)</b>設(shè)計(jì)

    STCl2C5A60S2單片機(jī)SD讀寫(xiě)

    STCl2C5A60S2單片機(jī)SD讀寫(xiě) 摘要:分析了基于STC單片機(jī)SD
    發(fā)表于 04-23 14:59 ?4321次閱讀
    STCl2C5A60S2<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫(xiě)</b>

    51單片機(jī)SD接口設(shè)計(jì)

    介紹51單片機(jī)SD的接口設(shè)計(jì)原理,以及FAT32文件系統(tǒng)的設(shè)計(jì)和應(yīng)用程序控制SD
    發(fā)表于 04-09 15:35 ?412次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>SD</b><b class='flag-5'>卡</b>接口設(shè)計(jì)

    SD讀寫(xiě)控制研究_張淼

    SD讀寫(xiě)控制研究_張淼 用單片機(jī)控制SD讀寫(xiě)
    發(fā)表于 04-14 16:43 ?9次下載

    51單片機(jī)讀寫(xiě)SD(命令解釋)

    51單片機(jī)讀寫(xiě)SD(命令解釋)的詳細(xì)資料
    發(fā)表于 09-06 17:33 ?53次下載

    ARM基礎(chǔ)應(yīng)用實(shí)驗(yàn)_SD讀寫(xiě)

    電子專業(yè)單片機(jī)相關(guān)知識(shí)學(xué)習(xí)教材資料——ARM基礎(chǔ)應(yīng)用實(shí)驗(yàn)06SD讀寫(xiě)
    發(fā)表于 09-13 17:23 ?0次下載

    基于Atmega128單片機(jī)SD讀寫(xiě)程序(免費(fèi)分享)

    avr Atmega128單片機(jī)SD讀寫(xiě)程序
    發(fā)表于 12-29 20:55 ?21次下載

    基于MSP430單片機(jī)SD讀寫(xiě),并建立fat文件系統(tǒng)

    基于MSP430單片機(jī)SD讀寫(xiě),并建立fat文件系統(tǒng)
    發(fā)表于 09-21 09:13 ?23次下載
    基于MSP430<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫(xiě)</b>,并建立fat文件系統(tǒng)

    51單片機(jī)讀寫(xiě)SD程序?qū)嵗螺d.pdf

    51單片機(jī)讀寫(xiě)SD程序?qū)嵗螺d.pdf
    發(fā)表于 04-20 11:21 ?100次下載

    AT89C52單片機(jī)SD讀寫(xiě)設(shè)計(jì)

    應(yīng)用AT89C52讀寫(xiě)SD有兩點(diǎn)需要注意。首先,需要尋找一個(gè)實(shí)現(xiàn)AT89C52 單片機(jī)SD卡通訊的解決方案;其次,
    的頭像 發(fā)表于 02-16 11:23 ?4438次閱讀
    AT89C52<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>讀寫(xiě)</b>設(shè)計(jì)