📄 sd.c
字号:
if((status = SD_WaitDatRdyOrTo())!=NO_ERROR)
goto ERR_Exit;
DisableMSDC_DMA();
MSDC_CLR_FIFO();
gSD.mCSD.ext_csd = (T_EXT_CSD_MMC40 *)rxbuffer;
return NO_ERROR;
ERR_Exit:
if(retry_4bit == KAL_FALSE)
{
retry_4bit = KAL_TRUE;
MSDC_SET_BIT32(SDC_CFG,SDC_CFG_MDLEN);
gSD.bus_width = 4;
goto start;
}
gSD.bus_width = 1;
DisableMSDC_DMA();
MSDC_CLR_FIFO();
RESET_MSDC();
return status;
}
#endif // defined(__MSDC_SD_MMC__)
#ifdef MSDC_DEBUG
#define TST_ADRS 512*12
static kal_uint8 rxbuffer[512*32],txbuffer[512*32];
//static kal_uint8 rxbuffer[512],txbuffer[512];
kal_uint32 SD_MMC_Test(void)
{
kal_uint32 result,resp;
int i;
SDC_CMD_STATUS status;
// initialize MSDC
MSDC_Initialize();
// initialize SDC
SD_Initialize();
//////////////////////////
//Mass data Tansfer(8M)//
//////////////////////////
#ifdef MASS
{
int block_num,i,j,cmp,loop = 1;
kal_uint32 ticks;
#ifdef BITS4_BUS
if(gMSDC_Handle.mMSDC_type == SD_CARD){
if(status = SD_SetBusWidth(BIT_4W))
return status;
}
#endif
for(i=0;i<512*32;i++)
txbuffer[i] = i%256;
j=0;
ticks = NU_Retrieve_Clock();
while(loop){
status = SD_WriteMultiBlock(j*512*32,(uint32*)txbuffer,32);
if(status)
{
ticks = NU_Retrieve_Clock()- ticks ;
//dbg_print("SD_WriteMultiBlock failed! %d \n\r",ticks);
//while(1);
}
status = SD_ReadMultiBlock(j*512*32,(uint32*)rxbuffer,32);
if(status)
{
ticks = NU_Retrieve_Clock()- ticks ;
//dbg_print("SD_ReadMultiBlock failed! %d \n\r",ticks);
//while(1);
}
ticks = NU_Retrieve_Clock()- ticks ;
cmp = memcmp(txbuffer,rxbuffer,512*32);
if(cmp)
{
ticks = NU_Retrieve_Clock()- ticks ;
//dbg_print("compare failed! %d \n\r",ticks);
//while(1);
}
//dbg_print("Check %d OK!\t",j);
kal_mem_set(rxbuffer,0,512*32);
j++;
if(j*32 >= gSD.mBKNum-32)
{
static count = 0;
ticks = NU_Retrieve_Clock()- ticks ;
//dbg_print("\n\r###############################\n\r",ticks);
//dbg_print("end of card %d at count %d\n\r",ticks,count++);
//dbg_print("\n\r###############################\n\r",ticks);
j=0;
ticks = NU_Retrieve_Clock();
//while(1);
}
}
/*
// (1) using single block transfer
ticks = NU_Retrieve_Clock();
block_num = 32;
//block_num = 1024;
for(i=0;i<block_num;i++)
if(status = SD_WriteSingleBlock(i*512,(kal_uint32*)txbuffer))
break;
ticks = NU_Retrieve_Clock()- ticks ;
ticks = NU_Retrieve_Clock();
for(i=0;i<block_num;i++)
{
if(status = SD_ReadSingleBlock(i*512,(kal_uint32*)rxbuffer))
break;
}
ticks = NU_Retrieve_Clock()- ticks ;
// (2) using multiple block transfer(requied to rewind the buffer pointer)
ticks = NU_Retrieve_Clock();
status = SD_WriteMultiBlock(0,(kal_uint32*)txbuffer,block_num);
ticks = NU_Retrieve_Clock()- ticks ;
ticks = NU_Retrieve_Clock();
status = SD_ReadMultiBlock(0,(kal_uint32*)rxbuffer,block_num);
ticks = NU_Retrieve_Clock()- ticks ;
*/
}
#endif // end of MASS
#ifdef SD_ERASE
// there are differences between SD and MMC
// tag erase start(CMD32)
if(status = SD_EraseCmdClass(SDC_CMD_CMD32,0))
return status;
// tag erase end(CMD33)
if(status = SD_EraseCmdClass(SDC_CMD_CMD33,512*32))
return status;
// erase...(CMD38)
if(status = SD_EraseCmdClass(SDC_CMD_CMD38,0))
return status;
// check result of erase
// single block read (CMD17)
if(status = SD_ReadSingleBlock(0,(kal_uint32*)rxbuffer))
return status;
result = 0;
for(i=0;i<512;i++)
{
if(gSD.mSCR.dat_after_erase)
{
if(rxbuffer[i] != 0xff)
result++;
}
else
{
if(rxbuffer[i] != 0x00)
result++;
}
}
#endif
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#ifdef BITS4_BUS
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif // end of 0
}
#endif // FPGA_DEBUG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -