?? mmconecard.c
字號:
Post Condition : VOID
******************************************************************************/
int MMCRawWrite( DEVICE *devp, int cylinder, int head, int sector,
int nsects, void *bufp )
{
return( SYS_ERR );/* raw_write SHALL NOT BE CALLED BECAUSE THIS IS HDD FORMAT */
}
/******************************************************************************
Function Name : MMCTimeStamp( U16 *time )
Input Parameters : U16 *time Buffer to store data,time
Output Parameters: VOID
Value returned : VOID
Description : Interface functions between USFiles and MMC driver.
Time Stamp
Cautions : Public function.
Prev Condition : VOID
Post Condition : VOID
******************************************************************************/
void MMCTimeStamp( U16 *time )
{
_MMCTimeSet( time );
}
/******************************************************************************
Function Name : MMCDiskChange( DEVICE *devp )
Input Parameters : DEVICE *devp Device Table
Output Parameters: VOID
Value returned : int 0: NO, 1: YES
Description : Interface functions between USFiles and MMC driver.
Media Change Yes/NO
Cautions :
Prev Condition : VOID
Post Condition : VOID
******************************************************************************/
int MMCDiskChange( DEVICE *devp )
{
U8 card_no;
MMC_STATUS ret;
card_no = 0;
ret = 0;
/*----------------------------------------------------------------------*/
/* ACQUIRE THE CARD NUMBER */
/*----------------------------------------------------------------------*/
card_no = (devp->unit_no & ~MMC_UNIT_NO);
/*----------------------------------------------------------------------*/
/* CONFIRM THE CARD STATUS */
/*----------------------------------------------------------------------*/
if ( ret = _MMCGetStatus( card_no, &_gCardInfo ) )
{
TRACE("ERR_MEDIA_DSKCHG\n");
return(ERR_MEDIA_DSKCHG );/* MEDIA CHANGE; YES */
}
else
{
return( 0 );/* MEDIA CHANGE; NO */
}
}
/******************************************************************************
Function Name : MMCIoctl(U16 Key,P_VOID pAgu,P_U32 pSize)
Input Parameters : U16 key key value
P_VOID pAgu
P_U32 pSize
Output Parameters: VOID
Value returned : SYS_OK operation success
SYS_ERR meet error
Description : Interface functions between DM and MMC driver.
Cautions :
Prev Condition : VOID
Post Condition : VOID
******************************************************************************/
STATUS MMCIoctl(U16 Key,P_VOID pAgu,P_U32 pSize)
{
switch(Key)
{
//case KEY_SYS_MSG:
return SYS_OK;
}
return SYS_ERR;
}
/******************************************************************************
Function Name : _MMCErrorConvert(MMC_STATUS status)
Input Parameters : MMC_STATUS status
Output Parameters: VOID
Value returned : See FlsMmcInterface.h
Description : Interface functions between DM and MMC driver.
Cautions : Only use MMCRead and MMCWrite
Prev Condition : VOID
Post Condition : VOID
******************************************************************************/
int _MMCErrorConvert(MMC_STATUS status)
{
if(status&MMC_READ_TIMEOUT)
{ TRACE("Error: ERR_MEDIA_READTIMEOUT\n");
return ERR_MEDIA_READTIMEOUT;
}
if(status&(MMC_CMD_TIMEOUT|MMC_ILLEGAL_ERROR_MASK))
{
TRACE("Error: ERR_MEDIA_DSKCHG\n");
return ERR_MEDIA_DSKCHG;
}
if(status&0x80000000)
{ TRACE("Error: ERR_MEDIA_OUTOFRANGE\n");
return ERR_MEDIA_OUTOFRANGE;
}
if(status&MMC_INVALID_CARD_NO)
{ TRACE("Error: ERR_MEDIA_OUTOFRANGE\n");
return ERR_MEDIA_OUTOFRANGE;
}
if(status&0x400000000)
{ TRACE("Error: ERR_MEDIA_ADDRESS\n");
return ERR_MEDIA_ADDRESS;
}
if(status&0x040000000)
{
TRACE("Error: ERR_MEDIA_WRTPRT\n");
return ERR_MEDIA_WRTPRT;
}
if(status!=0)
{ TRACE("Error: ERR_MEDIA_GENEALERROR\n");
return ERR_MEDIA_GENEALERROR;
}
}
#define BLOCK_NUM 400
int MMCLargerDataTest()
{
DEVICE dev;
int i;
PCFM_BUFFER pcfm;
U8 *pbuff;
U8 x;
pbuff=_MemMalloc(MMC_BLOCK_SIZE*BLOCK_NUM);
pcfm.nsects=1;
pcfm.userbuf=pbuff;
pcfm.devp=&dev;
dev.unit_no=MMC_UNIT_NO;
printf("Wait for two minutes\n");
if(MMCInit(&dev))
printf("Init Failed\n");
srand(9876);
for(i=0;i<MMC_BLOCK_SIZE*BLOCK_NUM;i++)
{
pbuff[i]=rand();
}
printf("Test lareg data single block read\write\n");
printf("Wait for 2 mins\n");
for(i=0;i<BLOCK_NUM;i++)
{
if(MMCWrite(i,&pcfm))
{ printf("Write failed %d\n",i);
return 2;
}
pcfm.userbuf+=MMC_BLOCK_SIZE;
}
printf("Write Finished\n");
pcfm.userbuf=pbuff;
for(i=0;i<BLOCK_NUM;i++)
{
if(MMCRead(i,&pcfm))
{
printf("Read Failed %d\n",i);
return 3;
}
pcfm.userbuf+=MMC_BLOCK_SIZE;
}
printf("Read Finished\n");
srand(9876);
for(i=0;i<BLOCK_NUM*MMC_BLOCK_SIZE;i++)
{
x=rand();
if(x!=pbuff[i])
{
printf("Data Varify failed %d\n Error 0x%X,correct 0x%X\n",i,pbuff[i],x);
return 4;
}
}
if(i==BLOCK_NUM*MMC_BLOCK_SIZE)
printf("Data Varify success\n");
printf("Large data single block read\write finised\n");
printf("Test Large Data Multi Block Read\Write\n");
printf("Wait for 2 mins\n");
pcfm.nsects=BLOCK_NUM;
pcfm.userbuf=pbuff;
srand(76);
for(i=0;i<MMC_BLOCK_SIZE*BLOCK_NUM;i++)
{
pbuff[i]=rand();
}
if(MMCWrite(0,&pcfm))
printf("Write Multi block Error\n");
for(i=0;i<MMC_BLOCK_SIZE*BLOCK_NUM;i++)
pbuff[i]=0;
if(MMCRead(0,&pcfm))
printf("Finish Multi Read Error\n");
srand(76);
for(i=0;i<MMC_BLOCK_SIZE*BLOCK_NUM;i++)
{
x=rand();
if(pbuff[i]!=x)
{
printf("Data Varified failed\n");
break;
}
}
if(i==MMC_BLOCK_SIZE*BLOCK_NUM)
printf("Data Varified successed\n");
printf("Finish Large Data Multi Block Read\Write\n");
return 0;
}
//MMC General Tesk. Must have enough stack.
int MMCGeneralTest()
{
DEVICE dev;
U8 buff1[1024];
U8 x;
int i;
PCFM_BUFFER pcfm;
pcfm.nsects=1;
pcfm.userbuf=buff1;
pcfm.devp=&dev;
dev.unit_no=MMC_UNIT_NO;
if(MMCInit(&dev))
printf("Init failed");
else
printf("Init Succes\n");
srand(1234); //set starting point for generating a series of pseudorandom integers.
for(i=0;i<1024;i++)
buff1[i]=rand(); //set rand data
printf("Test Sing Read and Write\n"); //test single read and write command
if(MMCWrite(0,&pcfm))
printf("Write Error\n");
else
printf("Write Success\n");
pcfm.userbuf=buff1+512;
if(MMCWrite(1,&pcfm))
printf("Write Error\n");
else
printf("Write Success\n");
for(i=0;i<1024;i++)
buff1[i]=0;
pcfm.userbuf=buff1;
pcfm.nsects=1;
if(MMCRead(0,&pcfm))
printf("Read Error\n");
else
printf("Read Success\n");
pcfm.userbuf=buff1+512;
pcfm.nsects=1;
if(MMCRead(1,&pcfm))
printf("Read Error\n");
else
printf("Read Success\n");
srand(1234);
for(i=0;i<1024;i++)
{ x=rand();
if(buff1[i]!=x)
{
printf("Data varify error %d\n",i);
break;
}
}
if(i==1024)
printf("Data varify success\n");
printf("Test Multi Block Read/Write\n");
srand(5678);
for(i=0;i<1024;i++)
buff1[i]=rand();
pcfm.userbuf=buff1;
pcfm.nsects=2;
if(MMCWrite(10,&pcfm))
printf("Write Failed\n");
else
printf("Write Success\n");
for(i=0;i<1024;i++)
buff1[i]=0;
pcfm.userbuf=buff1;
pcfm.nsects=2;
if(MMCRead(10,&pcfm))
printf("Read Failed\n");
else
printf("Read Success\n");
srand(5678);
for(i=0;i<1024;i++)
{
x=rand();
if(buff1[i]!=x)
{
printf("Data varify failed %d\n",i);
break;
}
}
if(i==1024)
printf("Data verify success\n");
printf("Finish General test\n");
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -