现在能写了,直接用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;
}
}
难道是红色的问题? |