我用51模拟spi驱动sd卡可以reset但是init总是失败

我是勤劳的小码农 2014-04-05 12:49:39
我的内存卡是2g的,hc,sc我就不清楚了。我的reset函数正常,但是init函数读到的都是0xff。
函数如下:
bit SD_Reset()
{
char dataa[6]={0x40,0x00,0x00,0x00,0x00,0x95};
unsigned char dir,returndata=0;

CS=1;
for(dir=0;dir<120;dir++)
SPI_Rw(0xff);
CS=0;
SPI_Rw(dataa[0]);
SPI_Rw(dataa[1]);
SPI_Rw(dataa[2]);
SPI_Rw(dataa[3]);
SPI_Rw(dataa[4]);
SPI_Rw(dataa[5]);
do
{
returndata=SPI_Rw(0xff);
dir++;
}
while((returndata!=01)&&(dir<240));
CS=1;
SPI_Rw(0xff);
if(returndata==0x01)
return (1);
else
return (0);
}
bit SD_Init()
{
char dataa[6]={0x41,0x00,0x00,0x00,0x00,0xff};
unsigned char dir=0,returndata=0;

CS=0;
SPI_Rw(dataa[0]);
SPI_Rw(dataa[1]);
SPI_Rw(dataa[2]);
SPI_Rw(dataa[3]);
SPI_Rw(dataa[4]);
SPI_Rw(dataa[5]);
do
{
returndata=SPI_Rw(0xff);
dir++;
}
while(((returndata!=0x00)&&(dir<240)));
SBUF=returndata;
while(1);
CS=1;
SPI_Rw(0xff);
if(returndata==0x00)
return (1);
else
return (0);
}

我在主程序里的调用是
SBUF=SD_Reset();
flag=1;//spi减速标志,减速后spi有任何改变都延时200us
SBUF=SD_Init();

SBUF收到的都是0xff。求解
...全文
79 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