SD卡原理及內(nèi)部結(jié)構(gòu)_第1頁(yè)
SD卡原理及內(nèi)部結(jié)構(gòu)_第2頁(yè)
SD卡原理及內(nèi)部結(jié)構(gòu)_第3頁(yè)
SD卡原理及內(nèi)部結(jié)構(gòu)_第4頁(yè)
SD卡原理及內(nèi)部結(jié)構(gòu)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余19頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、簡(jiǎn)介:SD卡(Secure Digital Memory Card )是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種新型存儲(chǔ)器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式。本小節(jié)僅簡(jiǎn)要介紹在SPI模式下,STM32處理器如何讀寫 SD卡,如果讀者如希望詳細(xì)了解 SD卡,可以參考相關(guān)資料。SD卡內(nèi)部結(jié)構(gòu)及引腳如下圖所示:I I 11DAT2CMDCLKDATOCDZDAT3Interface driverDAT1JjrCSD1:?:QFsmeToO*Card interlace controllerr«eTI QCRIjI:01 lo

2、 CID127:0 |OI RCA( 15:011 joI DSFJ1;QI OMemory core interface 怦獣 _2、SD卡管腳圖:SD卡內(nèi)部圖JPG6-1.MIN4HIH_ _wt -CL25M1H L/fl 2 M CD/ CUD 3 DAT* DAT2Mi3、SPI模式下SD各管腳名稱為:sd卡:陽(yáng).<>5$5- rr引.1.M|N區(qū)鯉酸3 4 5 S 7 Gvss ADD CLl ¥SIDATDDAT(LockPo51 h&nSD卡圖JPGin./birri Te 叮 ofE"1(JIHOinliirGeneral To ler

3、<in<e O 15I訕恥 32 SIM B恥 Mlnde Pad DdinitionPm#NameType'SPI Description1CSI'Chip Select (Active low)2Daialn ,1Host to Card CcmTards and Dala3VSS)SSupply Vcrtage Ground4VDDS 'Supply Voltage5CLKIIClock6VSS2S 1Sup,ply Vollagie Gfcufk7DataOu:0Card to Host Data 日躲d Status8RSVffllReserved

4、9RSVIIReservedSPI模式下SD各管腳名稱 為JPG注:一般SD有兩種模式:SD模式和SPI模式,管腳定義如下:DATA0(A)、SD MODE 1 、CD/DATA3 2、CMD 3、VSS1 4、VDD 5、CLK 6、VSS2 7、8、DATA1 9、 DATA2(B)、SPI MODE 1 、CS2、DI 3、VSS 4、VDD 5、SCLK 6、VSS2 7、DO8、RSV 9、RSVSD卡主要引腳和功能為:CLK :時(shí)鐘信號(hào),每個(gè)時(shí)鐘周期傳輸一個(gè)命令或數(shù)據(jù)位,頻率可在025MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生025MHz 的頻率;CMD :雙向命

5、令和回復(fù)線,命令是一次主機(jī)到從卡操作的開始,命令可以是從主機(jī)到單卡尋址,卡或所有卡;也可以是到所有卡;回復(fù)是對(duì)之前命令的回答,回復(fù)可以來自單DAT03 :數(shù)據(jù)線,數(shù)據(jù)可以從卡傳向主機(jī)也可以從主機(jī)傳向卡。SPISD卡以命令形式來控制 SD卡的讀寫等操作??筛鶕?jù)命令對(duì)多塊或單塊進(jìn)行讀寫操作。在模式下其命令由6個(gè)字節(jié)構(gòu)成,其中高位在前。SD卡命令 的格式如表1所示,其中相關(guān)參數(shù) 可以查閱SD卡規(guī)范。MicroSD卡管腳圖:MicroSD卡管腳圖JPGMicroSD卡管腳名稱:Pin#SD ModeSPI ModeNameDescriptionNameTypeDescription1DAT2I'

6、;/O/PPData Lune IBrt 2RSVReserved2CD/DAT3"iopKCard Delecl / Datd Line fBrt 3CS1Chip Select Ineg Irtie)3CMDppCommcfDd/ResponseDI1Data iln4Vnc _sS<jpply voJiageVk)SSupply voltage5CLK1ClockSCLK1Clock6VjissSijpp voilaqe groundVs5SSupply voltaqe qrcjnd7DATOIfO/PPData Line |Brt 0DO6PPData OutSDAfi

7、ho.ppData LmeBit 1RSVReservedMicroSD卡管腳名稱JPGSD卡與MicroSD 卡僅僅是封裝上的不同,MicroSD 卡更小,大小上和一個(gè)SIM卡差不多,但是協(xié)議與SD卡相同。般我們用單片機(jī)操作 SD卡時(shí),都不需要對(duì) FAT分區(qū)表信息做處理,原因如下:1、操作FAT分區(qū)表要增加程序代碼量、增加SRAM的消耗,對(duì)于便攜應(yīng)用來說代碼大小和占 用SRAM的多少至關(guān)重要。SD卡上寫入數(shù)據(jù),這就表2)、即使我們對(duì)FAT分區(qū)表不做任何了解,實(shí)際上我們一樣可以向明使用FAT對(duì)我們做數(shù) 據(jù)存儲(chǔ)應(yīng)用來說如同雞肋。3)、耗費(fèi)大量經(jīng)歷和時(shí)間去了解FAT分區(qū)表對(duì)于我們做嵌入式軟件開發(fā)的

