資源描述:
《單片機(jī)讀寫sd卡教程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、.點(diǎn)這鄭重聲明:本實(shí)驗(yàn)并不是對(duì)所有SD卡都能成功運(yùn)行第一步:打開(kāi)winhex軟件,用讀卡器讀SD卡,在winhex中查看SD卡...點(diǎn)擊查找(ctrl+F)輸入FAT(找到DBR處)...發(fā)現(xiàn)DBR起始于0x11200扇區(qū)地址,它必是512整數(shù)倍,因?yàn)橐粋€(gè)扇區(qū)含512BYTE,所以在程序中讀一個(gè)扇區(qū)時(shí)一定要是512整數(shù)倍,否則會(huì)出錯(cuò)。11200地址對(duì)應(yīng)的值是0xEB,本程序讀一下這個(gè)地址的值看看是否正確。注意有的winhex編址是十進(jìn)制看看程序吧#include#defineucharunsignedchar#define
2、uintunsignedint//=============================================================//定義SD卡需要的4根信號(hào)線sbitSD_CLK=P1^1;sbitSD_DI=P1^2;sbitSD_DO=P1^0;sbitSD_CS=P1^3;sbitBeep=P2^0;//用來(lái)調(diào)程序標(biāo)志//===========================================================//=================================
3、==========================//定義512字節(jié)緩沖區(qū),,89C52直接定義成unsignedcharDATA[80];,太大了RAM不夠unsignedcharxdataDATA[512];voiddelay(unsignedintz){unsignedintx,y;for(x=z;x>0;x--);for(y=110;y>0;y--);}...//===========================================================//寫一字節(jié)到SD卡,模擬SPI總線方式voidSd
4、Write(unsignedcharn){unsignedchari;for(i=8;i;i--){SD_CLK=0;SD_DI=(n&0x80);n<<=1;SD_CLK=1;}SD_DI=1;}//===========================================================//從SD卡讀一字節(jié),模擬SPI總線方式unsignedcharSdRead(){unsignedcharn,i;for(i=8;i;i--){SD_CLK=1;SD_CLK=0;n<<=1;if(SD_DO)n
5、=1;}re
6、turnn;}//============================================================//檢測(cè)SD卡的響應(yīng)unsignedcharSdResponse(){uchari=0,response=0;while(i<=8){response=SdRead();if(response==0x00)break;if(response==0x01)break;i++;}...returnresponse;}//=============================================
7、===================//發(fā)命令到SD卡voidSdCommand(unsignedcharcommand,unsignedlongargument,unsignedcharCRC){SdWrite(command
8、0x40);/*SdWrite(((unsignedchar*)&argument)[0]);SdWrite(((unsignedchar*)&argument)[1]);SdWrite(((unsignedchar*)&argument)[2]);SdWrite(((unsignedchar*)&argumen
9、t)[3]);*/SdWrite(argument>>24);SdWrite(argument>>16);SdWrite(argument>>8);SdWrite(argument);SdWrite(CRC);}//================================================================//初始化SD卡unsignedcharSdInit(void){unsignedchari;unsignedcharresponse=0xFF;P3=0xff;SD_CS=1;for(i=0;i<=0
10、xfe;i++)SdWrite(0xff);SD_CS=0;SdCommand(0x00,0,0x95);SD_DI=1;response=SdResponse();if(res