STM32
直播中

吕昊

7年用户 235经验值
私信 关注
[问答]

请问程序SD读写时CNT是不是应该加个判断?

程序如下,定义了u8 cnt,cnt:扇区数,如果cnt=0时,会不会出问题。我感觉最好加个错误代码,因为他不可能是0.
//读SD卡
//buf:数据缓存区
//sector:扇区
//cnt:扇区数
//返回值:0,ok;其他,失败.
u8 SD_ReadDisk(u8*buf,u32 sector,u8 cnt)
{
u8 r1;
if(SD_Type!=SD_TYPE_V2HC)sector <<= 9;//转换为字节地址
if(cnt==1)
{
  r1=SD_SendCmd(CMD17,sector,0X01);//读命令
  if(r1==0)//指令发送成功
  {
   r1=SD_RecvData(buf,512);//接收512个字节   
  }
}else
{
  r1=SD_SendCmd(CMD18,sector,0X01);//连续读命令
  do
  {
   r1=SD_RecvData(buf,512);//接收512个字节  
   buf+=512;  
  }while(--cnt && r1==0);  
  SD_SendCmd(CMD12,0,0X01); //发送停止命令
}   
SD_DisSelect();//取消片选
return r1;//
}
//写SD卡
//buf:数据缓存区
//sector:起始扇区
//cnt:扇区数
//返回值:0,ok;其他,失败.
u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt)
{
u8 r1;
if(SD_Type!=SD_TYPE_V2HC)sector *= 512;//转换为字节地址
if(cnt==1)
{
  r1=SD_SendCmd(CMD24,sector,0X01);//读命令
  if(r1==0)//指令发送成功
  {
   r1=SD_SendBlock(buf,0xFE);//写512个字节   
  }
}else
{
  if(SD_Type!=SD_TYPE_MMC)
  {
   SD_SendCmd(CMD55,0,0X01);
   SD_SendCmd(CMD23,cnt,0X01);//发送指令
  }
   r1=SD_SendCmd(CMD25,sector,0X01);//连续读命令
  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;//
}   

回帖(3)

蔡维林

2019-8-15 06:58:12
你可以增加一个判断.
或者由外部保证输入参数合法.
举报

李岩

2019-8-15 07:15:06
原子哥,我刚才测试下,用您的代码4G卡没问题,可是256M的有问题,请问您的代码能支持256M的吗?谢谢
举报

李峰

2019-8-15 07:23:28
提示什么错误?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分