关于TQ2440系统自带的SD卡读写问题
本帖最后由 tkking 于 2013-7-31 10:49 编辑我现在是在裸奔中,对SD卡的读操作能正确验证,但是写却不行,不知道有没有同志有过相同的经验。
运行自带的程序也不能写。。。
CMD8:rSDICSTA=0xc00, rSDIRSP0=0x0
SD_V1X_CARD //SD卡类型
SD is ready
CID
MID = 1
OLD = 20545
生产厂家:S128BA:h?
生产日期:203,10
SD Card RCA = 0xabf5
SD Frequency is 25000000Hz
Read Card CSD OK!
0x005d0132
0x135983d3
0xf6da4fff
0x1640009b
卡容量为:669890048KB,654189MB //SD卡容量为128M的 怎么读出来不对??
Card sel desel OK!
Card Status is 0x900
Bus Width is 4bit
卡初始化完毕!
我们的资料发布区有相应的脚本去读写SD卡,你去找找 现在能写了,直接用U8 Write_One_Block(U32 Addr,U32* TxBuffer)可以写128个字;
但是U8 Write_Mult_Block(U32 Addr,U32 DatSize,U32* TxBuffer)函数 DatSize=256的时候却只能写128个字,512的时候写256个字。不知道为什么。
希望有知道的告诉下。
数组定义正确。可排除。
U16 i = 0;
U32 status = 0;
rSDIDTIMER=0x7fffff; // Set timeout count
rSDIBSIZE=0x200; // 512byte(128word) rSDIFSTA = rSDIFSTA|(1<<16); // FIFO reset
rSDIDCON = (1<<SDCard_BlockSize)|(3<<12)|(1<<14)|(1<<16)|(1<<17)|(1<<20)|(2<<23);
while((rSDIDCON&0x4000)!=0x4000)
{
rSDIDCON = rSDIDCON| 0x4000;
}
if(CMD25(Addr)!=1)//发送写多块操作指令
return 0;
else
Uart_Printf("CMD25 IS OK!\n");
while(i<DatSize)
{//开始传递数据到缓冲区
status = rSDIFSTA;
if((status&0x2000)==0x2000)
{//如果发送 FIFO 可用,即 FIFO 未满
rSDIDAT = *TxBuffer;
TxBuffer++;
i++;
}
}
rSDIDCON = rSDIDCON&~(7<<12);
while(CMD12()!=1);//发送结束指令
do
{//等待数据发送结束
status = rSDIDSTA;
}while((status&0x2)==0x2);
rSDIDSTA = status;
Uart_Printf("status %x\n",status);
if((status&0x89)!=0x00)
{
Uart_Printf("send fail!\n");
return 0;
}
else
{
Uart_Printf("send ok!\n");
return 1;
}
}
难道是红色的问题? wbz073 发表于 2013-7-31 11:26 static/image/common/back.gif
我们的资料发布区有相应的脚本去读写SD卡,你去找找
希望管理员帮我把贴子移到无OS版去。
谢谢。 太坑爹了!上午调试单块写的时候不行,吃了饭后就可以了。
下午调试多块写的不的行,晚饭吃了后就可以了!
什么都没改动!
坑爹啊!
页:
[1]