SD卡的初始化和读写程序(5)

2018-12-23 23:25

//--------下面是N个sector写入的循环部分 do {

//放起始令牌0xFC 表明是多块写入 SPIx_ReadWriteByte(0xFC); //放一个sector的数据 for(i=0;i<512;i++)

{

SPIx_ReadWriteByte(*data++); }

//发2个Byte的dummy CRC SPIx_ReadWriteByte(0xff); SPIx_ReadWriteByte(0xff); //等待SD卡应答

r1 = SPIx_ReadWriteByte(0xff); if((r1&0x1F)!=0x05)

{

sd_cs_1; //如果应答为报错,则带错误代码直接退出 return r1;

}

//等待SD卡写入完成

if(SD_WaitDataReady()==1) {

sd_cs_1; //等待SD卡写入完成超时,直接退出报错 return 1;

}

}while(--count);//本sector数据传输完成 //发结束传输令牌0xFD

r1 = SPIx_ReadWriteByte(0xFD); if(r1==0x00) {

count = 0xfe;

}

if(SD_WaitDataReady()) //等待准备好 {

sd_cs_1; return 1;

}

//写入完成,片选置1 sd_cs_1;

SPIx_ReadWriteByte(0xff);

return count; //返回count值,如果写完则count=0,否则count=1 }

//----------------------------------------------------------------------------- //在指定扇区,从offset开始读出bytes个字节

//输入:u32 sector 扇区地址(sector值,非物理地址) // u8 *buf 数据存储地址(大小<=512byte) // u16 offset 在扇区里面的偏移量 // u16 bytes 要读出的字节数 //返回值:0: 成功 // other:失败

u8 SD_Read_Bytes(unsigned long address,unsigned char *buf,unsigned int offset,unsigned int bytes) {

u8 r1;u16 i=0;

r1=SD_SendCommand(CMD17,address<<9,0);//发送读扇区命令 if(r1)return r1; //应答不正确,直接返回

sd_cs_0;//选中SD卡

if(SD_GetResponse(0xFE))//等待SD卡发回数据起始令牌0xFE {

sd_cs_1; //关闭SD卡 return 1;//读取失败

}

for(i=0;i

for(;i


SD卡的初始化和读写程序(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:文言文解析:《狼》

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: