初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2016-3-28
- 在线时间
- 9 小时
|
10金钱
我用的原子哥的SD卡驱动SD_WriteDisk(DMA1_Channel2_TX_BUF_HIS,0x100+SD_Index*4,4) == 0)
函数:
uint8_t SD_WriteDisk(uint8_t*buf,uint32_t sector,uint8_t cnt)
{
uint8_t r1;
if(SD_Type!=SD_TYPE_V2HC)sector *= 512;
if(cnt==1)
{
r1=SD_SendCmd(CMD24,sector,0X01);
if(r1==0)//Ö¸áî·¢Ëí3é1|
{
r1=SD_SendBlock(buf,0xFE);
}
}else
{
if(SD_Type!=SD_TYPE_MMC)
{
SD_SendCmd(CMD55,0,0X01);
SD_SendCmd(CMD23,cnt,0X01);//·¢ËíÖ¸áî
}
r1=SD_SendCmd(CMD25,sector,0X01);//á¬Dø¶áÃüáî
if(r1==0)
{
do
{
r1=SD_SendBlock(buf,0xFC);//½óêÕ512¸ö×Ö½ú
buf+=512;
}while(--cnt && r1==0);
r1=SD_SendBlock(0,0xFD);//½óêÕ512¸ö×Ö½ú
}
}
SD_DisSelect();//è¡ÏûƬѡ
return r1;//
}
uint8_t SD_SendBlock(uint8_t*buf,uint8_t cmd)
{
uint16_t t;
if(SD_WaitReady())return 1;
SD_SPI_ReadWriteByte(cmd);
if(cmd!=0XFD)
{
for(t=0;t<512;t++)SD_SPI_ReadWriteByte(buf[t]);
SD_SPI_ReadWriteByte(0xFF);
SD_SPI_ReadWriteByte(0xFF);
t=SD_SPI_ReadWriteByte(0xFF);
if((t&0x1F)!=0x05)return 2;
}
return 0;//
}
问题:
我写入4个扇区,只有第一个扇区写入成功,之后扇区不能写入,但SD_WriteDisk返回值为正常,后DUBUG发现SD_WriteDisk调用的SD_SendBlock返回值为2(看注释的意思是 未响应),所以导致每次都写入一个扇区。但我把if((t&0x1F)!=0x05)return 2;注释后
所有的扇区都能写入,所以问下坛友 ,这个返回值重要吗?
|
|