8、人來說有些得不償失。SPI模式做SD數(shù)據(jù)操作時(shí)根本不需要4 )、SD卡支持 兩種操作模式,SD模式和SPI模式,知道FAT ,這時(shí)候SD卡對(duì)于我們來說實(shí)際上就是個(gè)大的、快速的、方便的、容量可變的外部存儲(chǔ)器?;谝陨显?,一般情況下對(duì) SD卡的操作只需要了解SPI通訊就可以了,而現(xiàn)在大部分單片機(jī)都有SPI接口,那么操作 SD卡易如反掌。以下是做SD卡試驗(yàn)時(shí)使用的電路圖:R647K(iSD CR7 -|47K(1RSVlfRS -I47KiiIRSV2SDSD CSDC51(4MOS 2SV SD 59 4SC K 5MISO?RSWRSV29CSDOLTGND cc SCKGND DINRS V

9、IRSV2SD_CARD SD痕ISD卡試驗(yàn)時(shí)使用的電路圖JPG#defineSD SS HSD_P 0RT|=(1vSD_CS/連接到單片機(jī)的片選 MOSI連接單片機(jī) 的數(shù)據(jù)。SPI總線的SD管腳,只有單片機(jī)設(shè)置 SD_CS/為低電平時(shí)才可以操作 SD卡。MOSI管腳(SPI數(shù)據(jù)輸入),單片機(jī)從這個(gè)管腳讀取SD卡內(nèi)MISO連接單片機(jī)入數(shù)據(jù)。SCK連接單片機(jī)SD管腳實(shí)際上在SPI總線的MISO管腳(SPI數(shù)據(jù)輸岀)、單片機(jī)通過這個(gè)管腳向SD卡內(nèi)寫SPI總線的SCK(SPI時(shí)鐘)SD卡內(nèi)部連接到了 GND,當(dāng)SD插座上沒插入 SD卡時(shí),單 片機(jī)從這個(gè)管腳能讀到高電平(前提是使用單片機(jī)內(nèi)部上拉輸入

10、,或者外部增加一個(gè)上拉電阻),一旦插入SD卡,這個(gè)管腳就變成低電平,這個(gè)功能用來檢測(cè)是否RSV1和RSV2是保留功能管腳,不需要操作。MicroSD卡的連接和SD卡大同小異,只是 MicroSD卡比SD卡少 一個(gè)GND管腳,所以不能 使用上面做的這種插入卡的檢測(cè),實(shí)際上現(xiàn)在很多SD卡/MicroSD卡插座都有插入檢測(cè)管腳,當(dāng)然,一分錢一分貨,價(jià)格上當(dāng)然也要貴一些順便提一下,普通 SD卡插座最多5塊錢。插入SD卡。SPI命令格式Byte 1Byte2-5Byte 631CommandCommand ArgumentCRC 1以下是一個(gè)簡(jiǎn)單的測(cè)試SD卡讀 寫的程序,程序是基于 Atmega128單

11、片機(jī)編寫的,對(duì)于Atmega的其他單片機(jī)僅需要做管腳改動(dòng)就可以使用,其他單片機(jī)更改要更大。sd.h*SPI各線所占用的端口#define SD SSPB6#define SD SCKPB1#define SD MOSIPB2#define SD MISOPB3*#define SD DDRDDRB#define SD PORTP ORTB#define SD PINPINB#define SDSS LSD_P ORT &= (1v#define SD SCK HSD_P ORT |= (1<#define SD SCK LSD_P ORT &= (1v#defineSD

12、MOSI HSD_P ORT|=(1v#defineSD MOSI LSD_P ORT &= (1v#defineSD MISO IN(SD_PIN&(1</錯(cuò)誤號(hào)/#define INIT CMD0 ERROROxFF#define INIT CMD1 ERROR0xFE0xFD#define WRITE BLOCK ERROR#define READ BLOCK ERROR0xFC0x01#define TRUE / MMC/SD 命令(命令號(hào)從40開始,只列岀基本命令,并沒有都使用/#define SD RESET0x40 + 0#define SD INIT0x4

13、0 + 1#define SD READ CSD0x40 + 9#define SD READ CID0x40 + 10#define SD STOP TRANSMISSION0x40 + 12#define SD SEND STATUS0x40 + 13#define SD SET BLOCKLEN0x40 + 16#define SD READ BLOCK0x40 + 17#define SD READ MULTI BLOCK0x40 + 18#define SD WRITE BLOCK0x40 + 240x40 + 25#define SD WRITE MULTI BLOCK/ 片選關(guān)(

14、MMC/SD-Card In valid)#defi ne SD_Disable()SD SS H/ 片選開(MMC/SD-Card Active)#defi ne SD_E nableOSD SS LSD TEST.C /*/ /ICC-AVR app lication builder : 03-5-20 8:39:11 / Target : M128 / Crystal: 3.6864Mhz#in clude #in clude #i nclude 'sd.h' void uart0 _in it(void);void p utchar(u nsig ned char co

15、nten t);void p utstr(u nsig ned char *s);void SD_Port_ln it(void);un sig ned char SD_ln it(void);un sig ned char SD_write_sector(u nsig ned long addr,u nsig ned char *Buffer);un sig ned char SD_read_sector(u nsig ned long addr,u nsig ned char *Buffer);un sig ned char SP I_Tra nsferByte(u nsig ned ch

16、ar byte);un sig ned char Write_Comma nd_SD(u nsig ned char cmd,u nsig ned long address);un sig ned long SD_fi nd(void);/*/串口調(diào)試程序 /* void uart0_ in it(void)UCSR0B = 0x00; /disable while setti ng baud rateUCSR0A = 0x00;UCSR0C = 0x06; / 00000110 UART0設(shè)置為異步模式、無奇偶校驗(yàn)、1位停止位、8位數(shù)據(jù)位UBRR0L = 0x17; /set baud ra

17、te loUBRR0H = 0x00; /set baud rate hi設(shè)置UART0 口通信速率 9600UCSR0B = 0x18;void p utchar(u nsig ned char content)while(!(UCSR0A & (1 << UDRE0); /*判斷上次發(fā)送有沒有完成*/UDR0 = con te nt;/*發(fā)送數(shù)據(jù)*/void p utstr(u nsig ned char *s) while(*s) p utchar(*s);s+;/*/端口初始化 void SD_Port_ln it(void) /*SP I_Tra nsferByt

18、e(0xff); /延遲74個(gè)以上的時(shí)鐘SD PORT|= (1<<SD DDR|= (1<<<SD DDR&= (1</* /初始化 MMC/SD 卡為SPI模式un sig ned char SD_ln it(void) /* un sig ned char retry,te mp;un sig ned char i;SP CR=0x53;/設(shè)定SPI為128分頻,慢速進(jìn)行初始化SP SR=0x00;for (i=0;i<0x0f;i+)SD_E nableO;/開片選SP l_Tra nsferByte(SD_RESET);/發(fā)送復(fù)位命令

19、SP I_Tra nsferByte(OxOO);SP I_Tra nsferByte(0x00);SP I_Tra nsferByte(0x00);SP I_Tra nsferByte(0x00);SP I_Tra nsferByte(0x95);SP I_Tra nsferByte(0xff);SP I_Tra nsferByte(0xff);retry=0;dotemp="Write"_Comma nd_SD(SD_INIT,0);/發(fā)送初始化命令retry+;if(retry=100)重試100次SD_Disable();/關(guān)片選return(INIT_CMD1_E

20、RROR);如果重試100次失敗返回錯(cuò)誤號(hào)while(te mp !=0);MSD_Disable();/關(guān)片選SP CR=0x50;/設(shè)置SPI為2分頻。進(jìn)行高速讀寫返回成功SP SR=0x01;return(TRUE);/* /發(fā)送命令給 MMC/SD 卡/Return:返回MMC/SD卡對(duì)命令響應(yīng)的第 2字節(jié),作為命令成功判斷 un sig ned char Write_Comma nd_SD(u nsig ned char cmd,u nsig ned long address) /* un sig ned char tmp;un sig ned char retry="0&

21、quot;SD_Disable();SP I_Tra nsferByte(OxFF);SD_E nableO;SP I_Tra nsferByte(cmd);將32位地址進(jìn)行移位作為地址字SP I_Tra nsferByte(address>>24);SP I_Tra nsferByte(address>>16);SP I_Tra nsferByte(address>>8);SP I_Tra nsferByte(address);SP I_Tra nsferByte(0xFF);SP I_Tra nsferByte(0xFF);dotmp = SP I_Tr

22、a nsferByte(0xFF);/發(fā)送8個(gè)時(shí)鐘接受最后一個(gè)字retry+;while(tm p=0xff)&&( retry<8);return(t mp);/* / 寫一個(gè)扇區(qū)(512Byte) to MMC/SD-Card如果寫完成返回 TRUE un sig ned char SD_write_sector(u nsig ned long addr,u nsig ned char *Buffer) /*un sig ned char temp;un sig ned int i;SP l_Tra nsferByte(OxFF);/延遲8個(gè)時(shí)鐘SD_E nableO

23、;/開片選temp = Write_Comma nd_MMC(MMC_WRITE_BLOCK,addrvv9);/發(fā)送寫扇區(qū)命令if(te mp != 0x00)SD_Disable();return(tem p);SP I_Tra nsferByte(0xFF);SP I_Tra nsferByte(0xFF);SP I_Tra nsferByte(0xFE);for (i=0;i<512;i+)SPI_TransferByte(*Buffe葉+); /發(fā)送 512 字節(jié)數(shù)據(jù)/CRC-ByteSP I_Tra nsferByte(0xFF); /Dummy CRCSP I_Tra ns

24、ferByte(0xFF); /CRC Codetemp = SP I_Tra nsferByte(0xFF);/讀SD卡運(yùn)行響應(yīng)if(te mp & 0x1F)!=0x05)如果最后4位為0101,為操作成功。否則為操作失敗。SD_Disable();return(WRITE_BLOCK_ERROR); / 返回錯(cuò)誤while (SP I_Tra nsferByte(0xFF) != 0xFF);SD_DisableO;return(TRUE);返回成功/*/ 讀 512 字節(jié) from MMC/SD-Card如果成功返回TRUEun sig ned char SD_read_sec

25、tor(u nsig ned long addr,u nsig ned char *Buffer)/*un sig ned char temp;un sig ned int i;un sig ned char data;SP I_Tra nsferByte(Oxff);MMC_E nableO;temp = Write_Comma nd_SD(SD_READ_BLOCK,addrvv9);/發(fā)送讀扇區(qū)命令if(te mp != 0x00)SD_Disable();return(READ_BLOCK_ERROR);/返回錯(cuò)誤號(hào)while(S PI_Tra nsferByte(0xff) != 0

26、xfe);for(i=0;i<512;i+)data = SP I_Tra nsferByte(0xff);/存數(shù)據(jù)*Buffer+=data;SP l_Tra nsferByte(Oxff);/讀CRC碼SP I_Tra nsferByte(Oxff);/讀CRC碼SD_Disable();return(TRUE);/返回成功/*/查找數(shù)據(jù)開始標(biāo)志(預(yù)設(shè) DATASTART )根據(jù)實(shí)際需要?jiǎng)h改/*un sig ned long SD_fi nd(void)un sig ned long tmp="400"un sig ned char data512;doSD_re

27、ad_sector(t mp ,data);從0扇區(qū)開始查找tmp+;/查找 DATASTARTwhile(!(data0=D)&&( data1='A')&&( data2='T')&&(data3='A')&&(data4=S)&&(data5='T')&&(data 6='A')&&(data7='R')&&(data8='T');return tmp

28、;/返回開始標(biāo)志的下一個(gè)扇區(qū)/*/發(fā)送一個(gè)字節(jié) /* un sig ned char SP I_Tra nsferByte(u nsig ned char byte)/檢測(cè)線路是否空閑SPDR = byte;while (!(S PSR & 0x80);return SP DR;/*/主程序例子 /* void main (void) un sig ned long temp;un sig ned char data512;un sig ned char data2512='sssssssssssssssssssssssss'un sig ned char comm1=

29、'rnhello worldrn'un sig ned char comm2='rnSD_INIT OKrn'uart0_i ni t();SD_Port_Ini t();/端口初始化if(SD_ In itO= 0x01)/SD卡初始化,并讀取返回值p utstr(comm2);temp="SD"_fi nd();/查找DATASTART 數(shù)據(jù)開始標(biāo)志,返回下一扇區(qū)地址SD_read_sector(1001,data);/讀取temp地址的512字節(jié)數(shù)據(jù),512字節(jié)數(shù)據(jù)存入data數(shù)組P utstr(data);SD_write_sector(te mp ,data2);/將data2數(shù)組512字節(jié)數(shù)據(jù)寫入temp扇區(qū)測(cè)試程序很簡(jiǎn)單,僅僅是做了一下讀寫SD卡的測(cè)試。關(guān)于SD卡的幾點(diǎn)注意事項(xiàng)。1、無論我們?cè)敢獠辉敢?,SD卡每次讀寫數(shù)據(jù)的最小單位是1個(gè)扇區(qū),即512個(gè)字節(jié)。2、SD卡與單片機(jī)連接的 SPI總線不能太長(zhǎng),要盡量短。

溫馨提示

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