如题:
MMC卡
在做SD卡擦除全片时,源程序是
void SD_Format()
{
u8 r1;
u32 sector;
if(SD_Type!=SD_TYPE_V2HC)[/mw_shl_code]
//其中sd_size=sd_size=SD_GetSectorCount();//得到扇区数----原子哥的程序[/mw_shl_code]
sector = sd_size * 512;//转换为字节地址
if(SD_Type == SD_TYPE_MMC)
{
r1=SD_SendCmd(CMD35,0,0X01);//设置擦除首地址
r1=SD_SendCmd(CMD36,sector,0X01);//设置擦除最后地址
}
else
{
r1=SD_SendCmd(CMD32,0,0X01);//
r1=SD_SendCmd(CMD33,sector,0X01);//
}
r1=SD_SendCmd(CMD38,0,0x01);// 开始擦除
if(r1 == 0)
{
;
}
} [/mw_shl_code]
发现写CMD36命令是r1返回值是0x42=参数错误+擦除错误。虽想是不是sector错误了。
于是程序改写如下
void SD_Format()
{
u8 r1;
u32 sector;
if(SD_Type!=SD_TYPE_V2HC)
sector = sd_size * 512;//转换为字节地址
if(SD_Type == SD_TYPE_MMC)
{
do
{
r1=SD_SendCmd(CMD35,0,0X01);//设置擦除首地址
r1=SD_SendCmd(CMD36,sector,0X01);//设置擦除最后地址
}while(r1!=0 && sector--);
while(1);
}
else
{
r1=SD_SendCmd(CMD32,0,0X01);//
r1=SD_SendCmd(CMD33,sector,0X01);//
}
r1=SD_SendCmd(CMD38,0,0x01);// 开始擦除
if(r1 == 0)
{
;
}
} [/mw_shl_code]
断点调试发现:sector / sd_size = 511.9994897959183673469387755102。
所以总扇区数不是标准的*512。[/mw_shl_code]
[/mw_shl_code]
有没有人发现这一问题呢[/mw_shl_code]
|