求高手提供一个SD卡写入和读出变长字符串的函数
SD_MMC.c中测试SD卡模块有一块和多块读出的函数使用,但是写入呢?求指教 有人会吗?自己顶 /**********************************************************************************
功能:该函数用于向SD卡的一个数据块写入数据
参数:
U32Addr被写块的起始地址
U32* TxBuffer 用于发送数据的缓冲区
返回值:
0 数据写入操作失败
1 数据写入操作成功
举例:
在主调函数中定义一个数组作为发送缓冲区,如U32 Tx_buffer;
然后开始调用Write_One_Block(addr,Tx_buffer);
**********************************************************************************/
U8 Write_One_Block(U32 Addr,U32* TxBuffer)
{
U16 i=0;
U32 status = 0;
U16 BlockSize; //定义块大小
BlockSize = (1<<(SDCard_BlockSize-2)); //以Word为单位
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<<22);
rSDIDCON = (1<<SDCard_BlockSize)|(3<<12)|(1<<14)|(1<<16)|(1<<17)|(1<<20)|(2<<22);
if(CMD24(Addr)!=1) //发送写单块操作指令
return 0;
while(i<BlockSize)
{ //开始传递数据到缓冲区
status=rSDIFSTA;
if((status&0x2000)==0x2000)
{ //如果发送FIFO可用,即FIFO未满
rSDIDAT=*TxBuffer;
TxBuffer++;
i++;
}
}
rSDIDCON = rSDIDCON&~(7<<12);
do
{ //等待数据发送结束
status=rSDIDSTA;
}while((status&0x2)==0x2);
rSDIDSTA = status;
if((status&0xFC)!=0x00)
{
return 0;
}
else
{
return 1;
}
}
/**********************************************************************************
功 能:该函数用于向 SD 卡的多个数据块写入数据
参 数:
U32 Addr 被写块的起始地址
U32 DatSize 期待被写入数据的数目,以 Word 为单位
U32* TxBuffer 待发送数据的缓冲区
返回值:
0 数据写入操作失败
1 数据写入操作成功
举 例:
在主调函数中定义一个数组作为发送缓冲区,如 U32 Tx_buffer;
然后开始调用 Write_Mult_Block(addr,DatSize,Tx_buffer);
**********************************************************************************/
U8 Write_Mult_Block(U32 Addr,U32 DatSize,const S8* TxBuffer)
{
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<<22);
while((rSDIDCON&0x4000)!=0x4000)
{
rSDIDCON = rSDIDCON| 0x4000;
}
if(CMD25(Addr)!=1)//发送写多块操作指令
return 0;
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;
if((status&0x89)!=0x00)
{
return 0;
}
else
{
return 1;
}
}
好贴怎么没有人顶
页:
[1]