本帖最后由 colinluan 于 2009-9-20 19:51 编辑
void SD_Write_Block(DWORD addr)
{
INT8U temp;
int i,retry=0;
// SD_CS=0;
//
do
{
temp=SD_Write_Command(0x18,addr<<9); //写命令
}while(temp!=0);
SPISendByte(0xff); //穿插时序
SPISendByte(0xff);
SPISendByte(0xff);
SPISendByte(0xfe); //开始
for(i=0;i<512;i++)
SPISendByte(0x4e); //写一个扇区r的0x4e
SPISendByte(0xff); //crc
SPISendByte(0xff);
temp=SPIReceiveByte(); //响应,这个地方会出问题,每次收到的都是0
if((temp&0x1f)!=0x05)
{
SD_CS=1;
SPISendByte(0xff);
return;
}
while(SPIReceiveByte()!=0xff);
//while(SPISendByte(0xff)!=0xff);
SPISendByte(0xff);
SD_CS=1;
}
今天调试SD卡的写操作,现在数据已经可以正常写进去的,但是郁闷的是读取响应的时候总读0,按理说应该是0x05才是,不知道什么原因,参考了很多程序,也看了资料,就是找不到错在哪里,还请各位大虾帮忙看看。
CPU用的是LPC2148,SPI初始化时工作频率大概为180K,正常工作时1.5M,读可以正常读,数据也能写进去,就是收到的写响应是错的。 |