欢迎来到天天文库
浏览记录
ID:52677872
大小:191.00 KB
页数:8页
时间:2020-03-29
《单片机读写SD卡教程.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、点这郑重声明:本实验并不是对所有SD卡都能成功运行第一步:打开winhex软件,用读卡器读SD卡,在winhex中查看SD卡点击查找(ctrl+F)输入FAT(找到DBR处)发现DBR起始于0x11200扇区地址,它必是512整数倍,因为一个扇区含512BYTE,所以在程序中读一个扇区时一定要是512整数倍,否则会出错。11200地址对应的值是0xEB,本程序读一下这个地址的值看看是否正确。注意有的winhex编址是十进制看看程序吧#include#defineucharunsignedcha
2、r#defineuintunsignedint//=============================================================//定义SD卡需要的4根信号线sbitSD_CLK=P1^1;sbitSD_DI=P1^2;sbitSD_DO=P1^0;sbitSD_CS=P1^3;sbitBeep=P2^0;//用来调程序标志//===========================================================//==========
3、=================================================//定义512字节缓冲区,,89C52直接定义成unsignedcharDATA[80];,太大了RAM不够unsignedcharxdataDATA[512];voiddelay(unsignedintz){unsignedintx,y;for(x=z;x>0;x--);for(y=110;y>0;y--);}//==================================================
4、=========//写一字节到SD卡,模拟SPI总线方式voidSdWrite(unsignedcharn){unsignedchari;for(i=8;i;i--){SD_CLK=0;SD_DI=(n&0x80);n<<=1;SD_CLK=1;}SD_DI=1;}//===========================================================//从SD卡读一字节,模拟SPI总线方式unsignedcharSdRead(){unsignedcharn,i;for(i=
5、8;i;i--){SD_CLK=1;SD_CLK=0;n<<=1;if(SD_DO)n
6、=1;}returnn;}//============================================================//检测SD卡的响应unsignedcharSdResponse(){uchari=0,response=0;while(i<=8){response=SdRead();if(response==0x00)break;if(response==0x01)break;i++;}r
7、eturnresponse;}//================================================================//发命令到SD卡voidSdCommand(unsignedcharcommand,unsignedlongargument,unsignedcharCRC){SdWrite(command
8、0x40);/*SdWrite(((unsignedchar*)&argument)[0]);SdWrite(((unsignedchar*)&argument
9、)[1]);SdWrite(((unsignedchar*)&argument)[2]);SdWrite(((unsignedchar*)&argument)[3]);*/SdWrite(argument>>24);SdWrite(argument>>16);SdWrite(argument>>8);SdWrite(argument);SdWrite(CRC);}//================================================================//初始化SD卡u
10、nsignedcharSdInit(void){unsignedchari;unsignedcharresponse=0xFF;P3=0xff;SD_CS=1;for(i=0;i<=0xfe;i++)SdWrite(0xff);SD_CS=0;SdCommand(0x00,0,0x95);SD_DI=1;response=SdResponse();if(response!=0x01){
此文档下载收益归作者所有