我用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。求解
...全文
50 点赞 收藏 回复
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复

还没有回复,快来抢沙发~

发帖
单片机/工控
创建于2007-09-28

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2014-04-05 12:49
社区公告
暂无公告