打印
[信息]

SPI驱动SD卡,SD卡无法复位

[复制链接]
1242|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wnsd|  楼主 | 2015-2-8 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void delay1(void)
{
uint32_t j;
for(j=0;j<14000;j++)
{}
}

/*************************************************************/
/*                      SPI读写一个字节                      */
/*************************************************************/
uint8_t SPI_Byte(uint8_t value)  // : SPI读写一个字节(发送完成后返回本次通讯读取的数据)
{
uint8_t input;
DSPI_0.PUSHR.R = 0x08000000|value;    //赋值需要发送的数据  
while(DSPI_0.SR.B.TCF==0)            //等待发送完成
{}
DSPI_0.SR.B.TCF=1;    //清除发送完成标志位
    //Parameter_sent(DSPI_0.SR.B.RFDF);
   while(DSPI_0.SR.B.RFDF==0)           //等待接收到数据
{}
  input=(uint8_t)(DSPI_0.POPR.R);     //读取接收到的数据
DSPI_0.SR.B.RFDF=1;                  //清除接收标志位

return(input);      //返回接收到的数据
}

/*************************************************************/
/*                       向SD卡写入命令                      */
/*************************************************************/
uint8_t SD_send_command(uint8_t cmd, uint32_t arg)
{
uint8_t a



;
uint8_t retry=0,i=0;

SPI_Byte(0xff);
SD_select();

SPI_Byte(cmd | 0x40);//分别写入命令
SPI_Byte(arg>>24);
SPI_Byte(arg>>16);
SPI_Byte(arg>>8);
SPI_Byte(arg);
SPI_Byte(0x95);
a = SPI_Byte(0xff);
while(a == 0xff)
{   a = SPI_Byte(0xff);
     delay1();
     if(retry++ > 100) break;//超时退出

}//等待响应,

SD_deselect();
SPI_Byte(0xff);

return a;//返回状态值
}

/*************************************************************/
/*                         初始化SD卡                        */
/*************************************************************/
uint8_t SD_Reset(void)
{
uint8_t i;
uint8_t retry;
uint8_t a=0;
retry = 0;
do
{
  for(i=0;i<10;i++) SPI_Byte(0xff);  
  a = SD_send_command(0,0);  //发空闲命令
  
  flag[retry]=a;
  retry++;
  delay1();
  if(retry>=250) return 1;      //超时退出
} while(a != 0x01);     
return 0;//正常返回
}


/************************************************************/
/*                          主函数                          */
/************************************************************/
int main(void)
{
SWT_DisableWatchDog();
SYSTEM_Init();
initUART1();
SIU_init();
SD_Init();               //spi初始化
delay1();  //上电延时

while(SD_Reset()!=0)
{
  
}


}



我无法复位,各位,求大家帮助我

沙发
搞IT的| | 2015-2-8 19:48 | 只看该作者
什么情况,看的不是很清楚。。

使用特权

评论回复
板凳
wnsd|  楼主 | 2015-2-8 23:59 | 只看该作者
别沉啊

使用特权

评论回复
地板
wnsd|  楼主 | 2015-2-9 10:44 | 只看该作者
搞IT的 发表于 2015-2-8 19:48
什么情况,看的不是很清楚。。

我的程序就是这个

使用特权

评论回复
5
搞IT的| | 2015-2-14 19:03 | 只看该作者
wnsd 发表于 2015-2-9 10:44
我的程序就是这个

好吧:Q

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

粉丝