-
你好师兄,我用WINHEX软件打开了,但是5960块的内容不是我写进去的1 2 3 4 。。。。。和读出来的数据也不一样,这是怎么回事?下面是我用winhex的截图,你帮我看看吧,谢谢 !
-
谢谢你!
-
我把程序又调整了一下,初始化没问题,写语句的返回指令0x05也没错,但是运行一段时间程序后发现SD卡仍然是空的,只是怎么回事?是不是块地址有问题啊?因为我对块地址一直不是很清楚,我给您举个例子,您看我的理解对不对。
例如:我想在15个块写数据
long laddr=15
laddr24);
b=((addr&0x00ff0000)>>16);
c=((addr&0x0000ff00)>>8);
d=((addr&0x000000ff)>>0);
这样abcd是物理地址对不?
-
我试了,结果总是在SD卡初始化时总是出现死循环,初始化的程序段是下面这个,我觉得时序上没有问题啊,麻烦你帮我分析下,谢谢哥们!
void Init_SD_Card(void)
{
unsigned char i;
ESPI0 = 0; //关闭发送中断
/*SPI0DAT = 0xff;
while(TXBMT != 1);
SPI0DAT = 0xff;
while(TXBMT != 1);*/
CS = 0; //开片选
Delay();
SPI0DAT = 0x41; //CMD1
while(TXBMT != 1);
Delay();
SPI0DAT = 0x00; //输出8*4个clocks
while(TXBMT != 1);
SPI0DAT = 0x00;
while(TXBMT != 1);
SPI0DAT = 0x00;
while(TXBMT != 1);
SPI0DAT = 0x00;
while(TXBMT != 1);
Delay();
SPI0DAT = 0xff; //crc
while(TXBMT != 1);
Delay();
SPI0DAT = 0xff; //8× multiples of 8 clocks Ncr
while(TXBMT != 1);
SPI0DAT = 0xff;
while(TXBMT != 1);
Delay();
Init_comdata = SPI0DAT;
Delay();
i = SPI0DAT; //读接受数据缓冲区,清空接收数据缓冲区,这样让sd卡响应数据可以顺利接收
SPI0DAT = 0xff; //输出dummy时钟周期,让sd卡响应字节进入接受缓冲区
while(TXBMT != 1);
CS = 1; //关片选
Init_comdata = SPI0DAT;
SPI0DAT = 0xff;
while(TXBMT != 1);
SPIF = 0; //清中断标志位
ESPI0 = 1; //开发送中断
}