77范文网 - 专业文章范例文档资料分享平台

SD卡基础原理及读写程序(3)

来源:网络收集 时间:2019-06-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

SD_Disable(); //关片选

return(INIT_CMD1_ERROR); //如果重试100次失败返回错误号 }

}while(temp!=0);

MSD_Disable(); //关片选

SPCR=0x50; //设置SPI为2分频。进行高速读写 SPSR=0x01;

return(TRUE); //返回成功 }

//****************************************************************************

// 发送命令给 MMC/SD卡

//Return: 返回MMC/SD卡对命令响应的第2字节,作为命令成功判断

unsigned char Write_Command_SD(unsigned char cmd,unsigned long address) //**************************************************************************** {

unsigned char tmp; unsigned char retry=\SD_Disable();

SPI_TransferByte(0xFF); SD_Enable();

SPI_TransferByte(cmd); //将32位地址进行移位作为地址字节 SPI_TransferByte(address>>24); SPI_TransferByte(address>>16); SPI_TransferByte(address>>8); SPI_TransferByte(address); SPI_TransferByte(0xFF); SPI_TransferByte(0xFF);

do{

tmp = SPI_TransferByte(0xFF); //发送8个时钟接受最后一个字节 retry++;

}while((tmp==0xff)&&(retry<8)); return(tmp); }

//****************************************************************************

// 写一个扇区(512Byte) to MMC/SD-Card //如果写完成返回TRUE

unsigned char SD_write_sector(unsigned long addr,unsigned char *Buffer) //**************************************************************************** {

unsigned char temp; unsigned int i;

SPI_TransferByte(0xFF); //延迟8个时钟 SD_Enable(); //开片选

temp = Write_Command_MMC(MMC_WRITE_BLOCK,addr<<9); //发送写扇区命令

if(temp != 0x00) {

SD_Disable(); return(temp); }

SPI_TransferByte(0xFF); SPI_TransferByte(0xFF); SPI_TransferByte(0xFE); for (i=0;i<512;i++) {

SPI_TransferByte(*Buffer++); //发送512字节数据 }

//CRC-Byte

SPI_TransferByte(0xFF); //Dummy CRC SPI_TransferByte(0xFF); //CRC Code

temp = SPI_TransferByte(0xFF); //读SD卡运行响应

if((temp & 0x1F)!=0x05) //如果最后4位为0101,为操作成功。否则为操作失败。 {

SD_Disable();

return(WRITE_BLOCK_ERROR); //返回错误 }

while (SPI_TransferByte(0xFF) != 0xFF); SD_Disable();

return(TRUE); //返回成功 }

//****************************************************************************

// 读512字节 from MMC/SD-Card //如果成功返回TRUE

unsigned char SD_read_sector(unsigned long addr,unsigned char *Buffer) //**************************************************************************** {

unsigned char temp; unsigned int i; unsigned char data; SPI_TransferByte(0xff); MMC_Enable();

temp = Write_Command_SD(SD_READ_BLOCK,addr<<9);//发送读扇区命令 if(temp != 0x00) {

SD_Disable();

return(READ_BLOCK_ERROR); //返回错误号 }

while(SPI_TransferByte(0xff) != 0xfe); for(i=0;i<512;i++) {

data = SPI_TransferByte(0xff); //存数据 *Buffer++=data; }

SPI_TransferByte(0xff); //读CRC码 SPI_TransferByte(0xff); //读CRC码 SD_Disable();

return(TRUE); //返回成功 }

//**************************************************************************

// 查找数据开始标志(预设DATASTART)根据实际需要删改

//**************************************************************************

unsigned long SD_find(void) {

unsigned long tmp=%unsigned char data[512]; do {

SD_read_sector(tmp,data); //从0扇区开始查找

tmp++; //查找DATASTART

}while(!((data[0]=='D')&&(data[1]=='A')&&(data[2]=='T')&&(data[3]=='A')&&(data[4]=='S')&&(data[5]=='T')&&(data[6]=='A')&&(data[7]=='R')&&(data[8]=='T'))); return tmp; //返回开始标志的下一个扇区 }

//************************************************************************** // 发送一个字节

//**************************************************************************

unsigned char SPI_TransferByte(unsigned char byte) {

SPDR = byte;

while (!(SPSR & 0x80)); //检测线路是否空闲 return SPDR; }

//************************************************************************** // 主程序例子

//************************************************************************** void main(void) {

unsigned long temp; unsigned char data[512];

unsigned char data2[512]={'sssssssssssssssssssssssss'}; unsigned char comm1[]={'/r/nhello world/r/n'}; unsigned char comm2[]={'/r/nSD_INIT OK/r/n'}; uart0_init();

SD_Port_Init(); //端口初始化 if(SD_Init()== 0x01)

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库SD卡基础原理及读写程序(3)在线全文阅读。

SD卡基础原理及读写程序(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/651592.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: